web-dev-qa-db-ja.com

タグを作成する場合にのみJenkinsパイプラインステップを実行します

パブリケーションなど、GitタグをビルドしているときにのみJenkinsに実行させたい特定のビルドロジックがあります。 Jenkinの宣言型パイプラインを使用してこれをどのように達成できますか?

言い換えると、TravisCIのデプロイオンタグ機能と同等の機能を構築しようとしています。

deploy:
  [...]
  on: 
    tags: true

ブランチをチェックするための組み込み条件 がありますが、タグを示すものが表示されません。

5
vossad01

更新:バージョン1.2.8以降 パイプラインモデル定義プラグイン 使用できるようになりました buldingTag()

stage('Deploy') {
  when {
    buildingTag()
  }
  steps {
    echo 'Replace this with your actual deployment steps'
  }
}

Multibranch Pipeline 構成を使用する場合、基礎となる Branch API Plugin によって提供されるTAG_NAME環境変数とともにexpression条件を使用できます。残念ながら、環境変数がGroovyレベル(API制限)で定義されているかどうかを直接確認することはできないため、シェルでテストする必要があります。

stage('Deploy') {
  when { expression { sh([returnStdout: true, script: 'echo $TAG_NAME | tr -d \'\n\'']) } }
  steps {
    echo 'Replace this with your actual deployment steps'
  }
}

上記は、Groovyで真実である空でない文字列を利用しています。

より簡単な方法は、将来のバージョンで導入される可能性があります。 jenkinsci/pipeline-model-definition-plugin#24 を参照してください。

11
vossad01

ブランチ名を取得して処理したのと同様の状況がありました。タグの場合はrefs/tags/v101.0.0-beta8468のようです。したがって、これを抽出/解析して、タグかどうかを確認する必要があります。そうでない場合は、pipelineのようなブランチ名だけです。例えば。

if(env.gitlabBranch.contains("tags"))
    {
        isTag = true
        echo "----------------true----------------"
        branch = env.gitlabBranch.split("/")[2]
        imageTag = branch

    }
    else
    {
        branch = "Origin/$env.gitlabBranch"

    }

そして、チェックアウトのステップで、ブランチを次のように言及します

 branches: [[name: "${branch}"]

同じプロジェクトからチェックアウトしたい場合。 isTag変数に基づいて、特定のステージを実行することを選択できます。お気に入り:

if(isTag) {
stage('Deploy') {
   // your logic here
}

isTagをfalseとして初期化します:)

1
Siddhant Mishra