Jenkins、Groovy、パイプラインは初めてです。私は次のような単純なパイプラインステージを作成しました:
//working build but not setting env variables
node('build-01') {
stage('Building') {
echo "[*] Starting build (id: ${env.BUILD_ID}) on ${env.JENKINS_URL}"
try {
sh 'ls -l'
//ls shows the damn file
sh '. setup-target'
} catch(all) {
sh "echo 'Failed to run setup-target script with error: ' ${all}"
}
}
}
これは機能します。しかし、このスクリプトを実行しているセッションに環境変数を変更/追加したいと思います(このスクリプトは、正しいシバン行が上にあるbashファイルです)。だから私はしました:
node('build-01') {
withEnv(["CMAKE_INSTALL_DIR=${WORKSPACE}", "SDK_INSTALL_DIR=${WORKSPACE}"]){
stage('Building') {
echo "[*] Starting build (id: ${env.BUILD_ID}) on ${env.JENKINS_URL}"
try {
sh 'ls -l'
//ls shows the damn file
sh '. setup-target'
} catch(all) {
sh "echo 'Failed to run setup-target script with error: ' ${all}"
}
}
}
}
これは次のエラーでエラーになります:
/home/jenkins-sw/ci/workspace/myWorkSpace@tmp/durable-6d30b48d/script.sh:1行目:。:setup-target:ファイルが見つかりません
そして
セットアップターゲットスクリプトの実行に失敗しました:エラー:hudson.AbortException:スクリプトが終了コード1を返しました
しかし、環境変数が設定されているのでsh 'printenv'
、ls -l
線のすぐ下でこれを確認します。興味深いことにls -l
、スクリプトは表示されます。
何が足りないのですか?
以下:
node('build-01') {
withEnv(["CMAKE_INSTALL_DIR=${WORKSPACE}", "SDK_INSTALL_DIR=${WORKSPACE}"]){
stage('Building') {
echo "[*] Starting build (id: ${env.BUILD_ID}) on ${env.JENKINS_URL}"
try {
sh 'ls -l'
//ls shows the damn file
sh './setup-target'
} catch(all) {
sh "echo 'Failed to run setup-target script with error: ' ${all}"
}
}
}
}
結果:
/home/jenkins-sw/ci/workspace/myWorkSpace@tmp/durable-6d30b48d/script.sh:1行目:./ setup-target:アクセスが拒否されました
面白い。withEnvは権限にどのように影響しますか?何?!そして、そのファイルをchmodして権限を持たせると、「ワークスペースがありません」に関連する新しいエラーが発生します。
私はそれを考え出した。ワークスペースに直接クローンを作成してから、ワークスペースも指すように環境変数を設定していました。私はそれらの両方を変更しました。ここで、ワークスペースにdirを作成してクローンを作成し、環境変数をワークスペース内のディレクトリに設定します。そのようです:
node('build-01') {
withEnv(["CMAKE_INSTALL_DIR=${WORKSPACE}/cmake_install", "SDK_INSTALL_DIR=${WORKSPACE}/sdk"]){
stage('Building') {
echo "[*] Starting build (id: ${env.BUILD_ID}) on ${env.JENKINS_URL}"
try {
sh 'ls -l'
//ls shows the damn file
dir('path/to/checkout/') {
sh '. ./setup-target'
}
} catch(all) {
sh "echo 'Failed to run setup-target script with error: ' ${all}"
}
}
}
}
これは機能します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加