Jenkins部署Java(maven)项目&Vue前端项目部署流水线pipeline模版-可直接使用Jenkinsfile

流水线已经编写完毕,修改流水线中参数,即可使用
tips:注意Jenkins中是否给机器配置了路径前缀,本文均没有配置, 使用绝对路径

前端VUE部署模版

#!groovy
pipeline{
    agent any
        environment {
    //        环境标识 无其他用处,作为标识
            ENV_NAME = "dev"
			
    //        服务器标识  Jenkins设置中服务器标识
            SERVER_CONFIG_NAME = "DevComputer"
			
    //        远程项目地址  Vue项目远程地址
            SERVER_REMOTE_PROJECT_NAME = "/usr/project/vueProject/"
			
    //   	GIT远程分支名称 
            GIT_BRANCH_NAME = "dev"
			
	//      GIT 远程仓库地址  
			GIT_SERVER_ADDRESS="http://vueProject.git"
			
	//      package.json的相对位置,若在根目录,则为 ./, 若在根目录下ui目录下,则值为ui
			BUILD_ADDRESS="./"
			
	//      具体打包命令 也可用npm install && npm build:dev
	        BUILD_COMMAND="yarn&&yarn build:dev"	
			
	//		打包完后dist最终存放位置,如果为根目录,则值为"dist/**", 如果为ui目录下,则值为"ui/dist/**"
			OUTPUT_ADDRESS="dist/**"
			
	// 		是否需要去除dist目录前缀,想要最终目录只有一层dist目录, 如果在根目录下,则值为"/",如果dist在ui目录下,则值为"ui/"
			REMOVE_PREFIX="/"
			

        }
    stages{
        stage('build'){
            steps{
            echo '---------------------------------拉取代码开始---------------------------------------'
git branch: "${env.GIT_BRANCH_NAME}", credentialsId: '输入Jenkins中配置的git账号ID', url: "${env.GIT_SERVER_ADDRESS}"
            echo '---------------------------------拉取代码结束---------------------------------------'


            echo '---------------------------------代码构建开始---------------------------------------'
sh """
cd ${env.BUILD_ADDRESS}
${env.BUILD_COMMAND}
"""
            echo '---------------------------------代码构建结束---------------------------------------'

            }
        }

        stage('deploy'){
            steps{
            echo '---------------------------------代码部署开始---------------------------------------'
sshPublisher(publishers: [sshPublisherDesc(configName: "${env.SERVER_CONFIG_NAME}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 1200000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "${env.SERVER_REMOTE_PROJECT_NAME}", remoteDirectorySDF: false, removePrefix: "${env.REMOVE_PREFIX}", sourceFiles: "${env.OUTPUT_ADDRESS}")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
            echo '---------------------------------代码部署结束---------------------------------------'
            }
        }
    }
    post{
        always{
            echo 'over'
        }
        cleanup{
            echo '----------即将清理工作空间```````'
            cleanWs()
            echo '----------清理工作空间完成```````'
        }
    }
}

后端Java部署模版

pipeline {
    agent any
    environment {
	//        环境标识
			ENV_NAME = "dev"
	//       Jenkins中 服务器标识
			SERVER_CONFIG_NAME = "DevComputer"
	//        远程Java项目地址
			SERVER_REMOTE_PROJECT_NAME = "/usr/jar/new-project"
	//        GIT远程分支名称
			GIT_BRANCH_NAME = "dev"
				
	//      GIT 远程仓库地址
			GIT_SERVER_ADDRESS="http://javaProject.git"

			
	//      pom.xml的相对位置,若在根目录,则为 ./, 若在根目录下xxx目录下,则值为xxx
			BUILD_ADDRESS="./"
			
	//      具体打包命令 多进程并发跳过测试  快速打包
	        BUILD_COMMAND="mvn clean package -D maven.test.skip=true -P test -T 1C"	
			
	//		jar最终存放位置,根据需要填"
			OUTPUT_ADDRESS="target/*.jar"

	
			
	// 	    源代码中sh目录位置
			SHELL_ADDRESS="script/bin/deploy.sh"
	//      shell参数,如果有则填入,无则空
			SHELL_CUSTOM_COMMAND=""
			
    }
    stages {
        stage('build') {
            steps {
            echo '---------------------------------拉取代码开始---------------------------------------'
            git branch: "${env.GIT_BRANCH_NAME}", credentialsId: 'Jenkins git账号ID', url: "${env.GIT_SERVER_ADDRESS}"
            echo '---------------------------------拉取代码结束---------------------------------------'

            echo '---------------------------------代码打包开始---------------------------------------'
            sh """
			cd ${env.BUILD_ADDRESS}
			${env.BUILD_COMMAND} """
            echo '---------------------------------拉取打包结束---------------------------------------'
            }
       }

        stage('deploy') {
            steps {
            echo '---------------------------------代码发布启动开始---------------------------------------'
    sshPublisher(publishers: [sshPublisherDesc(configName: "${env.SERVER_CONFIG_NAME}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: """cd ${env.SERVER_REMOTE_PROJECT_NAME}	
""", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "${env.SERVER_REMOTE_PROJECT_NAME}", remoteDirectorySDF: false, removePrefix: '', sourceFiles:"${env.OUTPUT_ADDRESS}")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])


            echo '---------------------------------代码发布并启动结束---------------------------------------'
            sshPublisher(publishers: [sshPublisherDesc(configName: "${env.SERVER_CONFIG_NAME}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: """cd ${env.SERVER_REMOTE_PROJECT_NAME}
BUILD_ID=dontKillMe

sh ${env.SERVER_REMOTE_PROJECT_NAME}/${env.SHELL_ADDRESS} ${env.SHELL_CUSTOM_COMMAND}
""", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "${env.SERVER_REMOTE_PROJECT_NAME}", remoteDirectorySDF: false, removePrefix: '', sourceFiles: "${env.SHELL_ADDRESS}")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
   
            }
        }

    }
    post{
        always{
            echo 'over'
        }
        cleanup{
            echo '----------即将清理工作空间```````'
            cleanWs()
            echo '----------清理工作空间完成```````'
        }
    }
}

后端Jar包重启脚本

#!/bin/bash

# 系统时间
DATE=$(date +'%Y-%m-%d-%H:%M:%S')
#启动时间
START_TIME=$(date +%s)
#当前shell目录
CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"


export JAVA_HOME PATH CLASSPAT


# 输入要启动jar包的绝对路径,如果要重启多个,则写多个
ARRAY_JAR_FILE=(
  "/usr/jar/Javaname-cloud.jar"
)
# 停止某个jar包,
# 参数为 jar名称
function stopJar() {
  local JAR_FILE=$1

  # 使用 pgrep 更精确地匹配获取 PID
  PID=$(pgrep -f "$JAR_FILE.jar")

  if [ -z "$PID" ]; then
    echo "$DATE - 未找到 $JAR_FILE.jar 的进程"
    return 0
  fi

  # 最大尝试次数
  MAX_TRIES=30
  TRIES=0

  while ((TRIES < MAX_TRIES)); do
    kill -9 "$PID"
    # 显示进度或在检查之前暂停一段时间
    sleep 1

    if ps -p "$PID" > /dev/null; then
      ((TRIES++))
      echo "$DATE - 尝试 $TRIES: 进程 $PID ($JAR_FILE) 仍在运行,正在尝试再次终止..."
    else
      echo "$DATE - 进程 $PID ($JAR_FILE) 已成功终止。"
      return 0
    fi
  done

  echo "$DATE - 已达到最大尝试次数 ($MAX_TRIES)。进程 $PID ($JAR_FILE) 仍在运行。错误!!!"
  return 0
}


# 启动Jar包的脚本
# 入参为  jar目录, jar包名称


function startJar() {
  local JAR_PATH=$1
  local JAR_FILE=$2
  cd $1
  # 启动 jar 包
  nohup java -Xms256m -Xmx1024m -jar "$JAR_FILE.jar" >start.log 2>&1 &
  PID=$!

  echo "正在启动 $JAR_FILE.jar ..."
  sleep 1
  echo "进程号为 $PID"
  sleep 1
  echo "$JAR_FILE.jar 启动成功!"
}


# 依次停止全部
for JAR in ${ARRAY_JAR_FILE[@]}; do
  JAR_DIR=$(dirname $JAR)
  JAR_MAIN_NAME=$(basename $JAR .jar)
  echo "即将停止$JAR_MAIN_NAME程序包"
  stopJar $JAR_MAIN_NAME
  echo "程序包$JAR_MAIN_NAME进程结束"
done



# 依次启动全部
for JAR in ${ARRAY_JAR_FILE[@]}; do
  JAR_DIR=$(dirname $JAR)
  JAR_MAIN_NAME=$(basename $JAR .jar)
  echo "即将重新启动$JAR_MAIN_NAME程序包"
  startJar $JAR_DIR $JAR_MAIN_NAME

done


END_TIME=$(date +%s)
EXECUTING_TIME=$(expr $END_TIME - $START_TIME)

echo "本次重启总共用时为$EXECUTING_TIME秒"
  • 38
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您需要完成以下步骤来创建一个Jenkins + Vue的操作数据看板项目: 1. 创建一个Maven项目 ``` mvn archetype:generate -DgroupId=com.example -DartifactId=jenkins-dashboard -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ``` 2. 添加以下依赖项到pom.xml文件中: ``` <dependencies> <dependency> <groupId>com.offbytwo.jenkins</groupId> <artifactId>jenkins-client</artifactId> <version>0.3.10</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> ``` 3. 创建一个名为“JenkinsClientService”的Java类,并添加以下代码: ``` import com.offbytwo.jenkins.JenkinsServer; import com.offbytwo.jenkins.model.Build; import com.offbytwo.jenkins.model.BuildResult; import com.offbytwo.jenkins.model.BuildWithDetails; import com.offbytwo.jenkins.model.Job; import org.springframework.stereotype.Service; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service public class JenkinsClientService { private JenkinsServer jenkins; public JenkinsClientService() throws URISyntaxException { jenkins = new JenkinsServer(new URI("http://localhost:8080"), "admin", "admin"); } public List<String> getJobs() throws IOException { Map<String, Job> jobs = jenkins.getJobs(); return jobs.values().stream().map(Job::getName).collect(Collectors.toList()); } public BuildWithDetails getLastBuild(String jobName) throws IOException { Job job = jenkins.getJob(jobName); Build lastBuild = job.getLastBuild(); return lastBuild.details(); } public BuildResult getBuildResult(String jobName, int buildNumber) throws IOException { Job job = jenkins.getJob(jobName); Build build = job.getBuildByNumber(buildNumber); return build.details().getResult(); } } ``` 请将“http://localhost:8080”,“admin”和“admin”替换为您的Jenkins服务器URL,用户名和密码。 4. 创建一个名为“JenkinsController”的Java类,并添加以下代码: ``` import com.offbytwo.jenkins.model.BuildResult; import com.offbytwo.jenkins.model.BuildWithDetails; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.util.List; @RestController public class JenkinsController { @Autowired private JenkinsClientService jenkinsClient; @GetMapping("/jobs") public List<String> getJobs() throws IOException { return jenkinsClient.getJobs(); } @GetMapping("/jobs/{jobName}/lastBuild") public BuildWithDetails getLastBuild(@PathVariable String jobName) throws IOException { return jenkinsClient.getLastBuild(jobName); } @GetMapping("/jobs/{jobName}/builds/{buildNumber}/result") public BuildResult getBuildResult(@PathVariable String jobName, @PathVariable int buildNumber) throws IOException { return jenkinsClient.getBuildResult(jobName, buildNumber); } } ``` 5. 创建一个名为“app.js”的Vue文件,并添加以下代码: ``` <template> <div id="app"> <h1>Jenkins Dashboard</h1> <ul> <li v-for="job in jobs" :key="job"> <h2>{{ job }}</h2> <p>Last build status: {{ getLastBuildStatus(job) }}</p> <button @click="buildJob(job)">Build now</button> </li> </ul> </div> </template> <script> import axios from 'axios'; export default { name: 'app', data() { return { jobs: [] } }, mounted() { axios.get('/jobs') .then(response => { this.jobs = response.data; }); }, methods: { getLastBuildStatus(jobName) { axios.get(`/jobs/${jobName}/lastBuild`) .then(response => { return response.data.result; }); }, buildJob(jobName) { axios.post(`/jobs/${jobName}/build`) .then(response => { console.log(response.data); }); } } } </script> ``` 6. 创建一个名为“index.html”的文件并添加以下代码: ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Jenkins Dashboard</title> </head> <body> <div id="app"></div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="app.js"></script> </body> </html> ``` 7. 创建一个名为“App.java”的Java类,并添加以下代码: ``` import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } } ``` 8. 运行以下命令启动应用程序: ``` mvn spring-boot:run ``` 现在,您已经创建了一个Jenkins + Vue操作数据看板项目。您可以通过在浏览器中打开“http://localhost:8080”来查看该应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

renzhiguo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值