发布于

初探GitlabCI

Authors
  • avatar
    Name
    田中原
    Twitter

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名称(该名称需要具有唯⼀一性,但不能使用关键词 imageservicesstagestypesbefore_scriptafter_scriptvariablescache ),其必须包含 scriptscript 可 以执⾏行行脚本( test.sh )或者是命令。

KeywordRequired描述
script定义由Runner执⾏行行的shell脚本
stage定义Job的stage,默认为 test
typestage别名
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

官⽅方更更多FAQ:https://docs.gitlab.com/runner/faq/README.html