jenkins通过程序创建子节点

Jenkins CLI

Jenkins有一个内置的命令行,允许通过程序或shell请求Jenkins。即Jenkins CLI 

Jenkins CLI 包含:create-node,update-node,create-job,copy-job,offline-node等命令

jenkins-cli.jar包可以通过自己部署的jenkins,http:jenkins.example.com/cli 来下载。

Command create-node

创建节点命令介绍

java -jar jenkins-cli.jar -s http://10.1.0.243:8080/jenkins/ create-node [NODE]
Creates a new node by reading stdin as a XML configuration.
NODE : Name of the node

通过上面命令了解到,该命令需要从输入流获取xml配置文件。而节点的xml文件结构可以参考手工创建节点后在.jenkins下面
/home/user/.jenkins/nodes/xxx/config.xml生成的文件

通过shell来创建节点

创建jenkins-create-node.sh文件,如下

NS_URL = 'http://10.1.0.243:8180/jenkins'
NODE_NAME = $2
NODE_SLAVE_HOME = $1
EXECUTORS =1
SSH_PORT =22
CRED_ID = $3
HOST_NAME = $4
JAVA_OPT = $5
JAVA_PATH = $6

cat <<EOF | java -jar ./jenkins-cli.jar -s ${NS_URL} create-node $2
<slave>
  <name>${NODE_NAME}</name>
  <description></description>
  <remoteFS>$1</remoteFS>
  <numExecutors>${EXECUTORS}</numExecutors>
  <mode>NORMAL</mode>
  <retentionStrategy class="hudson.slaves.RetentionStrategy$Always"/>
  <launcher class="hudson.plugins.sshslaves.SSHLauncher" plugin="[email protected]">
    <host>$4</host>
    <port>${SSH_PORT}</port>
    <credentialsId>${CRED_ID}</credentialsId>
    <jvmOptions>${JAVA_OPT}</jvmOptions>
    <javaPath>${JAVA_PATH}</javaPath>
  </launcher>
  <label></label>
  <nodeProperties/>
  <userId>anonymous</userId>
</slave>
EOF

然后通过sh jenkins-create-node.sh  /home/bossbuild/remote-jenkins_243test  testll  89060efd-e391-4586-bfe7-95d6b74cfb65 10.1.4.82 -Dfile.encoding=gbk /home/bossbuild/jdk1.7.0_45/bin/java 来执行命令

89060efd-e391-4586-bfe7-95d6b74cfb65是jenkins为用户加密后生成的

通过java程序来创建节点

通过process.getOutputStream()来写入xml,因为Process在程序员的角度是OuputStream,对于程序的角度就是STDIN

Process process = Runtime.getRuntime ().exec ( "java -jar ./jenkins-cli.jar -s http://10.1.0.243:8180/jenkins create-node  aaa" );
OutputStream stdin = process.getOutputStream ();
InputStream stdout = process.getInputStream ();
BufferedWriter writer = new BufferedWriter (new OutputStreamWriter (stdin ));
writer.write ( "<slave><name>jobname</name><description></description><remoteFS>/home/bossbuild/remote-jenkins_243test</remoteFS><numExecutors>1</numExecutors><mode>NORMAL</mode><retentionStrategy class='hudson.slaves.RetentionStrategy $A lways'/><launcher class='hudson.plugins.sshslaves.SSHLauncher' plugin='[email protected]'><host>10.1.4.82</host><port>22</port><credentialsId>89060efd-e391-4586-bfe7-95d6b74cfb65</credentialsId><jvmOptions>-Dfile.encoding=gbk</jvmOptions><javaPath>/home/bossbuild/jdk1.7.0_45/bin/java</javaPath></launcher><label></label><nodeProperties/><userId>anonymous</userId></slave>" );
writer.flush ();
writer.close ();

猜你喜欢

转载自blog.csdn.net/qq_33873431/article/details/80348544
今日推荐