.gitlabci.yml
本文最后更新于:2 小时前
.gitlab-ci.yml初始模版
# This file is a template, and might need editing before it works on your project.
# This is a sample GitLab CI/CD configuration file that should run without any modifications.
# It demonstrates a basic 3 stage CI/CD pipeline. Instead of real tests or scripts,
# it uses echo commands to simulate the pipeline execution.
#
# A pipeline is composed of independent jobs that run scripts, grouped into stages.
# Stages run in sequential order, but jobs within stages run in parallel.
#
# For more information, see: https://docs.gitlab.com/ee/ci/yaml/index.html#stages
#
# You can copy and paste this template into a new `.gitlab-ci.yml` file.
# You should not add this template to an existing `.gitlab-ci.yml` file by using the `include:` keyword.
#
# To contribute improvements to CI/CD templates, please follow the Development guide at:
# https://docs.gitlab.com/ee/development/cicd/templates.html
# This specific template is located at:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Getting-Started.gitlab-ci.yml
stages: # List of stages for jobs, and their order of execution
- build
- test
- deploy
build-job: # This job runs in the build stage, which runs first.
stage: build
script:
- echo "Compiling the code..."
- echo "Compile complete."
unit-test-job: # This job runs in the test stage.
stage: test # It only starts when the job in the build stage completes successfully.
script:
- echo "Running unit tests... This will take about 60 seconds."
- sleep 60
- echo "Code coverage is 90%"
lint-test-job: # This job also runs in the test stage.
stage: test # It can run at the same time as unit-test-job (in parallel).
script:
- echo "Linting code... This will take about 10 seconds."
- sleep 10
- echo "No lint issues found."
deploy-job: # This job runs in the deploy stage.
stage: deploy # It only runs when *both* jobs in the test stage complete successfully.
environment: production
script:
- echo "Deploying application..."
- echo "Application successfully deployed."
执行流程
stages
定义 CI 执行流程的多个阶段,在上面的初始模版中共定义了三个阶段:
- build
- test
- depoly
stages
中的顺序决定对应 job
的执行顺序。如上面模版中,首先执行 build 阶段,所有属于 build 阶段的 job
会并行,执行结束后,才会开始执行下一个stage
test。
下面的 build-job
,unit-test-job
, lint-test-job
, deploy-job
定义了一系列带有约束说明的job
,每个job
必须包含 script
。script
可以直接执行系统命令或脚本。job
中的stage
定义了该job
属于哪个stages
。
该模版文件的输出结果是
# 首先执行 buile 阶段,下面的 job 中,build-job 属于 build 阶段
Compiling the code...
Compile complete.
# 执行 test 阶段,unit-test-job 和 lint-test-job 属于 test 阶段
Running unit tests... This will take about 60 seconds.
Code coverage is 90%
# 最后执行 deploy 阶段,deploy-job 属于 deploy 阶段
Deploying application...
Application successfully deployed.
gitlab-runner
job
由 gitlab-runner 执行,每一个job
的执行过程都是独立的,可以在不同的机器安装 gitlab-runner,并分配给不同的 project。
在 CentOS 中安装 gitlab-runner
# 添加 yum 源
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
# 更新 yum
yum update
# 安装 gitlab-runner
yum install gitlab-runner
# 查看版本
gitlab-runer -v
注册
gitlab-runner register
# 填 gitlab 的 ip,可以是私有部署的 gitlab,也可以直接填写 https://gitlab.com
# 在 CI/CD 设置中找到 registration token,填写
然后可以在设置中看到已注册的可运行的 runner
接下来 push 代码,就会自动触发 runner 执行任务
gitlab-runner 安装踩坑
- git 版本过低
CentOS 中带有的的 git 版本可能是 1.8.x,在这个版本中,CI 执行过程 gitlab-runner 可能会报错:
fatal: git fetch-pack: expected shallow list
fatal: The remote end hung up unexpectedly
更新 git 版本到最新就好了。
- 查看gitlab-runner 执行过程
更新 gitlab-runner 到最新版本,可在 GitLab 中看到 runner 在控制台中的执行过程。
若在添加 yum 源后没有执行 yum update
,安装的 gitlab-runner 是低版本,在 GitLab 中只能看到 job
执行的最终结果,如果执行出错,不方便排查是哪里出现的错误。
# 添加 yum 源
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
# 更新 yum,-y 参数默认为后面的命令执行 y
yum update -y
# 更新 gitlab-runner
yum install gitlab-runner
# 查看版本
gitlab-runner -v
# 我安装的 Version: 15.5.0 可以看到详细的执行过程
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!