- 发布于
初探GitlabCI
- Authors
- Name
- 田中原
GitlabCI
目录
GitLab-CI 是⼀一套配合GitLab使⽤用的持续集成系统(当然,还有其它的持续集成系统,同样可以配 合GitLab使⽤用,⽐比如 Jenkins)。⽽而且GitLab8.0以后的版本是默认集成了了GitLab-CI并且默认启⽤用 的。 项⽬目根⽬目录增加 .gitlab-ci.yml ⽂文件 配置⼀一个 Runner
GitLab-Runner
GitLab-Runner 是配合 GitLab-CI 进⾏行行使⽤用的。⼀一般地,GitLab⾥里里⾯面的每⼀一个⼯工程都会定义⼀一个属于这 个⼯工程的软件集成脚本,⽤用来⾃自动化地完成⼀一些软件集成⼯工作。当这个⼯工程的仓库代码发⽣生变动时,⽐比 如有⼈人 push 了了代码,GitLab 就会将这个变动通知 GitLab-CI。这时 GitLab-CI 会找出与这个⼯工程相关联 的Runner,并通知这些Runner把代码更更新到本地并执⾏行行预定义好的执⾏行行脚本。
安装 Gitlab 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 ([email protected]) (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 Runner
向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 run
Runners 可以是虚拟机、VPS、docker容器器等,唯⼀一要求可以访问Internet。
.gitlab-ci.yml
.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 deploy
build
的所有作业都是并⾏执行的;build
执成功后,执⾏test
,然后执行deploy
;deploy
成功后,则标记为成功- 任意作业失败(除
allow_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-tag
deploy_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
FAQ
问: 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/project
问: gitlab-ci ⽇日志⽂文件在哪⾥里里
答:如上述⽣生成的⽬目录为 /home/gitlab-runner/.npm/_logs/2018-04-29T09_51_27_384Z- debug.log