Jenkinsに指定されたタグを作成させるのに問題があります。タグはパラメーター化されたビルドの一部ですが、これをgitプラグインに渡してそのタグをビルドする方法を知りません。これは私の一日の3時間を取り、スタックオーバーフローでマスターに敗北を認めました。
Jenkinsに指定されたタグを作成させるのに問題があります。タグはパラメーター化されたビルドの一部ですが、これをgitプラグインに渡してそのタグをビルドする方法を知りません。これは私の一日の3時間を取り、スタックオーバーフローでマスターに敗北を認めました。
回答:
「ブランチを構築する」パラメーターを使用することで、これを行うことができました。
Branch Specifier (blank for default): tags/[tag-name]
[tag-name]をタグの名前に置き換えます。
HEAD
。gitプラグインのロジックは、これらの2つのリビジョンを比較しているようです。私のリポジトリでは常に同じではないため、新しいビルドが常にトリガーされます。
Jenkins CI v.1.555、Gitクライアントプラグインv.1.6.4、およびGitプラグイン2.0.4を使用して、これらの答えはどれも十分ではありませんでした。
1つの特定の固定(つまり、パラメーター化されていない)タグに対して1つのGitリポジトリーを構築するジョブが必要でした。Thiloが引用したさまざまな回答と「Gitタグを作成する」ブログ投稿 からの解決策をまとめる必要がありました。
git push --tags
+refs/tags/*:refs/remotes/origin/tags/*
*/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を削除するだけです。
+refs/heads/*:refs/remotes/origin/*
場合は、になります+refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/remotes/origin/tags/*
。(私はrefspecsをあまり使用していないので、このフィールドがスペースで区切られていることを知るには、いくつかの実験が必要
JenkinsにRef名からビルドするように指示できませんか?もしそうならそれは
refs/tags/tag-name
ジェンキンスとハドソンについて私が見るすべての質問から、TeamCityに切り替えることをお勧めします。TeamCityを機能させるために、構成ファイルを編集する必要はありませんでした。
git push --tags
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
}
}
最新のJenkins(1.639以降)では、次のことができます。
1.0.1
。ビルドするブランチのフィールドにタグのバージョン(例:)を指定しただけです。
私はこのようなことをしました、そしてそれはうまくいきました:
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
は、[詳細]ボタンをクリックします。
Advanced-> Refspecフィールドを refs/tags/[your tag name]
ます。これは、Refspecの他のさまざまな提案よりも単純に見えますが、私にとってはうまくいきました。
UPDATE 23/7/2014-実際、さらなるテストの後、これは期待通りに機能しなかったことが判明しました。HEADバージョンはまだチェックアウトされていたようです。これを受け入れられた回答として元に戻してください。私はこのスレッド(3月30日)のgotgenesからの投稿をフォローすることで、実用的な解決策を得ました。私のジョブはSCMのポーリングからではなく上流のジョブからトリガーされるため、ビルドの不要なトリガーの投稿で言及された問題は私にとって問題ではありませんでした。
UPDATE APR-2018-これは1人で機能し、Jenkinsのドキュメントに同意することをコメントに書き留めます。
refs/tags/<tagname>
、Jenkinsのドキュメントを使用する必要があると記載されているとおりに使用することに注意したいと思います。おそらく、元の投稿の時点ではプラグインにバグがあった可能性がありますが、2018年4月の時点では、これが正解です。
refs/tags
接頭辞を省略してだけを使用できることがわかりました<tagname>
。YMMVですが...私の目的には問題ありません。
このブログの投稿で詳しく説明されているように、RefspecとBranch Specifierを設定することで、Jenkinsにタグを作成させることができました。
また、Refspecで参照できるように(私の場合は「origin」に)リポジトリ名を設定する必要があります(そうしないと、ランダムに生成された名前を使用するようになります)。
最後に私がしたことは:
jenkins-target
ジェンキンスにそれを追跡させましたjenkins-target
jenkins-target
ブランチからタグを作成するだけですこれがすべての人にとってうまくいくかどうかはわかりませんが、私のプロジェクトは非常に小さく、タグやものは多すぎませんでしたが、それは非常に簡単です。