在Jenkins声明式管道中使用Artifactory插件


13

我正在使用Jenkins声明性管道自动化我的构建过程。仅在某些条件(Sonar,Checkmarx)通过的情况下,我们才希望将工件发布到远程JFrog存储库。

经过一番研究,我发现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
            }

        }   
    }
}

上面的代码无法进行条件发布,因为即使禁用了自动发布,我也无法重用服务器变量。

Answers:


3

通过在阶段内部使用when -block,可以在声明性管道中使用条件。有一个名为“环境注入器”的插件,它使您可以在管道脚本之外设置变量,这很好。另外,如果将该步骤放在其他步骤的下面,那么如果它们失败,它将不会执行。

 when {
    environment name: 'pushArtifact', value: 'true'
  }
  steps{
     //push artifact  
  }

感谢您的提示。如果我理解正确,则必须在满足条件后设置变量,然后在“预构建”步骤中检查该变量
Dharanidhar

2

我认为您的问题根源在于服务器变量在构建前阶段模块之外无法重用。

在Jenkins声明式中,您可以使用script { ... }块来定义变量,但是一旦离开阶段,其他阶段将无法访问这些变量。

有了先前的建议,我建议这样做:

将工件部署代码放置到共享库中。

gradle_artifactory.groovy

    def call(Map parameters = [:]){//可选参数映射

        def服务器= Artifactory.server'LocalJfrog'
        def rtGradle = Artifactory.newGradleBuild()
        rtGradle.resolver服务器:服务器,存储库:“ gradle-dev-local”
        rtGradle.deployer服务器:服务器,存储库:'gradle-release-local'
        rtGradle.useWrapper = true
        def buildInfo = rtGradle.run rootDir:“ projectDir /”,buildFile: 
            'build.gradle',任务:'clean artifactoryPublish'

    }

然后保留您的声明式管道 D.R.Y

@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/


1

如果要在Jenkinsfile中嵌入逻辑,则声明性语法可能不是最佳方法,因为在代码中反映它并不总是那么容易。

如果您切换到Jenkinsfile脚本管道,则可以以更简单的方式定义和使用条件。


1
谢谢回复。我知道脚本化的管道,但是既然如此,这对于任何认为它将被包含在声明性管道中的项目都是必不可少的。然后将切换回脚本化或外部常规脚本
Dharanidhar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.