持续集成:通过Jenkins API创建项目和节点
我在持续集成: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 requestsheaders = {'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
文件内容如下:
<jnlp><application-desc><argument>e001b3fc14e3f3c1278b45fad750361b64d955841b795245adb1b61a013b749f</argument><argument>win_slave</argument><argument>-workDir</argument><argument>D:\jenkins</argument><argument>-internalDir</argument><argument>remoting</argument><argument>-url</argument><argument>http://192.168.30.8:8080/</argument></application-desc></jnlp>
因此,可以通过解析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/.*<application-desc><argument>\([a-z0-9]*\).*/\1/"
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项目配置文件,配置文件可通过如下方式获取:
- 手动在jenkins创建一个pipeline项目,例如我创建并配置了一个名为pipeline_demo的job。
- 访问192.168.30.8:8080/job/pipeline_demo/config.xml,这个就是pipeline_demo的配置文件,保存到本地,然后修改对应内容即可。
配置文件内容如下:
<?xml version='1.1' encoding='UTF-8'?>
<flow-definition plugin="workflow-job@1232.v5a_4c994312f1"><actions><org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobAction plugin="pipeline-model-definition@2.2114.v2654ca_721309"/><org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobPropertyTrackerAction plugin="pipeline-model-definition@2.2114.v2654ca_721309"><jobProperties/><triggers/><parameters/><options/></org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobPropertyTrackerAction></actions><description>a pipeline demo</description><keepDependencies>false</keepDependencies><properties><hudson.plugins.jira.JiraProjectProperty plugin="jira@3.8"/><org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty><triggers><hudson.triggers.TimerTrigger><spec>30 22 * * *</spec></hudson.triggers.TimerTrigger></triggers></org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty></properties><definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps@2759.v87459c4eea_ca_"><script>pipeline {agent anystages {stage('begin') {steps {echo 'Hello pipeline'}}}post {always {echo 'say goodbay'}}
}</script><sandbox>true</sandbox></definition><triggers/><disabled>false</disabled>
</flow-definition>
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--
其实若真正有才华,运气并不是那么重要。——东野圭吾《解忧杂货店》
系列文章
1. 持续集成:通过Jenkins API创建项目和节点
2. 持续集成:Jenkins API使用方法详细介绍
3. 持续集成:Jenkins API简单使用
持续集成:通过Jenkins API创建项目和节点相关推荐
- DevOps-2:持续集成工具Jenkins构建.Net项目
本文介绍,如何使用Jenkins构建.Net项目. 环境配置 安装MsBuild编译工具 1.下载工具 下载地址:https://visualstudio.microsoft.com/zh-hans/ ...
- Jenkins——持续集成及Jenkins介绍和安装配置(插件,用户权限,凭据,Maven安装打包,配置tomcat用户权限)
持续集成及Jenkins介绍和安装配置 持续集成及Jenkins介绍 软件开发生命周期 持续集成 持续集成的组成要素 持续集成的好处 Jenkins介绍 Jenkins安装和持续集成环境配置 Gitl ...
- python 持续集成工具_持续集成工具: Jenkins学习
持续集成工具: Jenkins学习 -- 部分内容收集自网络,如有侵权,请联系作者删除 一. 概念 在过去的开发整体流程中,是所有人写好代码之后统一进行合并(svn,git),然后进行测试,确保准发布 ...
- 老李分享:持续集成学好jenkins之Git和Maven配置
老李分享:持续集成学好jenkins之Git和Maven配置 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请 ...
- 微服务容器部署与持续集成(Jenkins)
微服务容器部署与持续集成(Jenkins) 一.微服务容器部署 1.Dockerfile 1.1 Dockerfile简介 1.2 使用脚本创建镜像 2.Docker私有仓库 2.1 私有仓库搭建与配 ...
- 持续集成:Jenkins邮件通知配置方法介绍
Jenkins的邮件提醒功能主要通过Email Extension插件来实现,它是对Mailer Plugin的扩展,我在持续集成平台Jenkins配置方法介绍中简要介绍了Jenkins的邮件配置方法 ...
- 持续集成平台Jenkins配置方法介绍
持续集成(Continuous integration,CI)是软件开发和发布流程中最重要的组成部分,有利于加快开发进度.Jenkins是常用的持续集成管理工具,本文将简要介绍Jenkins持续集成工 ...
- 【云原生 • DevOps】一文掌握持续集成工具 Jenkins
目录 一.持续集成工具 Jenkins 介绍 1. 什么是持续集成 2. Jenkins 介绍 二.Jenkins 的安装与部署 1. 安装 Jenkins 2. 本地访问 Jenkins 3. 插件 ...
- 持续集成工具Jenkins学习4 Idea集成Jenkins插件
持续集成工具Jenkins学习4 Idea集成Jenkins插件 一.功能简介 二.安装Idea插件 1. 搜索安装 2. 设置 三.Jenkins开启CSRF 四.使用 一.功能简介 Idea可以方 ...
最新文章
- C语言做一个通讯录程序(在console里面运行)
- 【勉强采用】反欺诈四大手段一秒get
- mysql dba系统学习(20)mysql存储引擎MyISAM
- 页游开发_小花仙即将出手游,敬童年一起玩过的7K7K和4399
- ubuntu20配置阿里源简单粗暴的方法
- 分布式消息系统Kafka初步
- 线上BUG定位神器(阿尔萨斯)-Arthas2019-0801
- SaaS CRM系统存在的五大安全漏洞
- ArcSDE工作机制
- c语言常用单词表格,C语言常用单词
- elasticsearch实现搜索拼音然后高亮内容
- windows10启动项修复||an operating system wasn't found解决办法
- android绘制一个圆,点哪画哪,走哪动哪
- Google确认Chrome存在严重漏洞,向20亿用户发出警告:你们需立即更新浏览器
- win10系统编辑服务器在哪里设置密码,技术编辑处置win10系统忘记登录密码的设置技巧...
- setEnable和setClickable区别
- 一句话理解:谐振腔工作原理
- Huawei EROFS 初探
- 在C语言程序中 当调用函数时,c语言程序设计第2版) 教学课件 作者 梅创社试题库 期末试卷一.docx...
- 关于matlab求含有nan矩阵的均值
热门文章
- 使用NanoHttpd在Android上实现HttpServer
- NanoHttpd Demo是个好东西
- ubuntu14.04 iso硬盘安装
- Day 24 - 设定开发帐号 HBuilder X - DCloud 注册
- python中list的运算_使用Python列表实现向量运算
- Elasticsearch:理解 Master,Elections,Quorum 及 脑裂
- c/c++: window下安装mingw-w64
- CSS Display与Visibility区别和用法
- 弹出表情气泡仿魔兽的技能冷效果却实现
- java面向对象实验结论及心得_20162305 实验二 Java面向对象程序设计 实验报告