概念
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
- 依据服务器体系版别,下载对应的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"
- 给 gitlab-runner 分配履行权限
sudo chmod +x /usr/local/bin/gitlab-runner
- 创立gitlab ci用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
- 装置和运转gitlab-runner
sudo gitlab-runner install --user=root --working-directory=/home/gitlab-runner
sudo gitlab-runner start
- –working-directory:指定gitlab-runner运转的工作目录,会在该目录下装置依赖、打包代码、存储缓存。
- –user:指定gitlab-runner运转的用户。
-
注册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-ci.yml
了解gitlab-ci.yml
gitlab-ci.yml 指定的使命内容总体构成1个pipeline、1个pipeline包括不同的stage履行阶段、每个stage包括不同的job使命。如下图所示:
编写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.
处理: 在npm run build指令前加上 CI=false; react项目build.js中,process.env.CI是string类型,会导致判别条件一直为true。
问题2:装置依赖时,报权限EACCESS错误
在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
体系自带的git版别是1.8,需求升级git版别www.baiyongj.com/news/493.ht…
问题6:deploy步骤的权限问题
cicd流水线中履行一些指令,而这些指令或许触及的文件等并不是全部在 /home/gitlab-runner/目录下的,此刻一般会提示没有权限履行等。有两种处理方法:
- 修正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了
- 编辑文件,/etc/sudoers 文件,然后在如下 root 的下一行增加如下一行
gitlab-runner ALL=(ALL) NOPASSWD:ALL
问题7: 将gerrit库房中的代码,同步至gitlab库房完成主动化打包。
阐明: Gitlab用于主动化打包布置,Gerrit用于日常开发
本地库房相关配置:
- 第一步:在本地增加gitlab长途库,长途库命名为upstream
git remote add upstream git@gitlab.xxxxxxxxx.git
- 第二步:检查长途库,已经增加成功。(origin默许为gerrit长途库)
git remote -v
- 第三步:将origin库代码同步至upstream库
- 将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…