2016-07-01 26 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" 
相关问题