承广大开发者的无私,目前开源免费的 git
仓库管理项目已经越来越多,也越来越好,例如gitea
、gogs
以及gitlab
。这篇文章主要是简单介绍一下通过 docker
搭建gitlab
以及gitlab runner
自动CI工具。
在启用 CI/CD
之前,我一直在使用 gitea
,对性能友好,界面也比较简洁,但功能也相当完善,但是由于一些原因,CI/CD
未搭建起来,遂改用 gitlab
,之后再研究一下gitea
的CI/CD
搭建吧。
搭建 gitlab
的第一件事情,当然就是:打开搜索引擎,搜索docker gitlab
( (* ̄︶ ̄) )。
参考了一部分站点内容后,做了一下整合。
-
下来
gitlab
镜像:gitlab/gitlab-ce
# gitlab-ce为稳定版本,后面不填写版本则默认pull最新latest版本 docker pull gitlab/gitlab-ce
- 运行
gitlab
镜像:docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --hostname=git.kekxv.com --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce # -d:后台运行 # -p:将容器内部端口向外映射 # --hostname:设置容器的 hostname # --name:命名容器名称 # -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录
根据自己的需要,将对应端口映射出来,因为我主机上已经搭配好了
nginx
,并且不需要ssh
进行操作,所以我这边仅仅将80
端口进行映射。各位可以根据需要,自行修改。 -
配置
在这个时候,已经搭建完成,可以直接打开浏览器,输入对应地址进行查看。
如果发现某些地址不对,
url
路径有点问题,则有可能是配置的问题,可以先将/home/gitlab/config/gitlab.rb
(如果修改过映射路径,请自行更改,下同)。打开配置文件,然后加入
external_url 'http://192.168.1.2'
(加入你的地址是192.168.1.2
,如果不是,请自行修改)。然后重启容器,再次进入即正常。
(如果还是出现不正常的情况,则检查
--hostname
参数是否指定为192.168.1.2
,如果不是,删掉gitlab
镜像(docker stop gitlab && docker rm gitlab
),重新run
运行gitlab
镜像)。 -
外部
NGINX
https
如果是通过
nginx
反向代理,并且使用了https
功能,则可能会发现,某些功能不正常了,例如项目主页的README.md
没有自动加载。这时候需要给配置文件在增加一点配置:
nginx['listen_port'] = 80 nginx['listen_https'] = false nginx['proxy_set_headers'] = { "X-Forwarded-Proto" => "https", "X-Forwarded-Ssl" => "on" }
max_body_size
配置(根据自己需要):nginx['client_max_body_size'] = '20m'
-
邮件通知
gitlab
支持邮件通知,这里使用smtp
协议进行配置。在配置文件里面,新增配置:
gitlab_rails['gitlab_email_enabled'] = true gitlab_rails['gitlab_email_from'] = '邮件地址' gitlab_rails['gitlab_email_display_name'] = '发送昵称' gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.exmail.qq.com,这里用的是腾讯企业邮" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "账号" gitlab_rails['smtp_password'] = "密码" gitlab_rails['smtp_domain'] = "smtp_domain" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true # 使用 tls 加密 gitlab_rails['smtp_tls'] = true
配置没有问题之后,重启
gitlab
,执行docker exec -it gitlab gitlab-rake gitlab:incoming_email:check
,应该可以得到finish
。如果失败了,则检查一下账户密码。
-
Gitlab CI介绍
CI
:持续集成,我们通常使用CI
来做一些自动化工作, 比如程序的打包,单元测试,部署等, 这种构建方式避免了打包环境差异引起的错误, 提高了工作效率。Gitlab-CI
是Gitlab
官方提供的持续集成服务, 我们可以在仓库的根目录下新建.gitlab-ci.yml
文件, 自己定义持续集成流程模板,并且在Gitlab
中配置runner
, 在之后的每次提交合并中将会触发构建,并且可以通过Gitlab
的hook
, 在代码提交的各个环节自动地完成一系列的构建工作, 总之对于一些非复杂性的集成需求,都是可以满足的。 -
Gitlab CI (gitlab-runner) 部署
使用
docker
进行部署,相对简单很多:# 拉取镜像 sudo docker pull gitlab/gitlab-runner:latest # 添加 gitlab-runner container sudo docker run -d --name gitlab-runner --restart always \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest # 注册runner sudo docker exec -it gitlab-runner gitlab-ci-multi-runner register # gitlab-runner register Please enter the gitlab-ci coordinator URL: # 示例:https://git.kekxv.com/ Please enter the gitlab-ci token for this runner: # xxxxxx Please enter the gitlab-ci description for this runner: # 示例:ubuntu Please enter the gitlab-ci tags for this runner (comma separated): # 示例:*,ubuntu Whether to run untagged builds [true/false]: # true Please enter the executor: docker, parallels, shell, kubernetes, docker-ssh, ssh, virtualbox, docker+machine, docker-ssh+machine: # docker Please enter the default Docker image (e.g. ruby:2.1): # ubuntu
若是
runner
注册成功, 此时到我们项目首页右侧 设置 —》CI/CD Pipelines
—》Runners activated for this project
就可以看到我们刚注册的qd_api_runner
了。测试 :
我们新建一个
vue
项目,可以直接vue create test_ci
, 然后进入目录,新增文件.gitlab-ci.yml
(注意 “.
” 不要漏了.), 添加以下内容:image: node:alpine stages: - build cache: key: ${CI_COMMIT_REF_NAME} paths: - node_modules/ job-build: stage: build only: - master tags: - shell script: - npm set registry https://registry.npm.taobao.org - npm install --progress=false - npm run build artifacts: expire_in: 1 week paths: - dist
使用
node:alpine
镜像自动部署。并且可以将dist
打包下载。 -
结束
结束。