1. 仓库配置
根目录下增加 .gitlab-ci.yml
文件,示例:
stages: # 作业分组列表及分组执行顺序
- build
- test
- deploy
build-job:
stage: build # 这个作业运行在build分组
script:
- cd /home && ls -la
- whoami
- echo "Compiling the code..."
- echo "Compile complete."
unit-test-job:
stage: test # 这个作业运行在test分组,只有build分组执行成功后才能执行
script:
- echo "Running unit tests... This will take about 60 seconds."
- sleep 60
- echo "Code coverage is 90%"
lint-test-job:
stage: test # 这个作业运行也在test分组,配置了多个runner或单个runner的concurrent>1时可与unit-test-job作业并行执行
script:
- echo "Linting code... This will take about 10 seconds."
- sleep 10
- echo "No lint issues found."
deploy-job:
stage: deploy # 这个作业运行在deploy分组,只有test分组执行成功后才能执行
environment: production
script:
- echo "Deploying application..."
- echo "Application successfully deployed."
常用字段:
stages
:定义所有可用的作业分组(阶段),分组内的作业并行执行(需多个Runner),各分组顺序执行。 常用stage有:.pre
(特殊阶段,在所有阶段之前运行)、build
、test
、deploy
、.post
(特殊阶段,在所有阶段之后运行)。deploy-doc-job
:一条作业stage
:作业所属的分组,如果作业没有指定 stage,它会被分配到 test 分组variables
:作业级变量,将覆盖全局变量script
:作业要执行的命令或脚本,除了“触发作业”之外的所有作业都需要一个script
dependencies
:作业依赖的其他作业的timeout
:作业的超时时间tags
:运行作业的 Runner(见下文)标签rules
:指定何时运行或跳过作业,过时的only
和except
仍受支持,但不能在同一作业中与rules
一起使用
更详细的说明见官方文档。
2. Gitlab创建Runner
GitLab Runner 是 GitLab CI/CD 的核心组件之一,负责执行 GitLab CI/CD 流水线中的作业。
- 网页中打开仓库,设置-->CI/CD-->Runner-->新建项目Runner
选择Runner平台(Linux为例)等信息
注意:运行未打标签的作业选项未启用时,Runner只能够执行标签*选项中配置的作业,无标签或标签不在列表中的作业将无法执行。
- 确认后转入runner配置页面,包含安装、注册Runner的方法。
2.1 安装Runner服务
首次安装可参考如何安装 Runner?中的提示在运行脚本的Linux主机上安装Runner,主要步骤:
# 下载gitlab-runner
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# 赋予执行权限(确保/usr/local/bin在PATH中)
sudo chmod +x /usr/local/bin/gitlab-runner
# 创建gitlab-runner用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
# 安装并启动gitlab-runner服务
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
gitlab-runner help
可查看帮助
根据官方文档,需要检查 /home/gitlab-runner/.bash_logout
,如果该文件存在且其中含有如下脚本时:
if [ "$SHLVL" = 1 ]; then
[ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi
将其注释掉,否则在执行shell作业时会报错(Job failed: prepare environment: exit status 1.)。
2.2 注册Runner
同样在该主机上,执行网页中的提供注册命令。推荐使用sudo执行,以普通用户注册的需要手动运行 gitlab-runner run
并保持运行,否则作业无法执行;以root用户注册的runner自动由系统服务执行。
sudo gitlab-runner register --url http://xx.xx.xx.xx:25153 --token xx-xxx--xx-
根据提示,输入Runner的参数,其中 Enter an executor
使用shell。
配置完成后配置信息存储在 config.toml
中,以普通用户注册的路径为 ~/.gitlab-runner/config.toml
,root用户为 /etc/gitlab-runner/config.toml
。
命令执行完成后,gitlab网页中将显示注册成功信息,并可在Runner页查看到状态:
绿色圆形标识代表Runner注册正确,下方为该runner处理的任务标签列表。
3. 执行作业
至此,Gitlab即可执行 gitlab-ci.yml
中定义的作业,作业在流水线中执行:
- 推送后自动执行,分支、标签等,可在yml中定义更多规则
- 手动执行:项目-->构建-->流水线-->运行流水线
可通过项目-->构建-->作业查看作业状态。
没有评论