JenkinsでDSLパイプラインを使用しようとしています。プロジェクト名をスクリプトの一部として使用できたらいいと思いました。
git credentialsId: 'ffffffff-ffff-ffff-ffff-ffffffffffffff',\
url: "${repo_root}/${JOB_NAME}.git"
エラーが表示されます:
groovy.lang.MissingPropertyException: \
No such property: JOB_NAME for class: groovy.lang.Binding
これらの指示 に従い、変数の1つとしてJOB_NAME
に言及していると思いました。
私は試してみることにしました:
sh 'env'
私のDSLで、これは印刷されます:
JOB_NAME = foo-bar
それは私が期待していることです。
別の ブログの言及 :
環境変数の使用法
その価値を得るには2つの方法があります。起動時に-D=
から渡されるプロパティは、GroovyのJavaとの強力な関係のおかげで、System.getProperty("key")
と読むことができました。Javaの方法で通常の環境変数を読み取ることは、
System.getenv("VARIABLE")
...です。
これを試してみましょう:
println "JOB_NAME = " + System.getenv('JOB_NAME');
今、私は得る:
Java.lang.NullPointerException: Cannot get property 'System' on null object
ヌルオブジェクト?しかし、JOB_NAME
は環境変数であることがわかります!
Pipelineジョブで$JOB_NAME
をDSLスクリプトに読み込むにはどうすればよいですか。私はパイプラインの仕事をしようとしていますが、それが機能するようになると、これがJenkinsfile
を持つマルチブランチパイプラインになります。
すべての環境変数は、env
を使用してアクセスできます。 ${env.JOB_NAME}
。
さて、これは今日、私を本当に困らせました。最終的に、私はいくつかのことでやられていました:
env.JOB_NAME
を実行するだけで済みます。このSOの質問は、コードを解読するのに役立ちました: Jenkins Workflow Checkout Accessing BRANCH_NAME and GIT_COMMIT
実際、${env.JOB_NAME}
を使用して既知の変数にアクセスします。
ただし、名前が別の変数によって指定されている環境変数にアクセスする必要がある場合(動的アクセス)、env["your-env-variable"]
を使用します。
3つの環境変数(Jenkins -> Administer -> Configure System -> Environment variables
)を構成したときに問題が発生しました。それらにENV_VAR_1
、ENV_VAR_2
、ENV_VAR_3
という名前を付けましょう。今、私はそれらに動的にアクセスしたい、私はそのようにすることができます:
def envVarName = "ENV_VAR_" + count // Suppose count is initialized in a loop somewhere above...
def value = env[envVarName] // Will be resolved to env["ENV_VAR_1"] depending on count value
Jenkins構成の私の環境変数は次のようになります:
これが機能しないという問題がありました。グローバルに設定されたプロパティ/環境変数は、node
ステップ内でのみ使用できました。 Pipelineプラグインのバージョン2.4のバグです。この問題に直面した場合、2.5にアップグレードすると、スクリプト内のどこからでもグローバルプロパティを使用できます。私はこれをJenkins wikiに投稿しました here 私が使用したテストスクリプトと共に。