概念

Gitlab内置了CI/CD的工具,在项目中增加.gitlab-ci.yml文件,并且配置gitlab-runner(运转器)后,代码更新时会主动构建、布置。

.gitlab-ci.yml一般放在项目根目录,该文件是用来指定构建、测试和布置流程、以及CI触发条件的脚本。当Gitlab检测到代码提交契合.gitlab-ci.yml文件指定的触发条件时,则会运用配置的gitlab-runner履行.gitlab-ci.yml脚本。

gitlab-runner相当于Gitlab中使命的履行器,Gitlab会在需求履行使命时调用它。

配置gitlab CICD流程

配置gitlab CICD流程需求两步:

  • 第一步:在服务器装置 gitlab-runner 并相关库房。
  • 第二步:编写gitlab-ci.yml。

装置 gitlab-runner

  1. 依据服务器体系版别,下载对应的gitlab-runner。运用uname -a 检查体系版别。
# Linux x86-64
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64" 
# Linux x86 
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386" 
# Linux arm 
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm"
# Linux arm64 
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm64" 
# Linux s390x 
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-s390x" 
# Linux ppc64le 
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-ppc64le" 
# Linux x86-64 FIPS Compliant 
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64-fips"
  1. 给 gitlab-runner 分配履行权限
sudo chmod +x /usr/local/bin/gitlab-runner
  1. 创立gitlab ci用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
  1. 装置和运转gitlab-runner
sudo gitlab-runner install --user=root --working-directory=/home/gitlab-runner
sudo gitlab-runner start
  • –working-directory:指定gitlab-runner运转的工作目录,会在该目录下装置依赖、打包代码、存储缓存。
  • –user:指定gitlab-runner运转的用户。
  1. 注册runner

    进入配置gitlab cicd的工程,挑选Settings -> CI/CD -> Runners -> Expand,检查URL和token,履行下方指令注册runner,输入runner描述、runner tags、runner executor,在runners下面能够看到Available specific runners,表明注册成功。

sudo gitlab-runner register --url $URL --registration-token $REGISTRATION_TOKEN

Gitlab CICD自动化打包部署实践总结

Gitlab CICD自动化打包部署实践总结

gitlab-ci.yml

了解gitlab-ci.yml

gitlab-ci.yml 指定的使命内容总体构成1个pipeline、1个pipeline包括不同的stage履行阶段、每个stage包括不同的job使命。如下图所示:

Gitlab CICD自动化打包部署实践总结

编写gitlab-ci.yml

stages:
  - build
  - deploy
build_job:
  cache:
    untracked: true
    key:
      files:
        - package.json
    paths:
      - /node_modules/
  stage: build
  script:
    - npm install
    - npm run build
  tags:
    - ba-runner # 装置 gitlab-runner 时加的 tag
deploy_job:
  stage: deploy
  script:
    - echo '布置阶段'
  tags:
    - ba-runner # 装置 gitlab-runner 时加的 tag

踩坑记载

问题1:react 项目履行gitlab流水线打包时报错:Treating warnings as errors because process.env.CI = true.

Gitlab CICD自动化打包部署实践总结

处理: 在npm run build指令前加上 CI=false; react项目build.js中,process.env.CI是string类型,会导致判别条件一直为true。

Gitlab CICD自动化打包部署实践总结

问题2:装置依赖时,报权限EACCESS错误

Gitlab CICD自动化打包部署实践总结
在npm install中,增加–unsafe-perm=true –allow-root

npm install --unsafe-perm=true --allow-root

问题3: 让同一个stage下的job并行履行,提高布置效率

打开/etc/gitlab-runner/config.toml,修正concurrent的值。其默许值为1,job之间是串行的。

问题4: 敞开了缓存node_modules,但依然重新下载依赖。

在cache下加上untracked: true,untracked: true表明缓存被git疏忽的文件。

cache:
    untracked: true
    key:
      files:
        - package.json
    paths:
      - /node_modules/

问题5:流水线报错fatal: git fetch-pack: expected shallow list fatal: The remote end hung up unexpectedly

Gitlab CICD自动化打包部署实践总结
体系自带的git版别是1.8,需求升级git版别www.baiyongj.com/news/493.ht…

问题6:deploy步骤的权限问题

cicd流水线中履行一些指令,而这些指令或许触及的文件等并不是全部在 /home/gitlab-runner/目录下的,此刻一般会提示没有权限履行等。有两种处理方法:

  1. 修正Gitlab-Runner的默许用户(gitlab-runner) 为root
  • 经过该指令sudo gitlab-runner uninstall能够卸载掉gitlab-runner默许用户。
  • 重新装置gitlab-runner并将用户设置为root gitlab-runner install –working-directory /home/gitlab-runner –user root (这儿如果呈现错误,不能重新装置,或许是/home/gitlab-runner目录不存在,需求先树立gitlab-runner目录)装置并设置–user(例如我想设置为root)
  • 启动、重启和中止
gitlab-runner start
gitlab-runner restart
gitlab-runner stop
  • 经过ps aux | grep gitlab-runner指令检查gitlab-runner进程。再次履行会发现–user的用户名已经更换成root了
  1. 编辑文件,/etc/sudoers 文件,然后在如下 root 的下一行增加如下一行
gitlab-runner ALL=(ALL) NOPASSWD:ALL

问题7: 将gerrit库房中的代码,同步至gitlab库房完成主动化打包。

阐明: Gitlab用于主动化打包布置,Gerrit用于日常开发

Gitlab CICD自动化打包部署实践总结

本地库房相关配置:

  • 第一步:在本地增加gitlab长途库,长途库命名为upstream
git remote add upstream git@gitlab.xxxxxxxxx.git
  • 第二步:检查长途库,已经增加成功。(origin默许为gerrit长途库)
git remote -v

Gitlab CICD自动化打包部署实践总结

  • 第三步:将origin库代码同步至upstream库
  1. 将origin长途分支(release_V4.7.4)同步至本地
git pull origin release_V4.7.4

2.将release_V4.7.4分支代码推送至upstream库

git push --set-upstream upstream release_V4.7.4

3.代码同步后,会主动触发gitlab cicd。

参考文献

docs.gitlab.com/runner/inst… blog.csdn.net/wtl1992/art… www.baiyongj.com/news/493.ht… blog.csdn.net/redrose2100… /post/689862… blog.csdn.net/joyce0323/a… blog.csdn.net/themagickey… www.cnblogs.com/hahaha11112…