热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

持续集成:通过JenkinsAPI创建项目和节点

我在持续集成:JenkinsAPI使用方法详细介绍中介绍了jenkinsAPI的使用方法,比如使用API读取jenkins项目相关信息、触发构建等操作,除此之外,还可以直接使用AP

我在持续集成:Jenkins API使用方法详细介绍中介绍了jenkins API的使用方法,比如使用API读取jenkins项目相关信息、触发构建等操作,除此之外,还可以直接使用API来创建项目、新建节点。


目录



  • 创建slave节点

    • 1. 节点配置文件

    • 2. 创建节点



  • 获取JNLP节点秘钥

  • 创建项目

    • 1. 项目配置文件

    • 2. 创建项目



  • 更新项目


创建slave节点

1. 节点配置文件

要通过jenkins REST API创建节点,需要先准备节点的配置文件,例如Windows节点配置:

{
"name": "win_slave",
"nodeDescription": "192.168.30.100",
"numExecutors": "1",
"remoteFS": "D:\\jenkins",
"labelString": "win_slave",
"mode": "NORMAL",
"": [
"hudson.slaves.JNLPLauncher",
"hudson.slaves.RetentionStrategy$Always"
],
"launcher": {
"stapler-class": "hudson.slaves.JNLPLauncher",
"$class": "hudson.slaves.JNLPLauncher",
"workDirSettings": {
"disabled": false,
"workDirPath": "D:\\jenkins",
"internalDir": "remoting",
"failIfWorkDirIsMissing": false
},
"webSocket": false,
"tunnel": "",
"vmargs": ""
},
"retentionStrategy": {
"stapler-class": "hudson.slaves.RetentionStrategy$Always",
"$class": "hudson.slaves.RetentionStrategy$Always"
},
"nodeProperties": {
"stapler-class-bag": "true"
},
"type": "hudson.slaves.DumbSlave"
}

节点配置文件可使用抓包工具来获取,比如Charles、fiddler等,也可以直接使用浏览器的开发者工具获取,下面演示如何使用Edge浏览器来获取Linux节点的json格式节点配置文件:

1、创建新节点

2、填写配置信息

3、打开浏览器开发人员工具控制台

右键->点击检查,或者F12

4、点击保存

点击保存后,可在控制台中看到doCreateItem这个接口请求:

复制json字段的值即可。

{
"name":"linux_slave",
"nodeDescription":"192.168.30.9",
"numExecutors":"1",
"remoteFS":"/tmp/jenkins_slave",
"labelString":"linux_slave",
"mode":"NORMAL",
"":[
"hudson.plugins.sshslaves.SSHLauncher",
"0"
],
"launcher":{
"oldCommand":"",
"stapler-class":"hudson.plugins.sshslaves.SSHLauncher",
"$class":"hudson.plugins.sshslaves.SSHLauncher",
"host":"192.168.30.9",
"includeUser":"false",
"credentialsId":"f4d8827c-bd25-41e1-93df-2d32248164f3",
"":"2",
"sshHostKeyVerificationStrategy":{
"requireInitialManualTrust":true,
"stapler-class":"hudson.plugins.sshslaves.verifiers.ManuallyTrustedKeyVerificationStrategy",
"$class":"hudson.plugins.sshslaves.verifiers.ManuallyTrustedKeyVerificationStrategy"
},
"port":"22",
"javaPath":"",
"jvmOptions":"",
"prefixStartSlaveCmd":"",
"suffixStartSlaveCmd":"",
"launchTimeoutSeconds":"",
"maxNumRetries":"",
"retryWaitTime":"",
"tcpNoDelay":true,
"workDir":""
},
"retentionStrategy":{
"stapler-class":"hudson.slaves.RetentionStrategy$Always",
"$class":"hudson.slaves.RetentionStrategy$Always"
},
"nodeProperties":{
"stapler-class-bag":"true"
},
"type":"hudson.slaves.DumbSlave",
"Jenkins-Crumb":"c05e26bd59fdfb37897cc2ac20d951f43cf077578eb0dbb255106cab05b9fb2d"
}

2. 创建节点

使用jenkinsAPI创建节点之前,需要生成一个用户的API Token:

下面使用Python的requests库进行接口请求,其它语言类似,下面以添加windows节点为例:

import json
import requests
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
}
with open('win_slave.json', 'r') as load_f:
postdata = json.load(load_f)
url = 'http://admin:11108c1d093a24fcebe11e945de3bcece4@192.168.30.8:8080/computer/doCreateItem?name=win_slave&type=hudson.slaves.DumbSlave'
respOnse= requests.post(url, data=f'json={json.dumps(postdata)}', headers=headers)
assert response.status_code==200

当前jenkins的节点:

执行脚本后可以看到节点win_slave创建成功了:

进入win_slave节点,可看到提示信息:

在节点机上执行命令就可以注册到jenkins了。


获取JNLP节点秘钥

Windows节点通常是通过JNLP(Java Network Launching Protocol )的方式注册到jenkins的,要成功连接需要知道jenkins生成的秘钥,也就是前面启动节点中secret:

echo e001b3fc14e3f3c1278b45fad750361b64d955841b795245adb1b61a013b749f > secret-file
curl -sO http://192.168.30.8:8080/jnlpJars/agent.jar
java -jar agent.jar -jnlpUrl http://192.168.30.8:8080/manage/computer/win%5Fslave/jenkins-agent.jnlp -secret @secret-file -workDir "D:\jenkins"

通过jenkins API创建windows节点之后,我们可以访问jenkins页面来获取这个秘钥,如果想通过接口的方式获取也是可以的。

秘钥信息是存储在jenkins-agent.jnlp文件(或者slave-agent.jnlp)中的,路径为http://192.168.30.8:8080/manage/computer/win_slave/jenkins-agent.jnlp,其实就是上面代理机启动命令中的 jnlpUrl 参数值。

jnlp文件内容如下:

e001b3fc14e3f3c1278b45fad750361b64d955841b795245adb1b61a013b749fwin_slave-workDirD:\jenkins-internalDirremoting-urlhttp://192.168.30.8:8080/

因此,可以通过解析jnlp文件来获取秘钥值。使用curl命令获取:

$ curl -L -s -u admin:11108c1d093a24fcebe11e945de3bcece4 -X GET http://192.168.30.8:8080/manage/computer/win_slave/jenkins-agent.jnlp | sed "s/.*\([a-z0-9]*\).*//"
e001b3fc14e3f3c1278b45fad750361b64d955841b795245adb1b61a013b749f

创建项目

除了手动在jenkins页面创建项目外,也可以使用jenkins API直接创建jenkins项目(job),下面演示pipeline项目的创建步骤。

创建项目的curl命令格式如下:

curl -X POST --USER {username}:{api token} {jenkins URL}/createItem?name={jobName} --header "Content-Type:text/xml" --data-binary @config.xml


  • username:用户名

  • api token:用户API TOKEN

  • jenkins URL:jenkins地址

  • jobName为项目名


1. 项目配置文件

config.xml配置文件就是pipeline项目配置文件,配置文件可通过如下方式获取:



  1. 手动在jenkins创建一个pipeline项目,例如我创建并配置了一个名为pipeline_demo的job。

  2. 访问192.168.30.8:8080/job/pipeline_demo/config.xml,这个就是pipeline_demo的配置文件,保存到本地,然后修改对应内容即可。

配置文件内容如下:












a pipeline demo
false






30 22 * * *






true


false


2. 创建项目

执行如下命令:

$ curl -X POST --USER admin:11108c1d093a24fcebe11e945de3bcece4 http://192.168.30.8:8080/createItem?name=pipeline_demo2 --header "Content-Type:text/xml" --data-binary @pipeline_demo_config.xml
# 或者
$ curl -X POST http://admin:11108c1d093a24fcebe11e945de3bcece4@192.168.30.8:8080/createItem?name=pipeline_demo2 --header "Content-Type:text/xml" --data-binary @pipeline_demo_config.xml

执行完成后访问jenkins可发现创建了一个名为pipeline_demo2的job,配置和配置文件相同:


更新项目

jenkins API能创建job,当然也能更新job,命令如下:

$ curl -X POST --USER admin:11108c1d093a24fcebe11e945de3bcece4 http://192.168.30.8:8080/job/pipeline_demo2/config.xml --header "Content-Type:text/xml" --data-binary @pipeline_demo_config_new.xml

pipeline_demo_config_new.xml为更新之后的配置文件。

--THE END--


其实若真正有才华,运气并不是那么重要。——东野圭吾《解忧杂货店》




推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
HGFHE
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有