持续集成 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部署至服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何利用Gitlab-ci持续部署到远程机器?

Gitlab+Gitlab-CI+Docker实现持续集成(CI)与持续部署(CD)

gitlab-ci部署实现持续集成(centos7)

使用Gitlab实现自动化部署与持续集成

[后端]gitlab之gitlab-ci自动部署

Jenkins+Jdk+Git+Maven持续集成部署Weblogic实例项目