Jenkinsのグローバル環境変数をジョブから変更する
EnvInject Pluginなんかはジョブ中の環境変数しか変えてくれません。
一方いろいろな理由でグローバルな環境変数を変更したいよーということがあります。
そういう時のやりかた
やりかた
- 以下のコードをPipelineジョブで貼り付けます。
- 環境変数名をKey,値をValueとしてパラメータを追加します。
- 適当な値で実行してIn-process Script Approvalのメソッドの実行を許可しまくります。(もしくはSandboxを外します。)
- おしまい
import jenkins.model.*
import hudson.model.*
import hudson.slaves.*
instance = Jenkins.getInstance()
env_key = Key
env_value = Value
props = instance.getGlobalNodeProperties().getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
if(props.empty) {
def entry = new EnvironmentVariablesNodeProperty.Entry(env_key, env_value)
def evnp = new EnvironmentVariablesNodeProperty(entry)
instance.getGlobalNodeProperties().add(evnp)
} else {
for (prop in props) {
prop.envVars.put(env_key, env_value)
}
}
instance.save()
ただ、jenkinsさん的にはセキュリティ的にちょっと触ってほしくないクラス触ってるので別の方法ないかなーとは思いました。
参考