web-dev-qa-db-ja.com

Jenkinsスレーブ-環境変数を追加または更新する方法

Jenkins Rest/APIまたはその他の方法を使用して、Jenkinsスレーブの構成でENVIRONMENT変数を追加または更新する方法を誰かが試しましたか?.

Jenkins Swarmプラグインを使用してスレーブを作成し(JLNPを使用してJenkinsマスターに接続します)、ENVIRONMENT変数(チェックボックスはチェックされていません)とSwarmクライアントjarによって作成されたENVIRONMENT変数はありません(デフォルト)。ユーザーは手動でreqdを追加できますが、スレーブでENV変数を追加/更新する方法があるかどうかを探しています。

enter image description here

複数のスウォームスレーブを作成したい(各スレーブに異なる値を持つ異なるツール、つまりslave01 Java_HOME =/path/jdk1.7.0.67と他のslave02 Java_HOME =/path/jdk1.8.0_45などがある)。

http://javadoc.jenkins-ci.org/hudson/model/Node.html または http://javadoc.jenkins-ci.org/hudson/modelを調べてみました/Slave.html または http://javadoc.jenkins-ci.org/hudson/slaves/DumbSlave.htmlbutNodeのプロパティ/ ENV変数を設定するメソッド/方法は提供されません。 setNodePropertiesやそのようなものはありません(それがENV変数/プロパティを設定する正しい方法である場合)。

私が探しているのは、次の変数をスレーブに追加する方法です。

enter image description here

この投稿(Villiamによる)は、誰かが同じことをするためにグルーヴィーな部分を試したことを反映していますが、同じようにしてENV変数を設定する方法がわかりません API to Create /ノードの管理

Jenkins-CLIには、groovyスクリプトを実行するオプションがあります:

Java -jar path/to/jenkins-cli.jar -s http://localhost:8080 groovy path/to/script

script:

import jenkins.model.*
import hudson.model.*
import hudson.slaves.*
Jenkins.instance.addNode(new DumbSlave("test-script","test slave description","C:\\Jenkins","1",Node.Mode.NORMAL,"test-slave-label",new JNLPLauncher(),new RetentionStrategy.Always(),new LinkedList())) 

(他のオプションについてはドキュメントを参照してください: http://javadoc.jenkins-ci.org/

インタラクティブなGroovy Shellを実行することもできます

Java -jar jenkins-cli.jar -s http://localhost:8080 groovysh

8
Arun Sangal

「環境変数」チェックボックスがチェックされていない場合に機能するメソッドは、nodeProperties.add(new EnvironmentVariablesNodeProperty)を使用することです

デプロイ時にJenkinsで環境変数を設定するために使用している完全なスクリプトは次のとおりです(jenkins-cli.jarで呼び出されることを意図しています):

import jenkins.model.*
import hudson.model.*
import hudson.slaves.*

String node_name = args[0]
String env_key = args[1]
String env_value = args[2]

instance = Jenkins.getInstance()
if (node_name == "master") {
  node = instance
} else {
  instance.getNode(node_name)
}
props = node.nodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)

if(props.empty) {
  def entry = new EnvironmentVariablesNodeProperty.Entry(env_key, env_value)
  def evnp = new EnvironmentVariablesNodeProperty(entry)
  node.nodeProperties.add(evnp)
} else {
  for (prop in props) {
    prop.envVars.put(env_key, env_value)
  }
}

instance.save()
3
laffoyb

ノードを作成するときに、最後のパラメーターとして変数を渡すことができます。

import jenkins.model.*
import hudson.model.*
import hudson.slaves.*

entry = new EnvironmentVariablesNodeProperty(new EnvironmentVariablesNodeProperty.Entry("MY_NAME", "my_value"))

list = new LinkedList()
list.add(entry)

Jenkins.instance.addNode(new DumbSlave("test-slave", "test slave description", "C:\\Jenkins", "1", Node.Mode.NORMAL, "test-slave-label", new JNLPLauncher(), new RetentionStrategy.Always(), list))

DumbSlave here およびEnvironmentVariablesNodeProperty here から。

既存のスレーブに変数を追加するには、以下を使用できます。

import jenkins.model.*
import hudson.model.*
import hudson.slaves.*

jenkins = Jenkins.instance
node = jenkins.getNode('test-slave')

props = node.nodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
for (prop in props) {
  prop.envVars.put("MY_OTHER_NAME", "my_other_value")
}
jenkins.save()
3
Allan

私の答えは他の答えのちょっとしたマッシュマッシュのようですが、それがオフの場合、「環境変数」がオンになります。

public class KeyValuePair {
    String key
    String value
}

...

KeyValuePair[] environmentVariables = [...]

...

import hudson.slaves.EnvironmentVariablesNodeProperty

Jenkins jenkins = Jenkins.instance

List<EnvironmentVariablesNodeProperty> nodeProperties = jenkins.globalNodeProperties.getAll(EnvironmentVariablesNodeProperty.class)

if (nodeProperties.empty) { // Enable 'Environment variables' under 'Global properties'
    jenkins.globalNodeProperties.add(new EnvironmentVariablesNodeProperty())
    nodeProperties = jenkins.globalNodeProperties.getAll(EnvironmentVariablesNodeProperty.class)
}

for (int nodePropertyIndex = 0; nodePropertyIndex < nodeProperties.size(); nodePropertyIndex++) {
    EnvironmentVariablesNodeProperty nodeProperty = nodeProperties[nodePropertyIndex]
    for (int environmentVariableIndex = 0; environmentVariableIndex < environmentVariables.size(); environmentVariableIndex++) {
        KeyValuePair environmentVariable = environmentVariables[environmentVariableIndex]
        nodeProperty.envVars.put(environmentVariable.key, environmentVariable.value)
    }
}

jenkins.save()
1
Daniel