经过一些研究,我发现Artifactory插件对此很有用。但是我找不到有关如何集成到声明式管道中的任何文档。以下是Jenkinsfile的代码片段
stages{
stage('Pre-Build'){
steps{
script{
def server = Artifactory.server 'LocalJfrog'
def rtGradle = Artifactory.newGradleBuild()
rtGradle.resolver server: server, repo: 'gradle-dev-local'
rtGradle.deployer server: server, repo: 'gradle-release-local'
rtGradle.useWrapper = true
}
}
}
}
上面的代码无法进行条件发布,因为即使禁用了自动发布,我也无法重用服务器变量。 >
#1 楼
通过在阶段内使用when块,可以在声明式管道中使用条件。有一个名为“环境注入器”的插件,它允许您在管道脚本之外设置变量,这很好。另外,如果将该步骤放在其他步骤的下面,那么如果它们失败,它将不会执行。 when {
environment name: 'pushArtifact', value: 'true'
}
steps{
//push artifact
}
#2 楼
我认为您的问题根源在于服务器变量无法在预构建阶段块之外重用。这些变量是其他阶段无法访问的。根据先前的建议,我建议这样做:
gradle_artifactory.groovy def call (Map parameters = [:]) { //optional parameters mapping def server = Artifactory.server 'LocalJfrog' def rtGradle = Artifactory.newGradleBuild() rtGradle.resolver server: server, repo: 'gradle-dev-local' rtGradle.deployer server: server, repo: 'gradle-release-local' rtGradle.useWrapper = true def buildInfo = rtGradle.run rootDir: "projectDir/", buildFile: 'build.gradle', tasks: 'clean artifactoryPublish' }
然后保留声明性管道
script { ... }
@Library('my-shared-lib')
...
stage('Artifactory Upload') {
when { <some expression with sonarqube/checkmarx> }
steps {
script {
gradle_artifactory()
}
}
}
引用:
https:/ /jenkins.io/doc/book/pipeline/syntax/#when
https://jenkins.io/doc/book/pipeline/shared-libraries/
#3 楼
如果要在Jenkinsfile中嵌入逻辑,则声明性语法可能不是最好的方法,因为它并不总是很容易在代码中反映出来。就能更轻松地定义和使用条件。评论
谢谢回复。我知道脚本化的管道,但是既然如此,对于任何认为它将被包含在声明式管道中的项目来说,这都是基本的必要条件。然后将切换回脚本或外部Groovy脚本
– Dharanidhar
17年5月11日在12:38
评论
感谢您的提示。如果我理解正确,则必须在满足条件后设置变量,然后在“预构建”步骤中检查该变量
– Dharanidhar
17年7月6日在8:02