gitlab-CI实现持续集成自动发布
背景:
公司为了版本统一方便管理,舍弃jenkins,拥抱Gitlab-Ci,开始踩坑。
区别:
个人感觉,Jenkins图形化交互页面友好,Gitlab-Ci更适合敏捷开发。
一:简介
1、GitLab-CI
GitLab-CI就是一套配合GitLab使用的持续集成系统(当然,还有其它的持续集成系统,同样可以配合GitLab使用,比如Jenkins)。而且GitLab8.0以后的版本是默认集成了GitLab-CI并且默认启用的。
2、GitLab-Runner
GitLab-Runner是配合GitLab-CI进行使用的。一般地,GitLab里面的每一个工程都会定义一个属于这个工程的软件集成脚本,用来自动化地完成一些软件集成工作。当这个工程的仓库代码发生变动时,比如有人push了代码,GitLab就会将这个变动通知GitLab-CI。这时GitLab-CI会找出与这个工程相关联的Runner,并通知这些Runner把代码更新到本地并执行预定义好的执行脚本。
二:GitLab-Runner的安装
1:采用docker方式安装
docker run -dit \
--name gitlab-runner \
--restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
2:执行注册Runner
docker exec -it gitlab-runner gitlab-runner register
三:配置Runner,与GItLab-cI关联起来
1:进入你的gitlab ——> settings —— > CI/CD ——> Runners
这里主要是记住第4 和 第5 的值
2:注册Runner
输入步骤1中,4的值。
3:输入token
输入步骤1中,5的值。
4:输入描述
暂时随便输入,可以gitlab-ci中修改
5:输入tag
注意:如果只在加表签的build中运行,此时输入tag必须与ci.yml脚本中tag对应。
6:是否在未加标签的build中运行。
7:Runner-execute(重要)
运行平台,这里选择docker.
8:默认镜像
9:完成
10:完成之后可以在的gitlab ——> settings —— > CI/CD ——> Runners查看到刚刚关联的Runner
四:编写.gitlab-ci.yml 文件
image: xxx/maven-pk:1.1.0
before_script:
# Run ssh-agent (inside the build environment)
- eval $(ssh-agent -s)
# Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
- ssh-add <(echo "$CI_SSH_KEY")
- mkdir -p /root/.ssh
- '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_KEY" >> /root/.ssh/known_hosts'
- echo "$CI_SSH_KEY" > /root/.ssh/id_rsa
- chmod 600 /root/.ssh/id_rsa && chmod 700 /root/.ssh
# 缓存服务, 如果有文件需要多个stages共用,例如jar/war包
cache:
paths:
- target/
# 本次构建的阶段:build package deploy
stages:
- package
- deploy
# 打包
package:
stage: package
tags:
- test
script:
- source /etc/profile
- echo "=============== 开始打包任务 ==============="
- mvn package -Dmaven.test.skip=true
# 部署
deploy:
stage: deploy
tags:
- test
script:
- echo "=============== 开始部署任务 ==============="
# 测试,是否能够通过 ssh 连通远程服务器
- ssh xxx@xxx "echo hhh"
- scp -r /builds/* xxx@xxx:/mnt/
push代码后就可以在CI/CD ——> pipelines 中即可看到效果.
注意点:
- 如果只在加表签的build中运行,此时输入tag必须与ci.yml脚本中tag对应。
- ssh-agent管理密钥,无需输入密码访问远程服务器。
2.1:ssh-keygen -t rsa --生成密钥对
2.2:ssh-copy-id -i .ssh/id_rsa.pub 用户名字@192.168.x.xxx --用ssh-copy-id将公钥复制到远程机器中
2.3:cat id_dsa --获取私钥,配置CI环境变量;在目标服务器 ssh keyscan ip 获取knowshost信息(模拟第一次登陆),配置CI环境变量;
- 优化镜像本地仓库存在则优先使用,通过目录挂更改镜像配置
pull_policy="if-not-present"
挂载maven仓库
volumes = ["/cache","/home/jiaokc/software/m2/.m2/repository:/root/.m2/repository:rw"]```
参考地址:(https://blog.csdn.net/junmoxi/article/details/82762413)
[参考地址]https://www.jianshu.com/p/2b43151fb92e