侧边栏壁纸
  • 累计撰写 57 篇文章
  • 累计创建 98 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

Jenkins流水线实现自动发布Api/Web程序到堡垒机

Sir丶雨轩
2022-10-20 / 0 评论 / 0 点赞 / 1231 阅读 / 6647 字

7b7388f8420a673c9e18af0c70a5f2ec

由于最近的挺多项目需要要堡垒机上进行部署,堡垒机的繁琐大家也是知道的。由于堡垒机无法直连,所以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
QQ截图20221020205418

PS: Jenkins的流水线接口请求功能以来Http Request插件 请自行下载安装

https://plugins.jenkins.io/http_request/

2. 打开Jenkins新建流水线项目

image-1666270533997
image-1666270559747
请输入任意文件名完成创建。此选项在英文版下显示为Pipelines

3. 编辑我们的流水线代码

image-1666270662363

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/

打开刚才的流水线配置,我们按如下配置,然后保存。如果没有这个选项,那说明插件没有装好,或者需要刷新
image-1666271377923

最后我们打开我们的Git系统。(Gitee/Github/Gitlab/OneDev)等支持WebHook功能的Git服务
这里我使用最常用的Gitlab给大家演示

打开我们的一个项目
image-1666271493523
image-1666271706213

接下来让我们一起享受不用发版的美好时光吧。
感谢阅读!

0

评论区