Gitlab_CI/CD详细过程
Posted louisliao_1981
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gitlab_CI/CD详细过程相关的知识,希望对你有一定的参考价值。
一、GitLabRunner服务器安装Docker和GitLabRunner环境
(一)、增加GitlabRunner用户以及Docker用户组
- 增加GitlabRunner用户
# 增加gitlab-runner用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
# 修改组目录权限
sudo chmod -R 766 /home/gitlab-runner
# 使用setfacl设置权限(可选)
sudo setfacl -m d:user:gitlab-runner:rwx
sudo setfacl -m group:other:rww
- 增加Docker用户组,并将gitlab-runner用户加入Docker用户组(实现不用sudo 启动docker)
sudo groupadd docker
sudo usermod -aG docker gitlab-runner
(二)、安装Docker依赖环境
sudo apt-get install \\
ca-certificates \\
curl \\
gnupg \\
lsb-release
(三)、使用阿里源安装Docker
- 需要添加软件源的 GPG 密钥
$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 官方源
# $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- 修改sources.list 中添加 Docker 软件源
$ echo \\
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \\
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 官方源
# $ echo \\
# "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \\
# $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
- 开启Docker
sudo systemctl enable docker
sudo systemctl start docker
(四)、设置Docker镜像源并重启Docker
- vi /etc/docker/daemon.json 增加镜像地址
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"insecure-registries": ["192.168.1.213:8086"],
"live-restore": true
- 让配置生效并重启docker
systemctl daemon-reload
systemctl restart docker
(五)、安装GitLabRunner服务
- 下载GitLabRunner
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64"
- 修改执行文件权限
sudo chmod +x /usr/local/bin/gitlab-runner
- 安装和运行GitLabRunner服务
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
二、GitLabRunner服务器注册Runner
- 使用GitLabRunner的命令在本服务器注册一个Runner
# url 为Gitlab的地址,token为Gitlab中可在具体的一个项目中的设置>>CI/CD>Runner中提示的值
sudo gitlab-runner register --url http://192.168.1.26:9980 --registration-token cJMXGJWx7qx9AmpSc6ee
a. 项目中
a. 群组中的设置
具体的项目中注册的Runner默认会只对当前项目有效,如果要共享给其他项目,就需要进入GitLab界面编辑Runner,去掉“锁定当前项目”的勾选
2.选择执行器并配置相关信息
a. 运行了上面的 gitlab-runner register 命令后会提示选择使用那一种Runner执行器,这里我们选择Shell
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker
b. 然后会让输入执行器对应的Tag。这里的Tag的值是和.gitlab-ci.yml中的tags是对应的。也可以通过在GitLab的界面中修改Runner的Tag值。
三、配置免密登陆和Scp拷贝
配置GitLabRnner服务所在服务器与发布的目标服务器之间的免密登陆
(一)、生成公私钥
在GitLabRnner服务所在服务器通过以下命令切换到gitlab-runner用户,并进入/home/gitlab-runner目录,运行ssh-keygen命令生成公私钥
sudo su gitlab-runner
cd /home/gitlab-runner
ssh-keygen -t rsa -C "xxxx@163.com"
(二)、拷贝公钥到目标服务器
将上一步生成的公钥拷贝到目标服务器对应用户的主目录下的./ssh/authorized_keys文件中。有两种方式
第一种:自己在目标服务器通过vi 打开authorized_keys文件,把公钥拷贝到其中,并保存
第二种:通过下面的命令进行拷贝
ssh-copy-id -i ~/.ssh/id_rsa.pub userxxxxx@192.168.xx.xx
(三)、测试免密登陆和scp拷贝
通过以下命令测试免密登陆和scp免密拷贝,如果没有要求输入对应用户的密码,即为成功
ssh userxxxxx@192.168.xx.xx
scp -o StrictHostKeyChecking=no /home/gitlab-runner/xxxx/xxxx.jar userxxxxx@192.168.xx.xx
如果仍然需要输入密码,请尝试修改authorized_keys这个文件的权限为600,并重启sshd(sudo chmod ~/.ssh/authorized_keys 600 && /etc/init.d/sshd restart
)
四、定义流水线文件.gitlab-ci.yml
如
# stage步骤,一个流水线需要经过的步骤
stages:
- build
- deploy
#job's name 可以随意取
buildJar:
stage: build
only:
# 指定只对某个分支的代码触发
- dev
script:
# package 已包含 test 步骤,所以流程中不需要另外配置test job
- export curPath=$(pwd)
- docker run -i --rm -v $curPath:/usr/src/projectxxxx -w /usr/src/projectxxxx maven:3.3-jdk-8 mvn clean package
tags:
- maven_tag
artifacts:
#是job生成的中间产物,会以压缩包(.zip)的形式生成。它会自动上传到gitlab服务器
paths:
- target/admin.jar
deploy files:
stage: deploy
only:
- dev
script:
- scp -o StrictHostKeyChecking=no userxxxxx@192.168.xx.xx:/home/userxxxxx/target/admin.jar
tags:
- maven_tag
其他示例
stages:
- build jar
- build and run image
#job's name 可以随意取
buildJar:
stage: build jar
variables:
# 默认是clone,改为fetch加快拉取速度(若本地无则会自动clone)
GIT_STRATEGY: fetch
only:
- dev
script:
- >
docker run -d --rm --name justforpackage-$CI_COMMIT_REF_NAME
-v "$(pwd)":/build/inkscreen
-v /inkscreen/maven/m2:/root/.m2
-w /build/inkscreen
maven:3-jdk-8 mvn clean package
- sleep 60
tags:
- inkscreen_hostrunner
artifacts:
paths:
- louwen-admin/target/louwen-admin.jar
expire_in: 3600 seconds
testDeploy:
stage: build and run image
only:
- dev
variables:
# 不拉取代码
GIT_STRATEGY: none
IMAGE_NAME: louwen/inkscreen-api:$CI_COMMIT_REF_NAME
PORT: 38082
before_script:
# 移除旧容器和镜像。这里为什么要写成一行,下面有讲
- if [ docker ps | grep inkscreen-$CI_COMMIT_REF_NAME ]; then docker stop inkscreen-$CI_COMMIT_REF_NAME; docker rm inkscreen-$CI_COMMIT_REF_NAME; docker rmi $IMAGE_NAME; fi
script:
- docker build --build-arg JAR_PATH=louwen-admin/target/louwen-admin.jar -t $IMAGE_NAME .
- >
docker run -d --name inkscreen-$CI_COMMIT_REF_NAME
-p $PORT:$PORT
--network my_bridge --env spring.redis.host=myredis
-v /inkscreen/inkscreen-api/logs/:/logs/
-v /inkscreen/inkscreen-api/louwen-admin/src/main/resources/:/configs/
$IMAGE_NAME
tags:
- inkscreen_hostrunner
.gitlab-ci.yml配置参数
关键词 描述
script 必选参数,指定runner运行的脚本(如 npm run build)
image 需要在docker中使用到的环境镜像(如 node:8.11.2)
services 需要的service镜像
before_script 作业执行前需要执行的命令
after_script 作业执行后需要执行的命令
stages 定义流水线所有的阶段
stage 定义作业所处流水线的阶段(默认test阶段)
only 限制作业在什么时候创建运行(比如是某个分支、某个tag等)
except 限制作业在什么时候不创建运行
tags 作用使用的Runner运行器的标签列表
allow_failure 允许作业失败,失败的作业不影响提交的状态
when 指定什么时候运行作业
environment 部署的环境
cache 指定需要在job之间缓存的文件或目录
artifacts 归档文件列表,指定成功后应附加到job的文件和目录的列表
dependencies 当前作业依赖的其他作业,你可以使用依赖作业的归档文件
coverage 作业的代码覆盖率
retry 作业失败时,可以自动尝试的次数
parallel 指定并行运行的作业实例
trigger 定义下游流水线的触发器
include 作业加载其他YAML文件
extends 控制实体从哪里继承
variables 定义环境变量
参考文章
官方中文文档
GitLab-CI/CD入门实操
GitLabCI的流水线实践
当谈到 GitLab CI 的时候,我们该聊些什么(上篇)
当谈到 GitLab CI 的时候,我们都该聊些什么(下篇)
Docker安装Gitlab和Gitlab-Runner并实现项目的CICD
Gialab YMAL 原文地址
Gitlab CI yaml官方配置文件翻译
gitlab-ci配置详解(一)
gitlab-ci配置详解(二)
Docker中国区官方镜像
https://registry.docker-cn.com
网易
http://hub-mirror.c.163.com
ustc
https://docker.mirrors.ustc.edu.cn
中国科技大学
https://docker.mirrors.ustc.edu.cn
https://iccdq93l.mirror.aliyuncs.com
以上是关于Gitlab_CI/CD详细过程的主要内容,如果未能解决你的问题,请参考以下文章
Mybaits 源码解析 ----- Select 语句的执行过程分析(下篇)(Mapper方法是如何调用到XML中的SQL的?)全网最详细,没有之一