这些是a simplified maven multiple-module project,项目结构如下:
-pom.xml
-eureka
-src
-pom.xml
-gateway
-src
-pom.xml
-order
-src
-pom.xml
-user
-src
-pom.xml
启动这些模块的詹金管道彼此非常相似,因此我创建了this jenkins pipeline project。
结构如下:
-vars
-springCloudPipeline.groovy
-eureka-JenkinsFile
-gateway-JenkinsFile
-order-JenkinsFile
-user-JenkinsFile
eureka-JenkinsFile
@Library('springCloudPipeline') _
springCloudPipeline(branch :'master',
scmUrl : 'https://github.com/wuxudong/spring-cloud-best-practice.git',
serviceName : 'eureka')
gateway-JenkinsFile
@Library('springCloudPipeline') _
springCloudPipeline(branch :'master',
scmUrl : 'https://github.com/wuxudong/spring-cloud-best-practice.git',
serviceName : 'gateway')
......
vars / springCloudPipeline.groovy
def call(Map pipelineParams) {
pipeline {
agent any
environment {
branch = "${pipelineParams.branch}"
scmUrl = "${pipelineParams.scmUrl}"
serviceName = "${pipelineParams.serviceName}"
}
stages {
stage('checkout git') {
steps {
git branch: branch, url: scmUrl
}
}
stage('build') {
steps {
sh 'mvn clean package -DskipTests=true'
}
}
stage('deploy'){
steps {
sh "JENKINS_NODE_COOKIE=dontKillMe nohup java -jar ${pipelineParams.serviceName}/target/${pipelineParams.serviceName}.jar &"
}
}
}
}
}
我创建了4个管道任务:eureka
,gateway
,order
,user
。
唯一的区别是它们具有不同的脚本路径。
为了导入springCloudPipeline模板,我必须在jenkins->系统设置中定义一个全局管道库:springCloudPipeline-> https://github.com/wuxudong/multiple-module-jenkins-pipeline.git
因为springCloudPipeline仅由该项目本身使用,所以我想知道是否有一种方法无需定义全局pipleline库。
我确实找到了一个插件https://github.com/karolgil/SharedLibrary,可以将存储库的某些部分作为共享库加载,但是我想知道是否还有其他官方解决方案?
答案 0 :(得分:1)
我想知道,为什么我们需要多个 Jenkinsfile(每个模块一个)?
我们只需要在根级别保留一个 Jenkinsfile 并仅从根级别触发 maven 构建。所有子模块都将以隐蔽方式构建/部署。
如果您想为每个模块构建/推送 Docker 镜像,您可以通过定义各个阶段从根 Jenkisfile 单独触发。