Jenkins宣言型パイプラインでArtifactoryプラグインを使用する


13

Jenkins Declarative Pipelineを使用して、ビルドプロセスを自動化します。特定の条件(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
            }

        }   
    }
}

自動公開を無効にしてもサーバー変数を再利用できないため、上記のコードでは条件付き公開を実行できません。

回答:


3

ステージ内でwhenブロックを使用すると、宣言パイプラインに条件を含めることができます。「環境インジェクター」と呼ばれるプラグインがあり、これを使用すると、パイプラインスクリプトの外部で変数を設定できます。また、ステップを他のステップの下に配置すると、失敗した場合は実行されません。

 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.