持续集成 Gitlab-CI Maven部署至服务器
Posted 宣之于口
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了持续集成 Gitlab-CI Maven部署至服务器相关的知识,希望对你有一定的参考价值。
持续集成 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/
以上是关于持续集成 Gitlab-CI Maven部署至服务器的主要内容,如果未能解决你的问题,请参考以下文章