web-dev-qa-db-ja.com

Jenkins Gitプラグイン:特定のタグを作成する方法

Jenkinsに特定のタグを作成させるのに問題があります。タグはパラメーター化されたビルドの一部ですが、これをgitプラグインに渡してそのタグをビルドする方法を知りません。これには1日3時間かかりましたが、スタックオーバーフローでマスターに敗北を認めました。

107
monkjack

「構築するブランチ」パラメータを使用して、それを行うことができました。

Branch Specifier (blank for default): tags/[tag-name]

[tag-name]をタグの名前に置き換えます。

190
Emmanuel Keller

Jenkins CI v.1.555、Git Clientプラグインv.1.6.4、およびGitプラグイン2.0.4を使用した場合、これらの答えはどれも十分ではありませんでした。

1つの特定の固定(つまり、パラメーター化されていない)タグ用に1つのGitリポジトリ用にビルドするジョブが必要でした。さまざまな回答と 「Gitタグを作成する」ブログ投稿Thiloが引用 から解決策をまとめる必要がありました。

  1. git Push --tagsを使用して、タグをリモートリポジトリにプッシュしてください。
  2. ジョブの[Gitリポジトリ]セクションの[ソースコード管理]見出しの下で、[詳細設定]をクリックします。
  3. Refspecのフィールドに、次のテキストを追加します。+refs/tags/*:refs/remotes/Origin/tags/*
  4. 「ビルドするブランチ」、「ブランチ指定子」の下に、*/tags/<TAG_TO_BUILD>を配置します(<TAG_TO_BUILD>を実際のタグ名に置き換えます)。

Refspecを追加することが重要であることがわかりました。 gitリポジトリは、空白のままにすると、デフォルトですべてのリモート情報を取得しているように見えましたが、それでもGitプラグインは完全にタグを見つけることができませんでした。 Refspecフィールドで「リモートタグの取得」を明示的に指定した場合にのみ、Gitプラグインはタグから識別してビルドできました。

2014-5-7の更新:残念ながら、このソリューションにはJenkins CI(v.1.555)とGitリポジトリプッシュに望ましくない副作用があります通知メカニズムアラ Stash Webhook to Jenkins :リポジトリのブランチがプッシュで更新されるたびにany、タグビルドジョブも再度起動されます。これにより、同じタグジョブの不必要な再構築が何度も繰り返されます。 「ワークスペースを使用してポーリングを強制する」オプションを使用して、または使用せずにジョブを構成しようとしましたが、効果はないようです。 Jenkinsがタグジョブに不要なビルドを作成するのを防ぐ唯一の方法は、Refspecフィールドをクリアすることです(つまり、+refs/tags/*:refs/remotes/Origin/tags/*を削除します)。

誰かがよりエレガントなソリューションを見つけた場合は、この回答を更新して編集してください。たとえば、refspecが具体的にアスタリスクのキャッチオールではなく+refs/tags/<TAG TO BUILD>:refs/remotes/Origin/tags/<TAG TO BUILD>だった場合、これは起こらないと思われます。ただし、今のところ、このソリューションは機能しています。ジョブが成功した後、余分なRefspecを削除するだけです。

73
gotgenes

JenkinsにRef名からビルドするように指示できませんか?もしそうならそれは

refs/tags/tag-name

ジェンキンスとハドソンについて私が見るすべての質問から、TeamCityに切り替えることをお勧めします。 TeamCityを機能させるために、構成ファイルを編集する必要はありませんでした。

15

Jenkinsパイプラインを使用していて、特定のタグ(例:ビルドのTAGパラメーター)をチェックアウトする場合、次のことができます。

stage('Checkout') {
  steps {
    checkout scm: [$class: 'GitSCM', userRemoteConfigs: [[url: 'YOUR_GIT_REPO_URL.git', credentialsId: 'YOUR_GIT_CREDENTIALS_ID' ]], branches: [[name: 'refs/tags/${TAG}']]], poll: false
  }
}
8

私はこのようなことをしましたが、うまくいきました:

Source Code Management

 Git    
    Repositories    


 Advance

Name: ref
Refspec : +refs/tags/*:refs/remotes/Origin/tags/* 

 Branches to build  
 Branch Specifier (blank for 'any') : v0.9.5.2

enter image description here

Jenkinsログは、タグからソースを取得していることを確認しました

リビジョン0b4d6e810546663e931cccb45640583b596c24b9(v0.9.5.2)をチェックアウトする

8
Hasan Shaik

Advanced-> Refspecフィールドをrefs/tags/[your tag name]に設定します。これはRefspecの他のさまざまな提案よりも簡単に思えますが、私にとってはうまくいきました。

UPDATE 23/7/2014-実際、さらにテストした後、これは期待どおりに機能しなかったことが判明しました。 HEADバージョンはまだチェックアウトされているようです。受け入れられた回答としてこれを取り消してください。この thread (30thのgotgenesからの投稿をフォローすることで、実用的なソリューションを得ました。行進)。私の仕事はSCMのポーリングからではなく、上流の仕事からトリガーされるため、不必要なビルドのトリガーの投稿で言及された問題は私にとっては問題ではありませんでした。

UPDATE APR-2018-これは1人で機能し、Jenkinsのドキュメントに同意するというコメントに注意してください。

8
Nebu

最新のJenkins(1.639以降)では、次のことができます。

  1. 「Branches to build」フィールドにタグの名前を指定するだけです。
  2. パラメータ化されたビルドでは、同じフィールド「ビルドするブランチ」、つまり$ {Branch_to_build}の変数としてパラメーターを使用できます。
  3. Git Parameter Plugin をインストールできます。これにより、使用可能なすべてのブランチとタグのリストが表示され、機能が提供されます。
7
m1ld

RefspecとBranch Specifierを このブログ投稿で詳しく説明 に設定することで、Jenkinsにタグを作成させることができました。

また、Refspecで参照できるように、リポジトリ名を(私の場合は「Origin」に)設定する必要がありました(そうでなければ、明らかにランダムに生成された名前を使用します)。

3
Thilo

ワイルドカードを使用して、1.2.3-alpha43などのタグタイプを作成することもできます。

Refspec:+refs/tags/*:refs/remotes/Origin/tags/*

分岐指定子:Origin/tags/1.2.3-alpha*

変更がGitHubにプッシュされたときにビルドする」にチェックマークを付けてプッシュをトリガーすることもできますが、追加する必要がありますウェブフックへの「作成」アクション

2
riverfall

私が最後にしたことは:

  • 新しいブランチjenkins-targetを作成し、ジェンキンスにそれを追跡させました
  • jenkins-targetにビルドしたいブランチまたはタグからマージします
  • ビルドが機能し、テストに合格するなどしたら、単にjenkins-targetブランチからタグを作成するだけです

これがすべての人にうまくいくかどうかはわかりませんが、私のプロジェクトは非常に小さく、タグやものが多すぎませんが、参照仕様やパラメータなどをいじる必要はありません:-)

1
Hugh Perkins

Jenkinsのオプション「Build with parameters」を使用する答えを見たことがないので、ここに2セントを追加します。

ここでは、プロジェクトstarwars_apiにJenkins CIブラウザーコンソールを使用しており、値refs/tags/tag-nameを持つ「パラメーター付きビルド」で直接ビルドできました。

  1. 「パラメータ付きビルド」オプションを選択します。
  2. ボックスに「refs/tags/tag_142」として値を追加します(私の例ではtag_name = tag_142)

refタグ名でビルド

0
anayagam