我有几个Maven项目都以相同的方式进行发布。
是否可以重用同一阶段,并使用另一个存储库名称进行迭代以进行克隆?
stage('Maven_microservices') {
steps {
checkout([$class: 'GitSCM',
branches: [[name: "*/${env.BRANCH}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'CleanBeforeCheckout'],
[$class: 'RelativeTargetDirectory', relativeTargetDir: 'maven_microservice_1']],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'autouser',
url: 'ssh://mygerrit:29418/maven/maven_microservice_1']]])
container('maven') {
configFileProvider([configFile(fileId: 'maven_settings', variable: 'MAVEN_SETTINGS')]) {
dir('maven_microservice_1') {
sh 'mvn -s $MAVEN_SETTINGS versions:update-parent'
sh 'mvn -s $MAVEN_SETTINGS versions:resolve-ranges'
sh 'mvn -s $MAVEN_SETTINGS versions:use-releases'
sh 'mvn -s $MAVEN_SETTINGS --batch-mode release:prepare'
}
}
}
}
}
答案 0 :(得分:1)
不能100%地确定这个答案是否是您所需要的,但是您意思是这样的吗?
('maven_microservice_1', 'maven_microservice_2').each { projectName ->
stage("${projectName}") {
steps {
checkout([$class: 'GitSCM',
branches: [[name: "*/${env.BRANCH}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'CleanBeforeCheckout'],
[$class: 'RelativeTargetDirectory', relativeTargetDir: "${projectName}"]],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'autouser',
url: "ssh://mygerrit:29418/maven/${projectName}"]]])
container('maven') {
configFileProvider([configFile(fileId: 'maven_settings', variable: 'MAVEN_SETTINGS')]) {
dir("${projectName}") {
sh 'mvn -s $MAVEN_SETTINGS versions:update-parent'
sh 'mvn -s $MAVEN_SETTINGS versions:resolve-ranges'
sh 'mvn -s $MAVEN_SETTINGS versions:use-releases'
sh 'mvn -s $MAVEN_SETTINGS --batch-mode release:prepare'
}
}
}
}
}
}
答案 1 :(得分:0)
使用Jenkins声明式共享库可以解决此问题。请参阅Extending with Shared Libraries
在库-vars文件夹中创建GenericMavenRelease.groovy并嵌入此代码
def call(body){
//evaluate the body block, and collect configuration into the object
def config = [:]
def builder
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
pipeline{
agent any
stages{
stage('Maven_Microservices'){
steps{
checkout([$class: 'GitSCM',
branches: [[name: "*/${env.BRANCH}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'CleanBeforeCheckout'],
[$class: 'RelativeTargetDirectory', relativeTargetDir: "${projectName}"]],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'autouser',
url: "ssh://mygerrit:29418/maven/${projectName}"]]])
container('maven') {
configFileProvider([configFile(fileId: 'maven_settings', variable: 'MAVEN_SETTINGS')]) {
dir("${projectName}") {
sh 'mvn -s $MAVEN_SETTINGS versions:update-parent'
sh 'mvn -s $MAVEN_SETTINGS versions:resolve-ranges'
sh 'mvn -s $MAVEN_SETTINGS versions:use-releases'
sh 'mvn -s $MAVEN_SETTINGS --batch-mode release:prepare'
}
}
}
}
}
}
}
在每个存储库中如下创建Jenkinsfile
@Library('maven-library@1.0.0') _
GenericMavenRelease {
}
以这种方式遵循DRY-不要重复自己,并使用单个管道代码在多个存储库中构建代码