web-dev-qa-db-ja.com

Jenkinsパイプライン:シェルスクリプトの実行

以下のようなパイプラインを作成しました。Jenkinsfileが存在するソースコードリポジトリに「backup_grafana.sh」と「gitPush.sh」というスクリプトファイルがあることに注意してください。しかし、次のエラーのためにスクリプトを実行できません:-

/home/jenkins/workspace/grafana-backup@tmp/durable-52495dad/script.sh: 
line 1: backup_grafana.sh: not found

ポッド内のkubernetesでjenkinsマスターを実行していることに注意してください。そのため、ポッドが破棄されて動的に再作成される可能性があるため、エラーで示されているようにスクリプトファイルをコピーすることはできません(この場合、新しいポッドを使用すると、スクリプトはjenkinsマスターで使用できなくなります)

pipeline {
agent {
    node {
        label 'jenkins-slave-python2.7'
    }
}
stages {
    stage('Take the grafana backup') {
        steps {
            sh 'backup_grafana.sh'
        }
    }
    stage('Push to the grafana-backup submodule repository') {
        steps {
            sh 'gitPush.sh'
        }
    }
 }
}

Jenkinsfileでこれらのスクリプトを実行する方法を提案できますか?また、これらのスクリプトを、すでに細かく作成したpythonスレーブで実行したいことにも言及したいと思います。

3
Suhas Chikkanna

コマンド 'sh backup_grafana.sh'が実際に正常に実行されるべきときに実行に失敗した場合、2つの可能な解決策があります。

1)シェルにそれらがどこにあるかを伝えるために、これらの実行可能コマンドの前にドットスラッシュが必要な場合があります。それらが$PATHにない場合は、現在のディレクトリにあることをシェルに通知する必要があります。これは、4つの非空白文字が追加された修正済みのJenkinsfileです。

pipeline {
  agent {
    node {
      label 'jenkins-slave-python2.7'
    }
  }
  stages {
    stage('Take the grafana backup') {
      steps {
        sh './backup_grafana.sh'
      }
    }
    stage('Push to the grafana-backup submodule repository') {
      steps {
        sh './gitPush.sh'
      }
    }
  }
}

2)スクリプトの最初の行として次のいずれかを宣言することにより、ファイルをbashまたはshスクリプトとして宣言したかどうかを確認します。

#!/bin/bash 

または

#!/bin/sh
3
burnettk