web-dev-qa-db-ja.com

Jenkins 2.0にチェックアウトと同じディレクトリでshコマンドを実行させるにはどうすればよいですか?

これが私の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を変更するにはどうすればよいですか?

35
Salim Fadhley

アクションをdirブロックで囲むことができます。

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

your new directoryは、実際のディレクトリのプレースホルダーです。デフォルトでは、ワークスペースへの相対パスです。これがエージェントに存在することが確実な場合は、絶対パスを定義できます。

33
Jayan

スクリプトが機能しないのは、 "build.sh"がPATHにないためです。

Jenkinsfileは「sh」スクリプトを実行しています。そのスクリプト全体の内容は文字列build.shです。 スクリプトは「@tmp」ディレクトリにあり、常にそこにあります-「@tmp」ディレクトリは、実行中にJenkinsがJenkinsfileを保持する場所です。

問題を修正するには、行をsh "./build.sh"またはsh "bash build.sh"に変更して、Jenkinsfileのshブロックが実行するbuild.shスクリプトを正しく見つけられるようにします。

13
Keith Mitchell

私は同じ問題を抱えており、ディレクトリが役に立たない、おそらく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"'
}
2

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"
0
Rafael Manzoni