2015-06-29 51 views
1

我將maven deploy作爲步驟運行(使用maven構建步驟),並使用時間戳部署工件。我想獲取由Jenkins部署的工件版本

我現在想創建一個具有已部署工件的泊塢窗圖像,並且使用工件時間戳標記了泊塢窗圖像。這是一種非常常見的情況,其中docker映像的標籤必須與artifact包含的相同。

我已經看過一些帖子

  1. Jenkins maven deploy jar to nexus - artifact naming
  2. Jenkins - How can i pass parameters from the Upstream to Downstream
  3. Sonatype Nexus REST Api fetch latest build version

其中[3]給我的快照版本列表從服務器中的XML,它必須被解析。

  • 因爲我推在詹金斯工作的神器,是有可能知道在構建全 工件名稱,而不是從服務器得到它的。

  • 是否有一個API /任何其他方式,它可以給最新 工件的名稱,而不是神器XML

+0

在ONE POM中可以將工件的部署和Docker鏡像結合起來嗎?工件和Docker鏡像部署在相同的Maven任務中 - 兩個-SNAPSHOT別名被替換爲相同的時間戳版本字符串。如果它是您的工作解決方案,我會創建一個反映該問題的新答案。 – barthel

+0

@barthel我做了一些關於在一個pom中發佈神器和碼頭圖像的研究,並且發現它很有趣。但他們(2 poms)順序改變時間戳。您是否能夠幫助我更好地瞭解如何在工件部署中添加docker build + deploy。我發現[這](https://github.com/spotify/docker-maven-plugin)是一個很好的參考,以防您需要,但我相信您會知道它已經:) –

回答

0

的所有文件(連在一個Maven的部署「任務」)的-SNAPSHOT部分將由時間戳版本在deploy:deploy階段所取代。

1)創建泊塢圖像文件

擴展與docker-maven-plugin工件POM(由Spotify的提供在https://github.com/spotify/docker-maven-plugin)。

[...]

您也可以構建目標結合到包裝階段,所以當你只運行MVN包裝容器將建成。

[...]

<plugin> 
    <groupId>com.spotify</groupId> 
    <artifactId>docker-maven-plugin</artifactId> 
    <version>0.2.11</version> 
    <executions> 
    <execution> 
     <phase>package</phase> 
     <goals> 
     <goal>build</goal> 
     </goals> 
     <configuration> 
     <imageName>${project.build.finalName}</imageName> 
     <baseImage>java</baseImage> 
     <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> 
     <!-- copy the service's jar file from target into the root directory of the image --> 
     <resources> 
      <resource> 
      <targetPath>/</targetPath> 
      <directory>${project.build.directory}</directory> 
      <include>${project.build.finalName}.jar</include> 
      </resource> 
     </resources> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

的泊塢圖像名稱將在<imageName />被定義和使用的工件的文件名(${project.build.finalName})。

imageName:建立的圖像將被賦予這個名字。有關build目標

的更多信息:mvn com.spotify:docker-maven-plugin:help -Ddetail=true -Dgoal=buildhttps://github.com/spotify/docker-maven-plugin

2)附加泊塢映像文件Maven的部署任務

連接 - 如果docker-maven-plugin不爲你做 - 泊塢窗圖像文件與build-helper-maven-pluginhttp://www.mojohaus.org/build-helper-maven-plugin/usage.html)。

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.9.1</version> 
    <executions> 
     <execution> 
     <id>attach-artifacts</id> 
     <phase>package</phase> 
     <goals> 
      <goal>attach-artifact</goal> 
     </goals> 
     <configuration> 
      <artifacts> 
      <artifact> 
       <file>${project.build.finalName}</file> 
       <type>...</type> 
       <classifier>docker</classifier> 
      </artifact> 
      ... 
      </artifacts> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

完成這些步驟後,工件文件本身和Docker鏡像工件被部署到具有相同版本字符串的Maven倉庫中。

+0

Thanks @barthel!它看起來會解決我的問題。我會試試看,如果我面對任何問題,回來的問題:) –

1

在基於Maven的詹金斯作業環境變量POM_GROUPIDPOM_ARTIFACTIDPOM_VERSION是出口。

通過${ENV,var="POM_VERSION"}(或類似)

得到這個變量像你想與上面的信息構建的標籤名。

請參見:https://blog.codecentric.de/en/2014/07/accessing-maven-project-properties-jenkins-build-jobs/

詹金斯公開一般Maven項目屬性,環境變量。這些只適用於maven構建作業,但不適用於執行maven目標的自由式作業。

[...]

下表顯示的項目屬性如何行家映射到詹金斯環境變量的完整列表:

Maven項目屬性 - 詹金斯環境變量

project.displayName - POM_DISPLAYNAME

project.version - POM_VERSION

project.groupId - POM_GRO UPID

project.artifactId - POM_ARTIFACTID

project.packaging - POM_PACKAGING

項目。relativePath - POM_RELATIVEPATH

+0

讓我們假設* *我神器的名字**是** com.company.mani **。 **版**是** 1.0.1-SNAPSHOT **。這些工件發佈爲** com.company.mani-1.0.1-20150629.232753-78 **。pom。 POM_VERSION中提到的值是1.0.1-SNAPSHOT。但我想獲取帶有時間戳的上傳的工件,即** com.company.mani-1.0.1-20150629.232753-78 **我將如何獲取? –

+0

我的解決方案在澄清之後不適用於您。環境變量在作業開始時只讀取和導出一次。獲取時間戳版本信息更加複雜。該字符串將在'deploy:deploy'目標中創建。 – barthel