GitLabCI-CD示例

还有一种自动化是使用[[../自动化/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:项目范围,适用于特定项目。

如果不需要做细分,推荐用以实例类型注册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以上版本


gitlab 环境变量列表

~~https://docs.gitlab.com/ce/ci/variables/README.html~~arrow-up-right 新的默认环境变量列表arrow-up-right

如果在CI/CD脚本中需要配置敏感信息(例如密码、密钥等),可以在单个的项目或者群组或整个项目的 设置--CI/CD--变量 中进行提前定义。这样可以在.gitlab-ci.yaml脚本中可以直接调用对应的变量名来引用敏感信息而不会造成泄露


GitLab CI/CD流水线自定义触发规则

GitLab通过配置.gitlab-ci.yml文件中的when来定义对应流水线的统一触发规则

  • always 总是自动触发

  • manual 手动触发

  • never 从不,手动触发也不会生效

如果有时希望部分操作可以自动触发流水线,就可以用到rules来进行定义

当提交信息中包含'deploy'时,则该流水线会被自动触发,用$CI_COMMIT_MESSAGE变量来判断

当使用push同时提交信息中有关键字‘build'时触发build作业;当提交信息中有关键字'test'时,触发test作业

根据提交内容选择是否自动执行

根据提交信息的开头是否匹配from git2来判断是否自动执行(when的默认策略是on_success)

定时/计划任务流水线

有时候需要定时运某个作业,可以在项目中配置流水线计划。需要注意的是希望定时运行的作业触发条件不能是手动( when: manual)。推荐使用Only关键字来配置。定义的值为schedules。 定时任务触发:左侧菜单栏的“构建”--“流水线计划”,在该界面添加定时任务计划即可

定时任务触发:左侧菜单栏的“构建”--“流水线计划”,在该界面添加定时任务计划即可

如果同一个作业希望即可以定时任务,也可以手动触发,可以用rules来实现。或者将同一个作业复制成两份,一份配置when: manual。 下面以rules配置方法来示范

手动触发流程:左侧菜单栏的“构建”--“流水线”--右上角“运行流水线”。 定时任务触发:左侧菜单栏的“构建”--“流水线计划”,在该界面添加定时任务计划即可


更新快到期的token

修改~/.git-credentials中对应主机的token


使用token拉代码

最后更新于