詹金斯可以存儲工件對於每個構建(但是我可以從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
我可以使用wget
或curl
拉下這件神器。
您也可以決定(如果您正在使用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即可在每次成功構建後運行升級。
希望這會有所幫助。