[英]Jenkins Git Plugin: How to build specific tag?
我在獲取 Jenkins 以構建指定標簽時遇到問題。 該標簽是參數化構建的一部分,但我不知道如何將其傳遞給 git 插件以僅構建該標簽。 這已經占用了我一天的 3 個小時,我已經在 Stack Overflow 上向大師們認輸了。
我能夠通過使用“branches to build”參數來做到這一點:
Branch Specifier (blank for default): tags/[tag-name]
將[tag-name]替換為標記的名稱。
使用Jenkins CI v.1.555,Git Client插件v.1.6.4和Git插件2.0.4,這些答案都不適合我。
我想要為一個特定的,固定的(即非參數化)標簽構建一個Git存儲庫。 我不得不拼湊出各種答案的解決方案以及Thilo引用的“構建Git標簽”博客文章 。
git push --tags
將標記git push --tags
遠程存儲庫 +refs/tags/*:refs/remotes/origin/tags/*
*/tags/<TAG_TO_BUILD>
(將<TAG_TO_BUILD>
替換為您的實際標記名稱)。 為我添加Refspec證明是至關重要的。 雖然看起來git存儲庫在我將其留空時默認獲取所有遠程信息,但Git插件仍然完全無法找到我的標簽。 只有當我在Refspec字段中明確指定“獲取遠程標簽”時,Git插件才能從我的標簽中識別和構建。
更新2014-5-7 :不幸的是,這個解決方案確實帶來了Jenkins CI(v.1.555)和Git存儲庫推送通知機制( Stash Webhook到Jenkins )的不良副作用:任何時候存儲庫上的任何分支都會更新在推送中,標簽構建作業也將再次觸發。 這導致一遍又一遍地重復相同標簽作業的大量不必要的重建。 我嘗試使用和不使用“強制輪詢使用工作區”選項配置作業,它似乎沒有任何效果。 我可以阻止Jenkins為標記作業進行不必要的構建的唯一方法是清除Refspec字段(即刪除+refs/tags/*:refs/remotes/origin/tags/*
)。
如果有人找到更優雅的解決方案,請通過更新編輯此答案。 我懷疑,例如,如果refspec具體是+refs/tags/<TAG TO BUILD>:refs/remotes/origin/tags/<TAG TO BUILD>
而不是星號全能,那么這可能不會發生。 但是現在,這個解決方案對我們有用,我們只需在作業成功后刪除額外的Refspec。
難道你不能告訴Jenkins從Ref名稱構建? 如果是的話,那就是
refs/tags/tag-name
從我看到的關於Jenkins和Hudson的所有問題,我建議切換到TeamCity。 我沒有必要編輯任何配置文件以使TeamCity工作。
我做了類似這樣的事情並且有效:
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)
如果您正在使用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
}
}
我將Advanced-> Refspec字段設置為refs/tags/[your tag name]
。 這似乎比Refspec的其他各種建議更簡單,但它對我來說效果很好。
更新23/7/2014 - 實際上,經過進一步的測試,結果證明這沒有按預期工作。 似乎HEAD版本仍在檢查中。 請將此撤消作為已接受的答案。 我最終得到了一個有效的解決方案,在這個帖子 (3月30日)中關注了來自gotgenes的帖子。 在那篇關於不必要的構建觸發的帖子中提到的問題對我來說不是問題,因為我的工作是從上游工作觸發而不是從輪詢SCM觸發。
更新APR-2018 - 注釋中注明這對一個人有用,並且同意Jenkins文檔。
在最新的Jenkins(1.639及以上)中,您可以:
通過設置Refspec和Branch Specifier,我能夠讓Jenkins構建一個標簽, 詳見本博文 。
我還必須設置存儲庫名稱(在我的情況下為“origin”),以便我可以在Refspec中引用它(否則它顯然會使用隨機生成的名稱)。
我最后做的是:
jenkins-target
,並讓jenkins跟蹤它 jenkins-target
上的任何分支或標記合並 jenkins-target
分支創建一個標簽 我不確定這是否適用於所有人,我的項目非常小,沒有太多的標簽和東西,但它很容易做,不必亂搞refspecs和參數和東西:-)
您甚至可以使用通配符構建標記類型,例如1.2.3-alpha43
:
Refspec: +refs/tags/*:refs/remotes/origin/tags/*
分支說明符: origin/tags/1.2.3-alpha*
您還可以勾選“ 將更改推送到GitHub時構建 ”以觸發推送,但您必須向webhook添加“創建”操作
因為我沒有看到在Jenkins中使用“使用參數構建”選項的答案,所以在這里加上我的兩分錢。
在這里,我使用Jenkins CI瀏覽器控制台進行項目starwars_api,我能夠使用值refs / tags / tag-name直接構建“使用參數構建”
我找到了這個問題的最佳解決方案,您應該使用 GitSCM 類而不是 git 類:
stages {
stage('SCM') {
steps {
script {
wrap([$class: 'BuildUser']) {
currentBuild.displayName = "#${BUILD_NUMBER} - ${env.BUILD_USER} --> Build from branch ${BRANCH}"
slackSend channel: "#jenkins-build", color: "#02fe21", message: "${JOB_NAME} started by ${env.BUILD_USER} : #${BUILD_NUMBER} --> Build from ${BRANCH} branch with ${TAG} TAG"
}
}
checkout(
changelog: false, poll: false, scm: [
$class : 'GitSCM',
branches : [
[name: "$BRANCH"],
],
userRemoteConfigs: [
[
url: "<YOUR-GIT-URL>/${REPOSITORY}.git", credentialsId: '<YOUR-CREDENTIAL>'
],
],
])
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.