簡體   English   中英

Jenkins Git 插件:如何建立特定標簽?

[英]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標簽”博客文章

  1. 確保使用git push --tags將標記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到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及以上)中,您可以:

  1. 只需在“要構建的分支”字段中指定標記的名稱。
  2. 在參數化構建中,您可以在同一字段“Branches to build”中使用參數作為變量,即$ {Branch_to_build}。
  3. 你可以安裝Git參數插件 ,它將通過列出所有可用的分支和標簽為你提供功能。

通過設置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直接構建“使用參數構建”

  1. 選擇“使用參數構建”選項。
  2. 在框中添加值“refs / tags / tag_142”(對於我的示例,tag_name = tag_142)

用ref標簽名稱構建

我找到了這個問題的最佳解決方案,您應該使用 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>'
                                ],
                        ],
                ])
            }
        }

對於 git-tag "v1.5.4" 我使用了以下正則表達式

:(. v[\d.]{1,15}. )

詹基斯配置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM