承广大开发者的无私,目前开源免费的 git
仓库管理项目已经越来越多,也越来越好,例如gitea
、gogs
以及gitlab
。这篇文章主要是简单介绍一下通过 docker
搭建gitlab
以及gitlab runner
自动CI工具。
在启用 CI/CD
之前,我一直在使用 gitea
,对性能友好,界面也比较简洁,但功能也相当完善,但是由于一些原因,CI/CD
未搭建起来,遂改用 gitlab
,之后再研究一下gitea
的CI/CD
搭建吧。
搭建 gitlab
的第一件事情,当然就是:打开搜索引擎,搜索docker gitlab
( (* ̄︶ ̄) )。
参考了一部分站点内容后,做了一下整合。
gitlab-ce 搭建
下来
gitlab
镜像:gitlab/gitlab-ce
1
2# gitlab-ce为稳定版本,后面不填写版本则默认pull最新latest版本
docker pull gitlab/gitlab-ce运行
gitlab
镜像:1
2
3
4
5
6docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --hostname=git.example.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
没有自动加载。这时候需要给配置文件在增加一点配置:
1
2
3
4
5
6nginx['listen_port'] = 80
nginx['listen_https'] = false
nginx['proxy_set_headers'] = {
"X-Forwarded-Proto" => "https",
"X-Forwarded-Ssl" => "on"
}max_body_size
配置(根据自己需要):1
nginx['client_max_body_size'] = '20m'
邮件通知
gitlab
支持邮件通知,这里使用smtp
协议进行配置。在配置文件里面,新增配置:
1
2
3
4
5
6
7
8
9
10
11
12
13gitlab_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
进行部署,相对简单很多:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25# 拉取镜像
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.example.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
(注意 “.
“ 不要漏了.),
添加以下内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24image: 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
打包下载。结束
结束。
参考资料
docker下gitlab安装配置使用(完整版)
使用Nginx搭建并代理GitLab服务器
Gitlab配置邮件通知
Docker搭建自己的Gitlab CI Runner