GitLab + Rainbond 打造Devops流程
GitLab + Rainbond 打造Devops流程
流程
- 预设项目有两个分支,dev和master
- dev分支对应dev环境
- master分支对应test环境和prod环境
- 开发在dev中编写代码,提交git时触发dev环境构建
- 开发在dev自测完成,将dev分支代码合并master分支并提交git
- master提交操作触发test环境构建,通知测试人员进行测试,并附加构建地址(gitlab CICD)
- 测试不通过则开发继续开发,重复上述流程
- 测试通过则登录gitlab CICD手动点击,执行“部署”步骤
目录
- 一、创建rainbond三个环境项目,并开启构建源的自定义API
- 二、为gitlab项目设置runner
- 三、编写gitlab cicd配置
- 附1 gitlab-runner环境
一、开启rainbond项目构建源的自定义API
- rainbond中有三个项目环境
- dev 开发环境对应dev分支
- test 测试环境对应master分支
- prod 正式环境对应master分支
开启WebHook步骤
- 打开rainbond
- 进入项目
- 点击“构建源”页签
- “自动构建设置”
- 点击“自定义API”页签
- 点击“打开自动构建”
- 复制“API”和“秘钥”
二、为gitlab项目设置runner
先根据 附1 中的步骤配置好,gitlab-runner的docker容器
- 进入gitlab项目
- Settings > CD/CD > Runners "Expand"
- 可以看到左侧“Specific runners”中就有设置runner的配置信息
- 页面左下角有“Set up a specific runner manually”(注册信息,URL及token)
- 进入docker的gitlab-runner容器
# 注册runner
$ docker exec -it gitlab-runner gitlab-runner register
# 输入项目页面上的URL,即git地址
Enter the GitLab instance URL (for example, https://gitlab.com/):
$ http://git.abc.com/
# 输入秘钥,项目设置页面上
Enter the registration token:
$ testtestestest-testest
# 输入描述,这里最好填写项目名称(所有runner的配置会房子同一个配置文件中,这个描述可以方便区分)
Enter a description for the runner:
$ rainbond_gitlab_python
# 输入标签(重要,CICD的配置中需要使用)
Enter tags for the runner (comma-separated):
$ Auto-Group
# 输入执行器类型,一般选shell
Enter an executor: custom, parallels, shell, ssh, docker, docker-ssh, virtualbox, docker+machine, docker-ssh+machine, kubernetes:
$ shell
# #####配置完成#####
# 查看刚刚的配置
$ docker exec -it gitlab-runner cat /etc/gitlab-runner/config.toml
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "rainbond_gitlab_python"
url = "http://git.abc.com/"
token = "testtestestest-testest"
executor = "shell"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
- 刷新gitlab页面后,即可看到runner中多增加了“Available specific runners”
- 下方是我们刚刚创建的runner
三、编写gitlab cicd配置
- 在项目的根目录中添加CICD配置文件,命名为:".gitlab-ci.yml"
- 配置如下
default:
tags:
- Auto-Group
variables:
# 项目名
PROJECT_NAME: "rainbond_gitlab_python"
FAILURE_MESSAGE: "[$PROJECT_NAME]单元测试/构建失败,请查看:$CI_PROJECT_URL/-/pipelines/$CI_PIPELINE_ID/failures"
# dev环境构建源秘钥及地址
DEV_API_KEY: ""
DEV_API_URL: ""
# test环境构建源秘钥及地址
TEST_API_KEY: ""
TEST_API_URL: ""
# prod环境构建源秘钥及地址
PROD_API_KEY: ""
PROD_API_URL: ""
# 失败时通知,所有分支
job-failure:
stage: test
when: on_failure
script:
- echo $FAILURE_MESSAGE
# ------------- dev分支配置 ------------- #
dev-build:
stage: build
only:
- dev # 只针对dev分支
script:
- pip3 install --no-cache-dir -r requirements.txt
- pytest
dev-deploy:
stage: deploy
only:
- dev
script:
- curl -X POST -H "Content-Type:application/json" -d '{"secret_key":"'$DEV_API_KEY'"}' "$DEV_API_URL"
after_script:
- echo "触发构建后,增加即时通讯工具的WebHook,通知相关开发人员进行自测"
# ------------- master分支配置 ------------- #
master-build:
stage: build
only:
- master
script:
- pip3 install --no-cache-dir -r requirements.txt
- pytest
master-unitest:
stage: deploy
only:
- master
script:
- curl -X POST -H "Content-Type:application/json" -d '{"secret_key":"'$TEST_API_KEY'"}' "$TEST_API_URL"
after_script:
- echo "触发构建后,增加即时通讯工具的WebHook,通知相关测试人员进行测试"
master-deploy:
stage: deploy
only:
- master
when: manual
script:
- curl -X POST -H "Content-Type:application/json" -d '{"secret_key":"'$PROD_API_KEY'"}' "$PROD_API_URL"
after_script:
- echo "触发构建后,增加即时通讯工具的WebHook,通知发布正式环境"
附1: gitlab-runner环境
- 由于gitlab-runner环境只需要部署一次,所以放在附录
- 首先要安装docker
安装步骤
- docker拉取gitlab-runner镜像
- 创建共享卷
- 运行容器
- 设置apline linux软件库镜像
- 安装curl、python、pip
- 设置环境变量(很重要)
- 查看gitlab-runner配置
1. docker拉取gitlab-runner镜像
该镜像以 alpine linux 为基础环境,因为使用 alpine linux 体积更小
alpine linux官方文档: https://www.alpinelinux.org/
$ docker pull gitlab/gitlab-runner:alpine
2. 创建共享卷
有了共享卷,容器可删除重建,配置数据在共享卷中
$ docker volume create gitlab-runner-config
3. 运行容器
容器命名为"gitlab-runner"
$ docker run -d --name gitlab-runner --restart always -v /var/run/docker.sock:/var/run/docker.sock -v gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner:alpine
4. 设置apline linux软件库镜像
设置aliyun镜像
# 查看容器id
$ docker ps
# 进入容器
$ docker exec -it <container-id> sh
# 设置镜像
$ sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
5. 安装curl、python、pip
主要使用python代码,根据需要选择自己的环境安装
$ apk add --no-cache curl
$ apk add --no-cache python3
$ apk add --no-cache py3-pip
alpine使用小技巧
# 搜索包,当安装报错找不到包时使用
$ apk search [包名]
# 如下:
$ apk search python3
6. 设置环境变量(很重要)
gitlab触发CICD时,加载依赖包需要需要添加PATH,否则会报错找不到程序
以python项目为例,使用pip安装的cli需要添加PATH:/home/gitlab-runner/.local/bin
gitlab的入口shell是在 /etc/profile.d/locale.sh ,所以需要在这个目录下增加PATH
$ vi /etc/profile.d/locale.sh
# 增加 export PATH=/home/gitlab-runner/.local/bin:$PATH
# 保存退出,使用cat查看内容,如下
$ cat /etc/profile.d/locale.sh
export CHARSET=UTF-8
export LANG=C.UTF-8
export LC_COLLATE=C
export PATH=/home/gitlab-runner/.local/bin:$PATH
7. 查看gitlab-runner配置
添加了runner之后才会改文件
$ cat /etc/gitlab-runner/config.toml