GitLab-CI 是一套配合GitLab使用的持续集成系统(当然,还有其它的持续集成系统,同样可以配合GitLab使用,比如 Jenkins)。而且GitLab8.0以后的版本是默认集成了GitLab-CI并且默认启用的。
.gitlab-ci.yml 文件 GitLab-Runner 是配合 GitLab-CI 进行使用的。一般地,GitLab里面的每一个工程都会定义一个属于这个工程的软件集成脚本,用来自动化地完成一些软件集成工作。当这个工程的仓库代码发生变动时,比如有人 push 了代码,GitLab 就会将这个变动通知 GitLab-CI。这时 GitLab-CI 会找出与这个工程相关联的Runner,并通知这些Runner把代码更新到本地并执行预定义好的执行脚本。

安装 Runner 之前,需要检查当前操作系统信息。
# 查看操作系统
$ uname -a
Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
# 内核版本
$ cat /proc/version
Linux version 3.10.0-862.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018安装:https://docs.gitlab.com/runner/install/linux-repository.html
# 第一步:添加官方仓库
$ curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
# 第二步:安装最新的Runner
$ sudo yum install gitlab-runner
# 第三步:[可选]安装指定版本 Runner
$ yum list gitlab-runner --showduplicates | sort -r
$ sudo yum install gitlab-runner-10.0.0-1向GitLab-CI注册一个 Runner 需要两样东西:GitLab-CI的url和注册token。其中,token是为了确定你这个Runner是所有工程都能够使用的Shared Runner还是具体某一个工程才能使用的Specific Runner。如果要注册Shared Runner,你需要到管理界面的Runners页面里面去找注册token。

# 第一步:注册
$ sudo gitlab-runner register
# 第二步:输入 Gitlab 实例URL
$ Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://yourgitlab.com
# 第三步:输入Token
$ Please enter the gitlab-ci token for this runner
xxx
# 第四步:输入 Runner 描述
$ Please enter the gitlab-ci description for this runner
[hostame] my-runner
# 第五步:输入关联的tag
$ Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,fe-tag
# 第六步:输入 Runner 执行器
$ Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
shell注册:https://docs.gitlab.com/runner/register/index.html
安装成功会默认开启,当然也可以通过命令进行启动
$ sudo gitlab-runner start
# 或者
$ sudo gitlab-runner runRunners 可以是虚拟机、VPS、docker容器等,唯一要求可以访问Internet。
.gitlab-ci.yml 被 Gitlab Runner 使用,用于管理项目 Jobs,默认会有 build、test、deploy 三个阶段。其会按照顺序执行,上个stage执行成功后,才会执行下个stage。
stages:
- build
- test
- deploy
job 1:
stage: build
script: make build dependencies
job 2:
stage: build
script: make build artifacts
job 3:
stage: test
script: make test
job 4:
stage: deploy
script: make deployallow_failure: true之外),后续所以作业不再执行,则标记为失败。stages:
- deploy
deploy_master:
stage: deploy
script:
- npm install
- npm run build
- sudo cp -rf dist /project-path/demo-collection/dist
only:
- master
tags:
- fe-tagdeploy_master 为 jobs名称(该名称需要具有唯一性,但不能关键词image、services、stages、types、before_script、after_script、variables cache),其必须包含 script 。script 可以执行脚本(test.sh)或者是命令。
Keyword | Required | 描述 |
|---|---|---|
script | 是 | 定义由Runner执行的shell脚本 |
stage | 否 | 定义Job的stage,默认为test |
type | 否 | stage别名 |
only | 否 | 定义job对应的git refs |
tags | 否 | 定义用于选择Runner的标记 |
cache | 否 | 定义后续运行之间应缓存的文件列表 |
allow_failure | 否 | 允许失败,并执行下步操作 |
参考地址:https://yourgitlab.com/help/ci/yaml/README.md
注意: script可以指向一个脚本,如
ci/deploy_master.sh脚本自动执行时,其用户是 gitlab-runner, 会遇到无权操作的问题,这时要把 gitlab-runner 加入root用户,并使gitlab-runner可以免密使用sudo命令,并在脚本的命令前加上sudo # 切换到root账号下 $ su # 添加sudo文件的写权限 $ chmod u+w /etc/sudoers # 编辑sudoers文件 $ vi /etc/sudoers # 添加如下内容 允许用户gitlab-runner执行sudo命令,并且在执行的时候不输入密码 gitlab-runner ALL=(ALL) NOPASSWD: ALL # 撤销sudo文件写权限 $ chmod u-w /etc/sudoers
git push 推送时,Gitlab 将查找 .gitlab-ci.yml 文件,并根据该文件的内容在 Runners 上启动该提交的 Jobs。
gitlab中 CI/CD => Pipelines => CI配置检测(CI Lint)可以检查
.gitlab-ci.yml语法是否正确。 完整语法说明:https://yourgitlab.com/help/ci/yaml/README.md
问: deploy 默认都执行哪些操作?
答: 获取最新提交,并切换到指定分支;然后删除 dist/ 和 node_modules/,最后执行指定脚本
Running with gitlab-runner 11.10.1 (1f513601)
on fe-runner 1f929e69
Using Shell executor...
Running on localhost.localdomain...
DEPRECATION: this GitLab server doesn't support refspecs, gitlab-runner 12.0 will no longer work with this version of GitLab
Fetching changes...
From http://yourgitlab.com/project-name
5ac430d..7436da8 master -> origin/master
Checking out 7436da8c as master...
Removing dist/
Removing node_modules/
Skipping Git submodules setup
$ npm install
...
$ npm run build
...问: gitlab-ci 生成的文件在哪里
答: .如上述生成的目录为 /home/gitlab-runner/builds/1f929e69/0/gitlab-group/demo-collection
问: gitlab-ci 日志文件在哪里
答: 如上述生成的目录为 /home/gitlab-runner/.npm/_logs/2019-04-29T09_51_27_384Z-debug.log