2016-07-01 73 views
14

這裏是我的詹金斯2.x的管道:如何讓Jenkins 2.0在結帳的同一目錄下執行sh命令?

node ('master'){ 
    stage 'Checkout' 
    checkout scm 
    stage "Build Pex" 
    sh('build.sh') 
} 

當我跑這條管道結賬放碼成按預期工作區,但是,而不是希望找到工作區/腳本(這是真的存在! ),它看起來在一個不相關的目錄中:workspace @ tmp/durable-d812f509。

Entering stage Build Pex 
Proceeding 
[Pipeline] sh 
[workspace] Running shell script 
+ build.sh 
/home/conmonsysdev/deployments/jenkins_ci_2016_interns/jenkins_home/jobs/pex/branches/master/[email protected]/durable-d812f509/script.sh: line 2: build.sh: command not found 

我該如何修改這個Jenkinsfile,以便在與檢出項目源代碼的位置完全相同的目錄中執行build.sh?

+0

這真的是你的完整的管道?或者你有多個「節點」塊? – StephenKing

+1

現在,這就是一切。這是顯示錯誤的最小管道。 –

回答

19

您可以在dir區塊附上您的操作。

checkout scm 
stage "Build Pex" 
dir ('your new directory') { 
    sh('build.sh') 
} 
... 

your new directory是佔位符的實際目錄。默認情況下,它是工作區的相對路徑。您可以定義絕對路徑,如果您確定它存在於代理上。

+0

'你的新目錄'代表什麼?它是一個佔位符嗎? –

+1

Doen't爲我工作:-(我在哪裏必須把shellcript?現在它在我的git repo的根目錄。我試圖將它移動到一個子目錄'buildscripts',然後使用'dir('buildscripts '){}'但是沒有運氣 –

+0

@ Bastian Voigt:您可能需要一個新的問題 – Jayan

1

我有同樣的問題,dir沒有幫助,可能是因爲我在tmp目錄本身的子目錄內工作(因爲這裏沒有相關的理由)。我的代碼看起來像這樣

dir(srcDir){ 
    sh 'pwd; la -l; jenkins.sh "build.sh"' 
} 

(只是用於調試添加的pwdla -l報表存在問題W/O他們。)有了他們,我得到的輸出,如:

+ pwd 
/jenkins/workspace/[email protected]/repos/2 
+ ls -l 
total 72 
-rw-r--r-- 1 jenkins jenkins 394 May 19 12:20 README.md 
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 api-automation 
-rwxr-xr-x 1 jenkins jenkins 174 May 19 12:20 build-it.sh 
-rwxr-xr-x 1 jenkins jenkins 433 May 19 12:20 build-release.sh 
-rwxr-xr-x 1 jenkins jenkins 322 May 19 12:20 build.sh 
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 ix-core 
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 ix-java-client 
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 ix-rest-models 
drwxr-xr-x 4 jenkins jenkins 4096 May 19 12:20 ix-service 
drwxr-xr-x 7 jenkins jenkins 4096 May 19 12:20 ixternal 
drwxr-xr-x 5 jenkins jenkins 4096 May 19 12:20 ixtraneous-stuff 
-rwxr-xr-x 1 jenkins jenkins 472 May 19 12:20 jenkins.sh 
-rw-r--r-- 1 jenkins jenkins 16847 May 19 12:20 pom.xml 
+ jenkins.sh build.sh 
/home/jenkins/workspace/[email protected]/repos/[email protected]/durable-a3ec0501/script.sh: line 2: jenkins.sh: command not found 

我最終這樣做:

dir(srcDir){ 
    sh 'cdr=$(pwd); $cdr/jenkins.sh "build.sh"' 
} 
6

你的腳本不工作的原因是因爲「build.sh」不在你的PATH中。

Jenkinsfile正在運行一個「sh」腳本,其全部內容是字符串build.sh父級腳本位於「@tmp」目錄中,並且將始終存在 - 「@tmp」目錄是Jenkins在運行期間保留Jenkinsfile的地方。

要解決該問題,改變你的行sh "./build.sh"sh "bash build.sh",所以,在Jenkinsfile的sh塊可以被正確定位要執行build.sh腳本。

0

詹金斯創建一個文件夾時,它使一個克隆你的項目是這樣的:

的/ var/lib中/詹金斯/工作區/ 作業名 @Script

對於這個工作,你必須設置如果您處於Linux環境中,則該文件爲可執行文件,然後調用shell腳本。

事情是這樣的:

// Permission to execute 
sh "chmod +x -R ${env.WORKSPACE}/../${env.JOB_NAME}@script" 

// Call SH 
sh "${env.WORKSPACE}/../${env.JOB_NAME}@script/script.sh" 
相關問題