由于最近的挺多项目需要要堡垒机上进行部署,堡垒机的繁琐大家也是知道的。由于堡垒机无法直连,所以Jenkins的推送服务不能将打包后的Jar或前端的zip推送至服务器
所以我们转换思路,我们将打包后的jar/zip放到指定的目录,由nginx对外提供服务。然后在堡垒机部署程序进行下载和部署的操作。部署程序源码在Github进行开源
部署程序地址 https://github.com/SirYuxuan/jenkins-release-receive
接下来让我们一起来看看是怎么操作的
1. 我们部署程序在堡垒机上运行起来。并提供外网访问地址。
PS. 部署之前我们需要简单修改一下部署程序的代码,
https://github.com/SirYuxuan/jenkins-release-receive/blob/master/src/main/java/com/yuxuan66/jenkins/modules/release/service/ReceiveService.java
PS: Jenkins的流水线接口请求功能以来Http Request插件 请自行下载安装
https://plugins.jenkins.io/http_request/
2. 打开Jenkins新建流水线项目
请输入任意文件名完成创建。此选项在英文版下显示为Pipelines
3. 编辑我们的流水线代码
4. 具体流水线代码
import java.text.SimpleDateFormat
def time = ""
pipeline {
agent any
tools {
// 这里需要在Jenkins中进行配置。跟你日常使用Jenkins时的名字一致。
// 系统管理->全局工具管理->maven安装的名字
maven "maven3.8"
}
environment {
// Git仓库地址
GIT_REGISTRY = 'Git地址'
//分支
GIT_BRANCH = 'master'
// 如果仓库是私有的需要在凭证中添加凭证,然后把id写到这里
GITLAB_ACCESS_TOKEN_ID = 'YuxuanGit'
// 在堡垒机下远程发布服务的地址
REMOTE_EXECUTE_HOST = '堡垒机的部署程序访问地址'
// 在堡垒机下载保存的文件名,堡垒机的部署程序会将下载好的文件,保存成这个名字
SAVE_FILE_NAME="fileName"
// 在堡垒机保存的目录
SAVE_PATH = "/mnt/project/standardization/"
// 项目名称,通知或日志使用
PROJECT_NAME = "名称"
}
stages {
stage('Build') {
steps {
// 从Git拉取最新代码,如果你不知道这一行是干啥的 请不要乱动
git credentialsId: "${env.GITLAB_ACCESS_TOKEN_ID}", url: "${env.GIT_REGISTRY}", branch: "${env.GIT_BRANCH}"
// maven 打包,可根据自己的需求来修改打包命令
sh "mvn -Dmaven.test.failure.ignore=true clean package "
}
}
stage('Push File') {
// 将jar包拷贝到Dockerfile所在目录
steps {
script{
def dateFormat = new SimpleDateFormat("yyyyMMddHHmmss")
def date = new Date()
time = dateFormat.format(date)
}
// 将maven打包后的jar复制到nginx配置的目录,来外网访问
// 如果是多级目录需要在target前加上目录,例如 cp ${env.WORKSPACE}/wcs-application/target/*.jar /mnt/project/push/api/${time}.jar
// 后面的目录可以修改,文件名如果对于下面的推送数据 也可以进行修改
sh "cp ${env.WORKSPACE}/target/*.jar /mnt/project/push/api/${time}.jar"
}
}
stage('Notice Release') {
//请求堡垒机内的发布服务
steps {
//将body转换为json
script {
def toJson = {
input ->
groovy.json.JsonOutput.toJson(input)
}
// 推送至堡垒机接收程序的数据,可根据自己的需求定义,如果直接套用我的程序,请不要随意删除字段
def body = [
type:"api",
fileName:"${time}.jar",
saveName:"${SAVE_FILE_NAME}.jar",
savePath:"${SAVE_PATH}",
projectName:"${PROJECT_NAME}"
]
// 调用堡垒机服务,开始下载部署程序,此功能依赖Jenkins插件 HTTP Request https://plugins.jenkins.io/http_request/
sh "echo '通知接收服务开始发布项目'"
response = httpRequest acceptType: 'APPLICATION_JSON', consoleLogResponseBody: true, contentType: 'APPLICATION_JSON', httpMode: 'POST', requestBody: toJson(body), responseHandle: 'NONE', url: "${env.REMOTE_EXECUTE_HOST}"
sh "echo '结束调用目标服务器发布'"
}
}
}
}
}
5. 实现代码提交自动发布
如果你需要在代码提交的时候自动发布堡垒机,请参考以下配置(我觉得一般情况下是不需要的。代码毕竟要测试对吧 哈哈)
安装Jenkins插件 Generic Webhook Trigger
https://plugins.jenkins.io/generic-webhook-trigger/
打开刚才的流水线配置,我们按如下配置,然后保存。如果没有这个选项,那说明插件没有装好,或者需要刷新
最后我们打开我们的Git系统。(Gitee/Github/Gitlab/OneDev)等支持WebHook功能的Git服务
这里我使用最常用的Gitlab给大家演示
打开我们的一个项目
接下来让我们一起享受不用发版的美好时光吧。
感谢阅读!
评论区