博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jenkins in Action :GitLab 部署 Maven 项目
阅读量:6832 次
发布时间:2019-06-26

本文共 2553 字,大约阅读时间需要 8 分钟。

随着项目进展接近尾声,服务端自动化部署也逐渐提上日程。按照初期想法,采用 Jenkins 实现自动化部署。

Jenkins 是开源 CI/CD 软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

顺便插播一句广告,欢迎参与 建设。

配置需求

  • 1c 2g 服务器 1 台
尝试 Vultr、Amazon aws 和阿里云 ECS 后,得出结论:
若 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
Jenkins 需要从 GitLab 向 Jenkins 服务器拉取代码。
  • jdk1.8
Jenkins 需要运行在 Java 8 环境下
  • maven
该项目需要使用 Maven 打包

Jenkins 插件

  • Maven Integration
Jenkins 需要创建一个 Maven Item
  • Publish Over SSH
在 mvn 打包后需要部署到目标服务器上
  • GitLab Plugin
需要从 GitLab 拉取项目
  • GitLab Hook Plugin
配置 GitLab 触发器

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,正确填写密码,测试并保存。

项目配置

  • 新建项目
选择
Maven Project
Source Code Management 选择
Git,填入项目地址,账户信息以及目标分支。
  • 配置触发器。
Build Triggers 中选择
Build when a change is pushed to GitLab,记下后面
GitLab webhook URL,根据需求配置
Advanced 中信息。
  • 配置构建后动作。
Post-build Actions 中选择已配置好的服务器,根据实际情况填写
Transfers 中信息。

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.shecho "Execute shell Finish"BUILD_ID=dontKillMe /root/project/startup.sh
  • GitLab 配置
GitLab 项目中 Settings->Integrations,URL 填写上文记录的
GitLab webhook URL,根据需求选择触发器,点击
Add webhook
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 bashport=8848#根据端口号查询对应的pidpid=$(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 bashcp /root/workhelper-0.0.1-SNAPSHOT.jar /root/project/workhelper-0.0.1-SNAPSHOT.jar

startup.sh

#!/usr/bin/env bashnohup java -jar workhelper-0.0.1-SNAPSHOT.jar >log.log 2>&1 &

转载地址:http://esnkl.baihongyu.com/

你可能感兴趣的文章
程序员面试题100题第05题——查找最小的K个元素
查看>>
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序×××之 --- 操作权限...
查看>>
linux工作进程状态显示---------top命令
查看>>
RHEL7下 nginx 的详细配置
查看>>
LeetCode - Solved Algorithms
查看>>
SharePoint 2010 显示一个人是否在线
查看>>
第十篇 SpringBoot 2 x发送邮件
查看>>
从搞笑到高效,构建敏捷团队的基础原则
查看>>
python 基础语法学习笔记(2019年4月第二周学习笔记)
查看>>
springboot mybatis 项目框架源码 shiro 集成代码生成器 ehcache缓存
查看>>
《SpringBoot+Dubbo+Zookeeper整合搭建简单的分布式应用》
查看>>
LayoutInflater的作用
查看>>
QT 消息处理机制
查看>>
看过Jdk动态代理类长啥样吗?Jdk动态代理原理源码分析
查看>>
volatile
查看>>
JavaScript 二叉树算法排序 图文并茂 这篇就够了
查看>>
操作中按了home键后广播为什么接收不了问题
查看>>
C# 组合控件
查看>>
Jquery获取属性值
查看>>
JSON 对象和字符串
查看>>