版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/loy_184548/article/details/82113956
持续集成 Gitlab-CI
概念定义
原则
业界普遍认同的持续集成的原则包括:
- 需要版本控制软件保障团队成员提交的代码不会导致集成失败。常用的版本控制软件有 git、svn 等;
- 开发人员必须及时向版本控制库中提交代码,也必须经常性地从版本控制库中更新代码到本地;
- 需要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建可以被软件的修改来直接触发,也可以定时启动,如每半个小时构建一次;
- 必须保证构建的成功。如果构建失败,修复构建过程中的错误是优先级最高的工作。一旦修复,需要手动启动一次构建。
组成
- 一个自动构建过程,包括自动编译、分发、部署和测试等。
- 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。
- 一个持续集成服务器。
Gitlab
gitlab-ci作为gitlab提供的一个持续集成的套件,完美和gitlab进行集成。
1. 注册 Gitlab-runner
在 Gitlab 项目的 Setting–CI/CD-Runners settings 中我们可以对我们项目使用 Gitlab-runner 进行设置。
GitLab 中提供了两种 Runner 的类型,图 3 这个界面可以在 GitLab 项目设置页中找到的,一个是特定的 Specific Runner,另一个是共享的 Shared Runner 。特定的 Runner 只能供部分项目使用,而共享的 Runner 是所有GitLab 中的项目都可以使用的。而这两种类型的 Runner 的注册方式都是一样。
MAC下安装:
# Download
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
# Give it permissions
sudo chmod +x /usr/local/bin/gitlab-runner
注册 Gitlab Runner:
▶ sudo gitlab-runner register
Password:
Running in system-mode.
# 此处填写上面看到的url地址
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://git.hyperchain.cn/
# 此处填写上面看到的token
Please enter the gitlab-ci token for this runner:
8sm6x9BmmxyWVEY2BBzf
# 描述一下该runner
Please enter the gitlab-ci description for this runner:
[linouyadeMacBook-Pro.local]: maven
# 引导会让你输入tag,一个项目可能有多个runner,是根据tag来区别runner的,输入若干个就好了,比如web,hook,deploy
Please enter the gitlab-ci tags for this runner (comma separated):
maven
Registering runner... succeeded runner=8sm6x9Bm
# 填写runner执行时需要使用什么执行器,一般都填shell或者docker。
Please enter the executor: virtualbox, docker+machine, docker, shell, ssh, kubernetes, docker-ssh, parallels, docker-ssh+machine:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
启动:
cd ~
gitlab-runner install
gitlab-runner start
# 运行
sudo gitlab-runner run
这样就完成了Runner与CI之间的信息互注册。Runner知道了自己需要操作哪个项目,CI也知道了该runner的存在。刷新Runners settings就可以看到新注册的Runner了。
2. .gitlab-ci.yml 的 CI 配置文件
该配置文件置于根目录下,GitLab runner 会根据这个文件内容进行构建
简单的例子:
image: maven:latest
# 本次构建的阶段:build package
stages:
- build
- package
# 构建 Job
build:
stage: build
tags:
- maven
script:
- echo "=============== 开始编译构建任务 ==============="
- mvn compile
# 打包
package:
stage: package
tags:
- maven
script:
- echo "=============== 开始打包任务 ==============="
- mvn package -Dmaven.test.skip=true
我们可以在Pipelines看到执行如下:
打包完成,将war/jar包放在服务器上,进行构建:
首先需要安装sshpass - 用于非交互式执行ssh的工具 : brew install http://git.io/sshpass.rb
image: maven:latest
# 缓存服务, 如果有文件需要多个stages共用,例如jar/war包
cache:
paths:
- target/
# 本次构建的阶段:build package deploy
stages:
- build
- package
- deploy
# 构建 Job
build:
stage: build
tags:
- maven
script:
- echo "=============== 开始编译构建任务 ==============="
- mvn compile
# 打包
package:
stage: package
tags:
- maven
script:
- echo "=============== 开始打包任务 ==============="
- mvn package -Dmaven.test.skip=true
# 部署
deploy:
stage: deploy
tags:
- maven
script:
- echo "=============== 开始部署任务 ==============="
# 测试,是否能够通过 ssh 连通远程服务器
- sshpass -p {password} ssh -o StrictHostKeychecking=no {username}@{ip}
- echo "=============== 将 war 包部署到远程服务器上 ==============="
- sshpass -p {password} scp -o StrictHostKeychecking=no {war包路径} {username}@{ip}:/opt/tomcat-duro/{war包名}
- echo "=============== 开始执行 ==============="
- sshpass -p {password} ssh -o StrictHostKeychecking=no {username}@{ip} "cd /opt/tomcat-duro && {执行脚本命令}"
语法教程:https://docs.gitlab.com/ee/ci/yaml/