前言
??gitlab, 我相信大家一定不会陌生,它自带的ci/cd在持续集成,持续交付方面也有一定的能力。有些介绍 比如:gitlab和gitlab-runnber 部署过程咱们就不多说,相信很多文章都介绍的很清楚。
GitLab-Runner
- Runner是一个执行任务的进程
- Runner可以放在不同的用户、服务器,甚至本地机器上
GitLab-Runner 注册
??在安装gitlab-runner的机器上命令注册runner
gitlab-runner register
- 输入gitlab的服务URL,这个使用的是https://xxx.com/
- 输入gitlab-ci的Toekn 如图:2-2
- 关于集成服务中对于这个runner的描述
- 给这个gitlab-runner输入一个标记,这个tag非常重要,在后续的使用过程中需要使用这个tag来指定gitlab-runner
- 是否运行在没有tag的build上面。在配置gitlab-ci的时候,会有很多job,每个job可以通过tags属性来选择runner。这里为true表示如果job没有配置tags,也执行
- 是否锁定runner到当前项目
- 选择执行器,gitlab-runner实现了很多执行器,可用在不同场景中运行构建,我选择Shell模式
编写gitlab-ci.yml文件
配置简单说明:
关键字 | 必要 | 描述 |
---|
script | 是 | CI/CD 过程需要执行的shell脚本 | stage | 否 | 一个job流程,默认test | variables | 否 | 定义变量,GitLab上可配置 | only | 否 | 指定当前job适用的git refs(分支、Tag)列表 | except | 否 | 与only相反 | tags | 否 | 通过标签管理或匹配runner | allow_failure | 否 | 指定当前job是否容错,正常job失败会跳过后续job流程 | before_script | 否 | 在当前job执行前执行的shell脚本 | after_script | 否 | 在当前job执行后执行的shell脚本 | dependencies | 否 | 指定依赖的job列表,默认顺序执行 | when | 否 | 依赖的上一个job执行什么状态后执行当前job: on_success on_failure always manual 默认on_success |
前端 CICD
??下面涉及到相关服务IP或者涉密内容 用XXX ,这里简单说明一下,单纯的分了三个场景 正式环境 预发布 测试环境 。 这里就不举例子 vue项目打包成镜像了 k8s 部署vue项目 以前里面有重复的内容
- 在操作之前先登录docker
- 不同分支打不同的前端包,制作镜像 上传镜像
- 配置SSH免密登录,触发部署脚本
- 结束后,把之前打包的docker镜像清除,避免无限扩张
variables:
IMAGE_VERSION: v1.0.1
IMAGE_VERSION_TEST: v1.0.0
IMAGE_ADDRESS: xxx/k8s/web-sxzz
stages:
- build
- staging
- development
before_script:
- docker login -u xxx -p xxx xxx
after_script:
- docker rmi --force `docker images | grep web-sxzz | awk '{print $3}'`
build:
stage: build
tags:
- web-sxzz
only:
- master
cache:
paths:
- node_modules/
script:
- npm set registry https://registry.npm.taobao.org
- npm install --progress=false
- npm run build:prod
- docker build -t "$IMAGE_ADDRESS:$IMAGE_VERSION.prod" .
- docker push "$IMAGE_ADDRESS:$IMAGE_VERSION.prod"
staging:
stage: staging
tags:
- web-sxzz
only:
- stag
cache:
paths:
- node_modules/
script:
- npm set registry https://registry.npm.taobao.org
- npm install --progress=false
- npm run build:stage
- docker build -t "$IMAGE_ADDRESS:$IMAGE_VERSION_TEST.stag" .
- docker push "$IMAGE_ADDRESS:$IMAGE_VERSION_TEST.stag"
development:
stage: development
tags:
- web-sxzz
only:
- dev
cache:
paths:
- node_modules/
script:
- npm set registry https://registry.npm.taobao.org
- npm install --progress=false
- npm run build:test
- docker build -t "$IMAGE_ADDRESS:$IMAGE_VERSION_TEST.test" .
- docker push "$IMAGE_ADDRESS:$IMAGE_VERSION_TEST.test"
# 需要配置ssh免密登录
- ssh -t -t root@xxx -p 22 "/root/myDeployment/wfw-test/web-lxc/web-sxzz/deploy.sh"
配置SSH 免密登录
??gitlab-runner安装在: A服务器 ??准备部署的服务器是: B服务器
1. 首先在A服务器检查 /home/gitlab-runner/.ssh 下面是否有 id_rsa.pub 文件
2. 如果没有的话 在A服务器上切换成 gitlab-runner 用户
3. 使用ssh-keygen -t rsa生成ssh的公钥和私钥 // 回车之后3次回车即可
4. /home/gitlab-runner/.ssh 下会生成 id_rsa.pub 和 id_rsa 文件
5. 将id_rsa.pub 上传到 B服务器
6. cat /id_rsa.pub >>/root/.ssh/authorized_keys
7. 重启 ssh服务 // centos7: systemctl restart sshd
8. 在A服务器上测试 ssh root@B服务地址
总结
?? 简单的ci/cd,欢迎批评指正~
|