2022年8月15日
jenkins使用pipeline的模式 发布项目
下面文件内容已经脱敏,主要能达成以下的一些功能
1.选择不同的分支构建
2.微服务选择不同的模块构建
3.发布到服务器,并执行服务器的重启脚本
pipeline {
agent any
tools {
jdk 'jdk1.8'
maven 'maven3.6.3'
}
environment {
git_addr = "gitaddr"
target_dir = "xxx"
target_ssh = "xxx"
target_port = "22"
get_branch = "$branch"
}
parameters {
gitParameter(
branch: '',
branchFilter: ".*",
defaultValue: "dev_cloud",
description: '',
listSize: '10',
name: 'Version',
quickFilterEnabled: false,
selectedValue: 'NONE',
sortMode: 'ASCENDING_SMART',
tagFilter: "*",
type: 'PT_BRANCH_TAG',
useRepository: 'xxx')
}
stages {
stage ("echo Git Tag") {
steps {
echo "${params.Version}"
}
}
stage('git checkout') {
steps {
git branch: "${params.Version}".split('/')[1],
credentialsId: 'xxxx',
url: 'xxx'
}
}
stage('build') {
steps {
echo "start package"
sh "java -version && mvn -v"
sh "mvn clean package -Dmaven.test.skip=true"
}
}
stage('release') {
steps {
echo "start release ssh"
script {
def apps = "${module_name}".split(",")
for (int i = 0; i < apps.size(); ++i) {
def jar_name = "kech-${apps[i]}.jar"
def prefix = "web/${apps[i]}"
if("${apps[i]}" == 'gateway') prefix = "${apps[i]}"
def remoteDirectory = "/home/service/xxx/server"
def removePrefix = "${prefix}/target/"
def sourceFiles = "${prefix}/target/${jar_name}"
def execCommand = "echo '0'"
// def execCommand = """docker stop clinicaltrials-auth&&docker rm edc-clinicaltrials-auth&&docker-compose up -d --build clinicaltrials-auth&&echo "0""""
echo execCommand
echo "===begin-->${apps[i]}->>>-jar_name:${jar_name}====="
sshPublisher(
publishers: [
sshPublisherDesc(configName: 'xxx', transfers: [sshTransfer(cleanRemote: false, excludes: '',
execCommand: execCommand,
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: remoteDirectory, remoteDirectorySDF: false, removePrefix: removePrefix, sourceFiles: sourceFiles)], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo "0"
}
}
}
}
stage('run') {
steps {
echo "start release ssh"
script {
def apps = "${module_name}".split(",")
for (int i = 0; i < apps.size(); ++i) {
def sh_name = apps[i];
//.replaceAll("-", "_")
echo "${sh_name}"
def remote = [:]
remote.name = 'xxx' // jenkins 管理里面添加的ssh配置
remote.host = 'xxx'
remote.user = 'xxx'
remote.password = 'xxx'
remote.allowAnyHosts = true
stage('Remote SSH') {
//sshCommand remote: remote, command: "cd /home/service/xxx/server && sh startup.sh ${sh_name} restart"
sshCommand remote: remote, command: "echo run success"
}
}
}
}
}
}
post {
always {
echo '构建结束...'
}
success {
echo '恭喜您,构建成功!!!'
}
failure {
echo '抱歉,构建失败!!!'
}
unstable {
echo '该任务已经被标记为不稳定任务....'
}
changed {
echo ''
}
}
}
2.模块设置
module_name
通过增加checkbox的参数来处理
