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


120

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


これは、stackoverflow.com / questions / 7157170 /…とは異なるということですか?(google.com/…の 3番目の結果)
VonC 2012

1
「これは私の一日の3時間かかっています」-私は一日の3時間にGoogleで見つけたすべてのリンクが含まれていなかったほど怠惰ではありません:)
sksamuel

1
この方法で実行してもよろしいですか?gitのタグ付けがスケーリングされないことに気付きましたか?おそらく、「シェルの実行」タスクを使用して、本当に必要なタグ/リビジョンをチェックアウトするスクリプトを作成できますか?
mpontillo 2012

回答:


222

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

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

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


5
+1が増えない理由がわかりません。そのerics-notesブログエントリは、地獄のように混乱しています。これはシンプルでうまく機能します。ありがとう!
Cody S

3
私にとってはうまくいきました。ありがとう。私のパラメーターはRELEASE_TAGという名前だったので、分岐指定子の値としてtags / $ {RELEASE_TAG}を使用しました。
ウェズリーウォマック2014

3
これを機能させることができませんでした。何らかの理由でタグをチェックアウトできません。「エラー:ビルドするリビジョンが見つかりませんでした。このジョブのリポジトリとブランチの構成を確認してください。tags / 3.0.1を指定し、* / tags / 3.0.1も試しました。タグが存在することを確認しました。
lostintranslation 2014年

1
この回答で提案されていることを実行しようとすると、リポジトリのポーリングごとにビルドがトリガーされます。gitポーリングログには、「最後に作成されたリビジョン」がタグのリビジョンであることが継続的に表示されますが、「最新のリモートヘッドリビジョンは」が最新のリビジョンですHEAD。gitプラグインのロジックは、これらの2つのリビジョンを比較しているようです。私のリポジトリでは常に同じではないため、新しいビルドが常にトリガーされます。
ルイ、

これは間違いなく正しい答えである必要があります。それは私にとってはうまくいき、とても簡単です。私はレポをポーリングしないので、まだその問題があると思います。
ジェレミー

76

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

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

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

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

更新2014年5月7日は:残念ながら、この解決策は、JenkinsのCI(v.1.555)とラàのGitリポジトリプッシュ通知メカニズムのために望ましくない副作用が付属していませんジェンキンスへスタッシュウェブフックの任意の時間:任意のリポジトリにブランチが更新されますプッシュでは、タグ作成ジョブも再び実行されます。これにより、同じタグジョブの不必要な再構築が何度も繰り返されます。「ワークスペースを使用してポーリングを強制」オプションを使用した場合と使用しない場合の両方でジョブを構成しようとしましたが、効果がないようです。Jenkinsがタグジョブの不要なビルドを作成できないようにする唯一の方法は、Refspecフィールドをクリアする(つまり、を削除する+refs/tags/*:refs/remotes/origin/tags/*)ことです。

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


4
refspecに「次のテキストを追加する」... refspecが以前だった+refs/heads/*:refs/remotes/origin/*場合は、になります+refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/remotes/origin/tags/*。(私はrefspecsをあまり使用していないので、このフィールドがスペースで区切られていることを知るには、いくつかの実験が必要
でした

1
このソリューションの追加の+1。以前の解決策も私にとってはうまくいきませんでした。
whitespy9 2015年

16

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

refs/tags/tag-name

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


あなたは実際にチームシティを提案する最初の人ではありません。本当にそんなにいいの?調べてみます。
sksamuel 2012

1
@monkjack私は私のリポジトリの1つで同じ構文を試しましたが、うまくいきました。現在のタグをリストできますか?あなたは確かにあなたは、具体的にリモートレポにそのタグをプッシュしたしているgit push --tags
アンドリュー・T Finnell

4
近くなってる。タグをリモートにプッシュしていませんでしたが、今はプッシュしています。私はジェンキンスにrefs / tags / harpercollins-1.0.16を使用して今すぐビルドさせることができますが、そこに何を置いたかに関係なく、常にビルドヘッドを主張します。リモートにタグが付いていることを確認しました(gitwebで確認できます)。そのタグのスナップショットを実行すると、すべてが適切にあることを確認できます。
sksamuel 2012

6
TeamCityは独自仕様なので、ほとんど役に立ちません。
スラング

2
そうそう、無料ツールから商用ツールへの切り替えは正しい選択です!jetbrainsがホイールを再発明し、新しいバグトラッカーを作成するときに、bugzillaからそれに切り替えて他の人に提案しますか?
m1ld

11

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
  }
}

9

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

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

1
実際、タグ名を入力するだけでもうまくいきました。gitプラグインのこのドキュメントではまだ、これは機能しない
Zitrax

これはJenkins 1.532.3で機能しました1.0.1。ビルドするブランチのフィールドにタグのバージョン(例:)を指定しただけです。
アンドレ

9

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

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

ここに画像の説明を入力してください

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

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


これは、すべてのタグを作成するのに最適です。ありがとうございます!これを追加するにrefspecは、[詳細]ボタンをクリックします。
2016年

9

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

UPDATE 23/7/2014-実際、さらなるテストの後、これは期待通りに機能しなかったことが判明しました。HEADバージョンはまだチェックアウトされていたようです。これを受け入れられた回答として元に戻してください。私はこのスレッド(3月30日)のgotgenesからの投稿をフォローすることで、実用的な解決策を得ました。私のジョブはSCMのポーリングからではなく上流のジョブからトリガーされるため、ビルドの不要なトリガーの投稿で言及された問題は私にとって問題ではありませんでした。

UPDATE APR-2018-これは1人で機能し、Jenkinsのドキュメントに同意することをコメントに書き留めます。


この回答が投稿されてから4年後refs/tags/<tagname>、Jenkinsのドキュメントを使用する必要があると記載されているとおりに使用することに注意したいと思います。おそらく、元の投稿の時点ではプラグインにバグがあった可能性がありますが、2018年4月の時点で、これ正解です。
evadeflow

以前のコメントの更新:実際には、refs/tags接頭辞を省略してだけを使用できることがわかりました<tagname>。YMMVですが...私の目的には問題ありません。
evadeflow 2018

3

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

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


2

最後に私がしたことは:

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

これがすべての人にとってうまくいくかどうかはわかりませんが、私のプロジェクトは非常に小さく、タグやものは多すぎませんでしたが、それは非常に簡単です。


私はこの非常にシンプルなアプローチが好きです。
zochhuana 2016年

2

たとえば、タグタイプも作成できます 1.2.3-alpha43、ワイルドカードを使用し。

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

ブランチ指定子: origin/tags/1.2.3-alpha*

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


1

Jenkinsで[パラメーターを使用してビルド]オプションを使用する回答を見たことがないので、ここに2セントを追加します。

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

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

参照タグ名でビルド

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