【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
开源代码托管平台 Gitlab ,从10.0版本开始内置了 CI 功能,开始向 Jenkins看齐。
那么看过了那么多 Gitlab 相关的文章,是时候动手体验它了。
好,咱们从零开始、探其本质之旅……
概述
本篇文章介绍使用Docker快速搭建Gitlab环境,用于安全的学习它的功能。
最大的特点是:快速搭建、最少资源。若在生产上使用,需要更多考虑 可维护性、高可用、数据安全 等因素。
环境
# uname -a
Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u3 (2015-08-04) x86_64 GNU/Linux
# cat /etc/docker/daemon.json # 使用国内DaoCloud加速Docker镜像下载的加速
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
# docker info
Containers: 3
Running: 3
Paused: 0
Stopped: 0
Images: 10
Server Version: 18.06.3-ce
Storage Driver: aufs
Root Dir: /mnt/docker/aufs
Backing Filesystem: xfs
Dirs: 92
Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: a592beb5bc4c4092b1b1bac971afed27687340c5
init version: fec3683
Kernel Version: 3.16.0-4-amd64
Operating System: Debian GNU/Linux 8 (jessie)
OSType: linux
Architecture: x86_64
CPUs: 32
Total Memory: 125.8GiB
Name: cn.bilibil.ep
ID: Q5K6:UMW2:ZRVQ:U7GS:Z5EU:5CJF:QA7X:ESRA:U3IG:CCFM:VW36:HMEV
Docker Root Dir: /mnt/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
http://f1361db2.m.daocloud.io/
Live Restore Enabled: false
安装过程
写在前面
# 本文涉及的常用命令解释
docker -h # 显示命令参考
docker ps # 查看当前运行状态的容器列表
docker ps -a # 查看本地所有容器列表
docker logs ${容器名/容器ID} # 查看容器终端的最新日志
docker logs -f ${容器名/容器ID} # 滚动查看容器的终端日志,Ctrl + C 结束
docker exec -it ${容器名/容器ID} ${终端命令} # 登录容器并执行对应的命令,比如执行 bash 就相当于登录
docker {start,stop,restart} ${容器名/容器ID} # 容器启停
拉取镜像
# 拉取Gitlab社区版的Docker官方镜像最新版
docker pull gitlab/gitlab-ce:latest
# 拉取Gitlab-Runner官方镜像最新版
docker pull gitlab/gitlab-runner:latest
创建实例
# 使用本地的Gitlab镜像跑起一套实例(过程需要几分钟时间,完成后访问7780端口、首次登录要设置内置管理员密码)
docker run -d --name gitlab \
--publish 7443:443 \
--publish 7780:80 \
--publish 7722:22 \
--volume /mnt/share/gitlab/config:/etc/gitlab \
--volume /mnt/share/gitlab/logs:/var/log/gitlab \
--volume /mnt/share/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce
# 使用本地Gitlab-Runner镜像跑起一套实例
docker run -d --name gitlab-runner \
--volume /mnt/share/gitlab/runner-config:/etc/gitlab-runner \
--volume /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner
配置、验证
连接Gitlab和Runner
# 如下录入 Gitlab 中显示的信息:
docker exec -it gitlab-runner gitlab-runner register
# 查看最终效果,显示已配置的 Runner 列表(1个节点可以配置多个Runner)
docker exec -it gitlab-runner gitlab-runner list
验证结果
- 示例项目
// 仅有的主程序文件: http-server.go
package main
import (
"fmt"
"net/http"
)
func pong(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, "Pong.")
}
func headers(w http.ResponseWriter, req *http.Request) {
for name, headers := range req.Header {
for _, h := range headers {
fmt.Fprintf(w, "%v: %v\n", name, h)
}
}
}
func main() {
http.HandleFunc("/", headers)
http.HandleFunc("/ping", pong)
http.ListenAndServe("0.0.0.0:9080", nil)
}
- 按模板创建 CI 规则文件: .gitlab-ci.yml
image: daocloud.io/library/golang
variables:
REPO_NAME: simplehttpserver
BIN_NAME: goweb
before_script:
- mkdir -p $GOPATH/src/$(dirname $REPO_NAME)
- ln -svf $CI_PROJECT_DIR $GOPATH/src/$REPO_NAME
- cd $GOPATH/src/$REPO_NAME
stages:
- test
- build
- deploy
format:
stage: test
script:
- go fmt $(go list ./... | grep -v /vendor/)
- go vet $(go list ./... | grep -v /vendor/)
- go test -race $(go list ./... | grep -v /vendor/)
compile:
stage: build
script:
- go build -race -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/$BIN_NAME
artifacts:
paths:
- $BIN_NAME
常见错误
- Gitlab-Runner终端提示
ERROR: Checking for jobs... forbidden runner=xxxxxx
是Runner在向Gitlab探活时,收到 http/403 的提示伴随错误信息ERROR: Runner http://gitlab.local.domain:xx/xxxxxx is not healthy, but will be checked!
可能性:Runner的令牌配置错误、配置文件中有多余的Runner节点配置 - Runner在线,但CI过程提示无可用Runner。Gitlab默认配置Runner只允许运行有Tag的分支,可以打Tag或允许无Tag
- 任务执行失败
ERROR: Job failed (system failure): Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 流水线执行失败,日志显示连接Gitlab失败。
需要在Gitlab-Runner的配置文件 config.toml 中增加 Gitlab 服务器对应的 hosts 配置[[runners]] – [[runners.docker]] – “extra_hosts = ["14b7fab494f8:172.16.0.86"]
在Gitlab的主配置文件中显式申明external_url 'http://172.16.0.86:7780'
为自身的IP和端口(注意:如果端口非80,需要保留此配置并删除Gitlab的容器再重开实例才能生效)
来源:oschina
链接:https://my.oschina.net/higkoo/blog/3152207