还有一种自动化是使用[[../自动化/JenkinsHudson使用Maven构建war包]]
[[GitLab介绍]] CI/CD [[GitLab介绍#CI CD]] 类似Jenkins,可以用于自动构建、发布项目 流程:
1、安装GitLab、GitLab Runner [[GitLab介绍#GitLab Runner]]
2、将runner注册到GitLab上
3、在项目中添加.gitlab-ci.yml文件,指定构建工作的具体事务
需要的套件:GitLab、GitLab Runner
环境安装:
GitLab的安装参考上一篇文档[[GitLab安装记录]]
GitLab Runner安装
rpm安装:
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
yum install -y gitlab-runner
gitlab-runner配置文件
vi /etc/gitlab-runner/config.toml
配置文件内容内容描述
concurrent = 10 # 同时进行作业的数量,默认为1
check_interval = 1 # 检查是否有新作业的间隔时间(秒)
[session_server]
session_timeout = 1800
[[runners]] # 添加runner后会自动生成的内容
name = "git server runner" # 本runner的描述
url = "http://git2.jiaparts.com/" # gitlab服务器地址
token = "一串长度为20的字符串" # 在gitlab上生成的api访问token,代替gitlab用户的密码
executor = "ssh" # 连接到runner机器的方式
builds_dir = "/jpdata/backup/gitlabrunner/" # runner作业的临时目录,默认在用户目录下
[runners.custom_build_dir]
[runners.ssh] # 对应上面executor的配置
user = "root" # 到runner机器的用户
host = "1.1.1.1" # runner的IP
port = "22" # runner SSH 端口
identity_file = "/home/gitlab-runner/.ssh/id_rsa" # 通过私钥登录到runner服务器,以免输入密码
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
docker安装:
GitLab Runner注册
GitLab Runner类型分以下几种
实例 Runner:全局范围,适用于所有项目和群组。
群组 Runner:群组范围,适用于特定群组下的所有项目。
如果不需要做细分,推荐用以实例类型注册Runner,就是在GitLab的管理中心注册,可以全局共用。 如果是群组内使用,例如PHP JAVA项目需要不同的环境,可以在对应的群组管理界面注册群组Runner。 单独为项目注册Runner,我的理解是用在特殊的环境要求下才会考虑,例如项目的编译系统要求比较特殊,可以考虑注册一个单独的Runner
注册时需要gitlab提供两个信息,一个是URL,一个是TOKEN,在gitlab上的如下位置可以找到 
gitlab-runner 注册
rum安装注册,直接运行如下命令,然后按提示输入相关信息
docker安装的runner则需要通过如下命令,启动一个容器来进行注册,其它操作相同
注册完成之后就能在刚才查看runner信息的地方看到已经连接成功的runner
.GitLab-ci.yml示例
在项目的根目录下添加.gitlab-ci.yml文件,内容大致如下 ^340752
定义完在项目中启用Auto DevOps,指定要使用的runner即可
流水线计划条件配置入口 
gitlab pages,需要配置runner
Docker容器的其他配置,如果以容器运行gitlab。必须修改如下配置,不然会导致访问pages时一直提示502网关错误 GitLab Pages守护程序在Docker容器中运行时无权绑定挂载。要解决此问题,您需要更改chroot行为:
编辑/etc/gitlab/gitlab.rb。 设置inplace_chroot到true为GitLab页数:
gitlab-runner 报如下错误,是git版本太低导致
Reinitialized existing Git repository in ///.git/ fatal: git fetch-pack: expected shallow list fatal: The remote end hung up unexpectedly
安装2.0以上版本
~~https://docs.gitlab.com/ce/ci/variables/README.html~~ 新的默认环境变量列表
如果在CI/CD脚本中需要配置敏感信息(例如密码、密钥等),可以在单个的项目或者群组或整个项目的 设置--CI/CD--变量 中进行提前定义。这样可以在.gitlab-ci.yaml脚本中可以直接调用对应的变量名来引用敏感信息而不会造成泄露
GitLab CI/CD流水线自定义触发规则
GitLab通过配置.gitlab-ci.yml文件中的when来定义对应流水线的统一触发规则
如果有时希望部分操作可以自动触发流水线,就可以用到rules来进行定义
当提交信息中包含'deploy'时,则该流水线会被自动触发,用$CI_COMMIT_MESSAGE变量来判断
当使用push同时提交信息中有关键字‘build'时触发build作业;当提交信息中有关键字'test'时,触发test作业
根据提交内容选择是否自动执行
根据提交信息的开头是否匹配from git2来判断是否自动执行(when的默认策略是on_success)
定时/计划任务流水线
有时候需要定时运某个作业,可以在项目中配置流水线计划。需要注意的是希望定时运行的作业触发条件不能是手动( when: manual)。推荐使用Only关键字来配置。定义的值为schedules。 定时任务触发:左侧菜单栏的“构建”--“流水线计划”,在该界面添加定时任务计划即可
定时任务触发:左侧菜单栏的“构建”--“流水线计划”,在该界面添加定时任务计划即可
如果同一个作业希望即可以定时任务,也可以手动触发,可以用rules来实现。或者将同一个作业复制成两份,一份配置when: manual。 下面以rules配置方法来示范
手动触发流程:左侧菜单栏的“构建”--“流水线”--右上角“运行流水线”。 定时任务触发:左侧菜单栏的“构建”--“流水线计划”,在该界面添加定时任务计划即可
修改~/.git-credentials中对应主机的token