これが私のJenkins 2.xパイプラインです。
node ('master'){
stage 'Checkout'
checkout scm
stage "Build Pex"
sh('build.sh')
}
このパイプラインを実行すると、チェックアウトによりコードがワークスペースに期待どおりに配置されますが、workspace /(実際にあります!)でスクリプトを見つけるのではなく、無関係なディレクトリ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/workspace@tmp/durable-d812f509/script.sh: line 2: build.sh: command not found
プロジェクトのソースコードをチェックアウトしたディレクトリとまったく同じディレクトリでbuild.shが実行されるように、このJenkinsfileを変更するにはどうすればよいですか?
アクションをdir
ブロックで囲むことができます。
checkout scm
stage "Build Pex"
dir ('your new directory') {
sh('build.sh')
}
...
your new directory
は、実際のディレクトリのプレースホルダーです。デフォルトでは、ワークスペースへの相対パスです。これがエージェントに存在することが確実な場合は、絶対パスを定義できます。
スクリプトが機能しないのは、 "build.sh"がPATHにないためです。
Jenkinsfileは「sh」スクリプトを実行しています。そのスクリプト全体の内容は文字列build.sh
です。 親スクリプトは「@tmp」ディレクトリにあり、常にそこにあります-「@tmp」ディレクトリは、実行中にJenkinsがJenkinsfileを保持する場所です。
問題を修正するには、行をsh "./build.sh"
またはsh "bash build.sh"
に変更して、Jenkinsfileのsh
ブロックが実行するbuild.sh
スクリプトを正しく見つけられるようにします。
私は同じ問題を抱えており、ディレクトリが役に立たない、おそらくtmpディレクトリ自体のサブディレクトリ内で作業しているためです(ここでは密接な関係はありません)。私のコードはこんな感じ
dir(srcDir){
sh 'pwd; la -l; jenkins.sh "build.sh"'
}
(pwd
およびla -l
ステートメントはデバッグのために追加されました。それらの問題は存在しません。)それらを使用すると、次のような出力が得られます。
+ pwd
/jenkins/workspace/aws-perf-test@tmp/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/aws-perf-test@tmp/repos/2@tmp/durable-a3ec0501/script.sh: line 2: jenkins.sh: command not found
私は最終的にこれをやった:
dir(srcDir){
sh 'cdr=$(pwd); $cdr/jenkins.sh "build.sh"'
}
Jenkinsは、次のようにプロジェクトからクローンを作成するときにフォルダーを作成します。
/ var/lib/jenkins/workspace/ジョブ名 @ script
これが機能するためには、Linux環境にいる場合、ファイルを実行可能ファイルとして設定し、シェルスクリプトを呼び出す必要があります。
このようなもの:
// Permission to execute
sh "chmod +x -R ${env.WORKSPACE}/../${env.JOB_NAME}@script"
// Call SH
sh "${env.WORKSPACE}/../${env.JOB_NAME}@script/script.sh"