簡體   English   中英

通過Jenkins / Maven從Nexus登台存儲庫發布

[英]Releasing from Nexus staging repository via Jenkins/Maven

我有一個Java項目。 有些部分是jar文件,有些是war文件。 我還有Jenkins和Nexus Pro,當團隊中的開發人員提交SVN時,Jenkins構建會自動啟動。

使用Maven版本插件,我能夠mvn versions:set -DnewVersion=1.0.$SVN_REVISION作為預構建步驟,然后mvn clean test deploy 在這個過程結束時,我有一個my-artifact-1.0.1234.jar上傳到我的Nexus Pro Staging Repository。

由於我們在CI類型的環境中工作,我們可能會有一百個(或更多)分段構建。 當時機成熟時,QA團隊希望將某個構建推廣到“后期”環境(想想QA,或SIT等等。環境在這里更像是一個鎖定狀態。)

我想要的工作流程如下:

  1. 有人認為Build 1.0.1357應該被提升為QA
  2. 他們進入詹金斯,去“促進QA”工作
  3. 它們在下拉列表中顯示了Nexus Staging Repository中所有可能構建的列表。 他們選擇一個,然后單擊“運行”按鈕。
  4. 該工件從Nexus Staging“發布”到Nexus版本,並進一步部署到QA環境。 (我並不關心“並部署到QA”部分 - 我知道如何做到這一點。為了完整性我的故事,它包含在這里。)

我已經知道我可以從命令行執行此操作,並且它正在工作:

mvn nexus-staging:rc-list -DserverId=nexus -DnexusUrl=http://my.nexus.ip:8081/nexus
mvn nexus-staging:rc-release -DserverId=nexus -DnexusUrl=http://my.nexus.ip:8081/nexus -DstagingRepositoryId=abcd-1000 -Ddescription="Release from CLI."

我遇到的問題是你必須在命令行上指定stagingRepositoryId 我怎么能完成這個?

我正在做的是解析輸出

mvn nexus-staging:rc-list -DserverId=nexus -DnexusUrl=http://my.nexus.ip:8081/nexus

然后只需將您需要的存儲庫與您的特定邏輯相匹配。 對我來說使用python是最好的解決方案(但你可以用任何語言自己完成):

output = subprocess.check_output("mvn nexus-staging:rc-list -DserverId=nexus -DnexusUrl=http://my.nexus.ip:8081/nexus")

for line in output.split('\n'):
    if "repo" in line:
        stagingRepositoryId = "repo-" + line[8:23]

考慮輸出為

[INFO] repo_qa-3514 OPEN     Implicitly created (auto staging).
[INFO] repo_qa-3518     Implicitly created (auto staging).
[INFO] repo_qa-3521 OPEN     Implicitly created (auto staging).
[INFO] repo-2011     OPEN     Implicitly created (auto staging).

您將在解析后運行第二個命令:

mvn nexus-staging:rc-release -DserverId=nexus -DnexusUrl=http://my.nexus.ip:8081/nexus -DstagingRepositoryId=repo-2011 -Ddescription="Release from CLI."

我認為通過使用SNAPSHOT和發布存儲庫可以輕松實現您要做的事情。 因此,您在SNAPSHOT構建中進行正常開發,一旦准備好進行測試,就可以創建一個標記構建,從POM中的版本中刪除SNAPSHOT。 所有這一切都可以使用jenkins和Nexus來實現。

此外,您不需要在您的版本中使用SVN修訂版號,而是可以通過發布插件管理增量版本號。

總結一下:

  1. 假設您正在開發1.0版。
  2. 所以你把pom版本的初始分支作為1.0-0-SNAPSHOT。 這里1.0表示版本號,' - 0'表示我們計划部署的下一個標簽構建號。
  3. 現在,一旦您准備好部署或希望您的QA團隊進行測試。 您使用maven發布插件運行作業或腳本來創建標記。 將使用版本1.0-0創建標記構建[刪除快照以便將其發布到存儲庫]並上傳到存儲庫,分支中的版本也將增加到1.0-1-SNAPSHOT [所以現在分支中的更改將被更改為如果需要進行任何更改,則發布並部署1.0-1]

以上所有步驟均使用Maven發布插件自動執行,並通過jenkins作業運行。

我的工作有以上設置。


OP表示'SNAPSHOT'不在圖片中。 在這種情況下,這篇文章回答了這個問題: 自動部署到sonatype的oss maven存儲庫 [看第二個答案]

暫無
暫無

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

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