2013-12-10 23 views
0

我正在開始使用Jenkins向EC2項目添加持續集成。構建執行後,我將在虛擬機中部署構建工件。如何在Jenkins執行期間管理每個構建特定文件?

現在有一些問題需要在Jenkins中維護。在部署執行期間,我的glue ant任務將從工作區/文件夾運行。這時我需要創建幾個特定版本的中間文件。

如何維護這個文件?我知道詹金斯的目錄結構。 (Jenkins documentation link就可以了)

我應該在builds/[BUILD_ID]文件夾下創建這些文件嗎?

但是我沒有找到一種方法來獲取這個文件夾的絕對路徑。 I already checked Jenkins Set Environment Variables.

回答

2

詹金斯可以存儲工件對於每個構建(但是我可以從WORKSPACE變量,它是可用在詹金斯扣除它)。您可以指定要存檔的文件夾。 (但是,我只是簡單地將所有需要的工件複製到一個文件夾下,這樣,我只需簡單地指定一個文件夾,而不必擔心是否缺少任何東西。)

如果您需要這些文件基於構建的部署,我會將它們作爲構建工件存儲在Jenkins中。這些存儲在http://$JENKINS_URL/$JOB_NAME/$BUILD_NUMBER/artifact/...其中...是您的工作區的目錄結構。例如,我傾向於在target的Java項目中構建所有東西,並將我的工件存儲在target/archive文件夾下(如果它們位於單個文件夾下,則可以更輕鬆地保存所有工件)如果我有一個文件foo.txt存儲爲神器,它的網址是:

http://$JENKINS_URL/$JOB_NAME/$BUILD_NUMBER/artifact/target/archive/foo.txt 

我可以使用wgetcurl拉下這件神器。

您也可以決定(如果您正在使用Ant),您可以在一個易於掌握的文件中對所有工件進行壓縮或創建壓縮包。我就是做這個的。實際上,通常有三個文件在我target/archive目錄:

  • 我需要部署(包括腳本和中間文件)的所有工件的zip文件或壓縮包。
  • 一個名爲DEPLOYMENT_DIRECTIONS.txt的文件,其中包含部署方向。
  • 一個名爲deploy.sh的文件,這是我的實際部署文件。

在我DEPLOYMNET_DIRECTIONS.txt文件是這些方向:

1). Log onto the Server 

2). Execute the following curl command to download the deploy script: 

    curl -o deploy.sh "@[email protected]/@[email protected]/@[email protected]/artifact/target/archive/deploy.sh" 

    You may copy this and paste it right into the server where you're deploying. 

3). Run the deploy.sh script. 

    $ bash deploy.sh 

裏面我build.xml是這樣的:

<copy todir="${archive.dir}"> 
     <fileset dir="${main.config.dir}"> 
      <include name="DEPLOYMENT_DIRECTIONS.txt"/> 
      <include name="deploy.sh"/> 
     </fileset> 
     <filterset> 
      <filter token="JOB_NAME"  value="${env.JOB_NAME}"/> 
      <filter token="BUILD_NUMBER" value="${env.BUILD_NUMBER}"/> 
      <filter token="JENKINS_URL"  value="${env.JENKINS_URL}"/> 
     </filterset> 
    </copy> 

<filterset>替換@[email protected]變量與詹金斯本身的環境變量。現在,我的DEPLOYMENT_DIRECTIONS.txt是這樣的:

1). Log onto the Server 

2). Execute the following curl command to download the deploy script: 

    curl -o deploy.sh "http://jenkins.vegicorp.com/jenkins/server_app/15/artifact/target/archive/deploy.sh" 

    You may copy this and paste it right into the server where you're deploying. 

3). Run the deploy.sh script. 

    $ bash deploy.sh 

您可以剪切和粘貼正確的服務器上,從方向#2線。

的幾個注意事項:

  • 我用curl代替wget因爲curl -o將覆蓋現有deploy.sh文件。這樣,我不必擔心wget會下載我最新的deploy.sh.2,並且有人不小心運行之前版本中較早的deploy.sh
  • 我說base deploy.sh,因爲我不必擔心路徑,並在deploy.sh shell腳本上設置可執行位。告訴人們使用bash deploy.sh比指定chmod u+x容易,然後做./deploy.sh

希望這會有所幫助。

順便說一句,這是設計了三個不同的舒適度組

  • 組#1:想登錄到其中部署正在發生的機器,然後選擇特定的建立他們想要部署。這些組按照他們想要手動部署的版本中的DEPLOYMENT_DIRECTIONS.txt文件中的三個步驟進行操作。
  • 組#2:他們仍然希望選擇要部署的構建,但是直接從Jenkins做到這一點很舒服 - 從不登錄到服務器。我使用Promoted Build Plugin來自動化DEPLOYMENT_DIRECTIONS.txt文件中的內容。這很簡單,因爲它只是下載deploy.sh並運行它。
  • 組#3:想要自動部署每個構建。我們只需更改Promoted Build Plugin即可在每次成功構建後運行升級。

希望這會有所幫助。

相關問題