Jenkins in Action :GitLab 部署 Maven 项目
随着项目进展接近尾声,服务端自动化部署也逐渐提上日程。按照初期想法,采用 Jenkins 实现自动化部署。
Jenkins 是开源 CI/CD 软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。顺便插播一句广告,欢迎参与 Jenkins 中文本地化建设。
配置需求
- 1c 2g 服务器 1 台
若 Git Provider 为 GitHub,由于网络原因,应选用 Vultr 等 VPS 或 aws 等国外服务器。
但价格相对较国内云提供商较贵,若使用 1c 1g 服务器在构建中服务器容易崩溃。
Gitee 是国内连接速度最快的 Git Provider,但 Jenkins 对于 Gitee 的插件支持少。
所以采用 GitLab + 阿里云 Ecs 解决方案。
在明确需求之后,则需要参考官方文档着手部署 Jenkins 服务器。
Jenkins 会在 Build 完成之后 kill 掉脚本中开启的进程,所以建议使用 nohup java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war &
运行 Jenkins
服务器准备
- git
- jdk1.8
- maven
Jenkins 插件
- Maven Integration
- Publish Over SSH
- GitLab Plugin
- GitLab Hook Plugin
Jenkins 配置
配置好插件后,需要对 Jenkins 进行一定的配置。
Publish Over SSH 配置
Manage Jenkins->Configure System 找到 Publish Over SSH 。在 SSH Servers 中 Add 一个 SSH Server,正确填写项目部署服务器信息。
点击 Advanced,勾选 Use password authentication, or use a different key,正确填写密码,测试并保存。
项目配置
- 新建项目
- 配置触发器。
- 配置构建后动作。
e.g.
选项名称 | 填写参数 | 说明 |
---|---|---|
Source files | **/workhelper*.jar | Jenkins 会找到目录下符合该正则表达式的文件 |
Remove prefix | target/ | 通常 Maven 打包后文件都会在 target 目录下 |
Remote directory | 空 | 该目录相对于 Publish Over SSH 中配置的 Remote Directory |
Exec command | 见下文代码 | 部署后命令,是项目传输后运行的脚本 |
#!/bin/bash #Exec command 中的代码段 cd /root/project/ ./stop.sh ./replace.sh echo "Execute shell Finish" BUILD_ID=dontKillMe /root/project/startup.sh
- GitLab 配置
Jenkins 中 Manage Jenkins->Configure System 找到 GitLab,取消 Enable authentication for '/project' end-point
Jenkinsfile 样例
Jenkins 需要找到项目中的 Jenkinsfile 才能按照需求工作,Jenkinsfile 位于项目根目录下。
node { checkout scm echo "current branch: $BRANCH_NAME" if (BRANCH_NAME.startsWith("release")) { sh "mvn clean install" } }
这里 Jenkinsfile 使用 Groovy 语法。
脚本样例
在项目通过 Publish Over SSH 传输到服务器上之后,需要一定的操作才能正确部署。
stop.sh
#!/usr/bin/env bash port=8848 #根据端口号查询对应的pid pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }'); #杀掉对应的进程,如果pid不存在,则不执行 if [ -n "$pid" ]; then kill -9 $pid; fi
replace.sh
#!/usr/bin/env bash cp /root/workhelper-0.0.1-SNAPSHOT.jar /root/project/workhelper-0.0.1-SNAPSHOT.jar
startup.sh
#!/usr/bin/env bash nohup java -jar workhelper-0.0.1-SNAPSHOT.jar >log.log 2>&1 &
相关推荐
synshitou 2020-10-21
Topbeyond 2020-08-21
LiHansiyuan 2020-06-14
花落兰亭 2020-06-09
cxin 2020-11-06
happyfreeangel 2020-07-27
白开水 2020-07-19
无风的雨 2020-07-08
贤时间 2020-07-06
wishli 2020-06-28
小信 2020-06-21
leehbhs 2020-06-20
happyfreeangel 2020-06-18
83284950 2020-06-17
冯冯领队 2020-06-16
就是那个胖子 2020-06-14
83284950 2020-06-14
fcds00 2020-06-11