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

2023-05-16

我在持续集成: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文件内容如下:

<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项目配置文件,配置文件可通过如下方式获取:

  1. 手动在jenkins创建一个pipeline项目,例如我创建并配置了一个名为pipeline_demo的job。
  2. 访问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 any
    stages {
        stage(&apos;begin&apos;) {
            steps {
                echo &apos;Hello pipeline&apos;
                }
        }
    }
    post {
        always {
            echo &apos;say goodbay&apos;
            }
    }
}</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简单使用


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

持续集成:通过Jenkins API创建项目和节点 的相关文章

  • Debian8.8开发环境(四)个人设置之bashrc

    个人的一些命令在 xff5e bashrc中配置 xff0c 设置的好可以为工作带来极大的方便 xff0c 下面是贴出的个人的一部分设置 xff0c 仅供参考 基本就是使用alias去设置一些快捷的使用方式和查找一些个人的工作目录 span
  • Debian9.4.0win10上双系统U盘安装教程

    一 镜像下载 Debian一直是本人最喜欢的桌面操作系统 xff0c 所以也分享下windows10下双系统安装的过程 xff0c 至于虚拟机安装则就更简单了 xff0c 在此不做赘述 相比虚拟机本人更喜欢完全抛弃win而在linux un
  • win10系统如何开启/安装ubuntu子系统

    注 xff1a 此教程仅对windows 10家庭中文版做过测试 第一步 开启linux子系统选项 控制面板 gt 程序 gt 程序和功能 gt 启用或关闭Windows功能 gt 适用于Linux的Windows子系统 gt 确定 xff
  • maven日常问题

    问题1 jdk配置打包报错问题 maven打包报错如下 dependencyManagement dependencies dependency systemPath span class token keyword for span jd
  • 穿山甲广告对接

    一 清除其他sdk影响 二 接入穿山甲SDK 1 注册登录 广告对接的第三方的穿山甲 需要先在穿山甲注册好自己的账号链接 https www pangle cn 创建项目应用和代码位 xff0c 获取ID 2 导入sdk包 下载SDK ht
  • jdbc连接mysql8.x踩坑

    问题描述 使用jdbc连接数据库报错密码错误 xff0c 提示检查编码 Caused by java sql SQLException Access denied for user 39 root 39 64 39 localhost 39
  • 面向对象一"类与对象"的概念与特性

    面向对象程序设计 Object oriented programming OOP 一 类与对象 类 class 对一类具有相同 属性的对象的 抽象 类的定义包含了数据的形式以及 对数据的操作 对象 object 类的实例 每个对象都是其类中
  • 使用sql语句解析json字符串

    发现当前数据库对字符串的解析都是使用存储过程 xff0c 但是大部分公司不建议使用存过 xff0c 无奈之下写了如下的解析方式 xff1a 原始数据如下图 xff1a 经过数据分析发现 xff0c 每个键值对的分隔符是 34 34 xff0
  • nginx+tomcat负载均衡配置,实现流量切换

    Nginx负载均衡流量切换 实现方法有两种第一步 xff1a 在Servlet配置第二步 xff1a 配置nginx第三步 xff1a 动态配置开发 目前在用的方案是 xff1a 使用Nginx 43 Tomcat配置负载均衡 xff0c
  • 超分辨率相关资源大列表-2

    本文收藏自Github xff0c 仅供学习交流所用 Video Super Resolution A collection of state of the art video or single image super resolutio
  • 12-判断字符串是否以指定字符开头(数据验证)

    StringUtil java package com lh bean public class StringUtil 指定开头的字符串 private String startStr 被判断的字符串 private String str
  • repo init失败的几种解决方法

    试了几天 xff0c 终于解决了同步repo init失败的问题 谨此记录一下 希望对读者有用 由于每个人的情况都不一样 所以我这里会列举我尝试的所有方法 注意repo sync的问题不在本文讨论的范围内 环境说明 xff1a mac xf
  • 分享中国天气网的接口

    http m weather com cn data 101010100 html 注意 xff1a 1 101010100是北京的代号 xff0c 想查询你的城市 xff0c 请看更改城市代号 xff0c 网上百度一大堆 2 不要丢掉 h
  • mybatis的4种分页方式

    原文见 xff1a https blog csdn net chenbaige article details 70846902 今天我们就来进行基于mybatis和MySql进行分页功能的实现 常见的数据分页有哪几种实现 xff1f xf
  • pve模板制作cloud-init

    ubuntu 33 wget http cloud images ubuntu com releases focal release ubuntu 20 04 server cloudimg amd64 img 37 qm create 9
  • vnc viewer最新版,vnc viewer最新版工具有哪些

    现在 市面上有着各种各样的vnc viewer工具 xff0c 在日常工作中 xff0c 你会选择哪一款呢 xff1f 你所了解的vnc viewer最新版工具又有哪些呢 xff1f 今天就和大家聊聊我所了解的超级好用的几款vnc view
  • tableview为空的时候显示空视图

    参考链接 xff1a http stackoverflow com questions 3660313 present a default view instead of tableview if datasource is empty 关
  • QT中textBrowser每行显示不同颜色

    ui gt tbMessage gt append 34 lt font color 61 34 FF0000 34 gt 34 43 strMsg 43 34 lt font gt 34 加上颜色显示之后 xff0c n就没了 这里加上
  • source insight 4.x挂死(win10 21H1)

    问题 点击 34 Add and Remove Project Files 34 在 34 File Name 34 下面的输入框中输入任意内容 Source insight挂死 解决方案 设置 gt 时间和语言 gt 语言 xff0c 如
  • 内核调试小结

    文章目录 1 网络相关1 1 IP地址字符串转 be321 2 打印数值类型的IP地址 2 模块相关2 1 uboot给模块传递参数 1 网络相关 1 1 IP地址字符串转 be32 span class token keyword ext

随机推荐

  • Linux shell常用方法

    目录 1 文件操作1 1 查找文件并执行1 2 hexdump mtd的内容 1 文件操作 1 1 查找文件并执行 span class token function find span span class token builtin c
  • Ubuntu搭建dhcpv4服务器(Kea DHCP Server)

    1 安装kea dhcp服务器 1 1 apt安装 我还没有试过 span class token function sudo span span class token function apt span span class token
  • ubuntu IPv4 pppoe服务器搭建

    1 安装pppoe服务器 sudo apt get install pppoe 2 配置pppoe服务器 1 修改 etc ppp chap secrets xff0c 增加拨号用户名 xff0c 密码 xff1a 增加一行 xff1a 3
  • mac地址老化时间配置

    1 查看老化时间 cat proc sys net ipv4 neigh br0 base reachable time 2 配置老化时间 echo 300 gt proc sys net ipv4 neigh br0 base reach
  • ubuntu 18.04 编译openwrt 18.06

    sudo apt install y gitsudo apt install y makesudo apt install y gcc g 43 43 sudo apt install y libncurses5 devsudo apt i
  • vnc连接树莓派,4步轻松实现vnc连接树莓派

    在使用vnc时 xff0c 作为一个新手小白 xff0c 是不是很苦恼不会vnc连接树莓派 xff1f 没关系 xff0c 之前小编也不会 xff0c 今天看完我这篇文章 xff0c 你一定会有所收获的 xff0c 接下来 xff0c 让我
  • windows10+vs2019下 安装cuda10.1

    已有环境 xff1a windows10专业版 43 vs2019 准备工作 参考链接 xff1a xff08 前言部分 xff09 https www cnblogs com xiamuzi p 13470890 html 1 查看NVI
  • openwrt 18.06修改lan ip之后,自动跳转到新的ip

    feeds luci modules luci base luasrc view footer htm xff0c 强制修改为不需要回滚 xff0c 应该还有更好的方法 uci apply true 43 uci apply false f
  • 开源代码网站集合

    USB ModeSwitch xff1a http www draisberghof de usb modeswitch LWIP xff1a https savannah nongnu org projects lwip cJSON xf
  • adb.exe无法运行,提示0xc000007b错误

    运行android studio xff0c 提示adb server无法运行 xff0c 在命令行下进入C Users Administrator AppData Local Android Sdk platform tools xff0
  • 【Flutter入门到进阶】Dart进阶篇---进阶用法

    1 Dart对象扩展 1 1 extension 1 1 1 介绍 可以在不更改类或创建子类的情况下 xff0c 向类添加扩展功能的一种方式 灵活使用 extension 对基础类进行扩展 xff0c 对开发效率有显著提升 1 1 2 需求
  • 中国天气网API(最新接口)

    一 产品概述 SmartWeatherAPI 接口 简称 SWA 接口 是中国气象局面向 网络媒体 手机厂商 第三方气象服务机构等用户 xff0c 通过 web 方 式提供数据气象服务的官方载体 二 使用说明 该数据主要包括预警 实况 指数
  • MySQL事务:事务隔离

    对数据进行并发操作时 xff0c 事务可以确保数据的完整性 xff0c 在银行 证券交易等业务场景需要用到它 xff0c 本文将介绍MySQL事务是如何保证数据的一致性的 目录 事务特性事务启动与提交事务回滚 什么是事务隔离事务隔离级别 事
  • MySQL锁:全局锁、表级锁和行锁

    事务的实现离不开MySQL数据库的锁机制 xff0c 设计锁的目的也是为了处理并发访问问题 xff0c 本文简单介绍MySQL 里面的全局锁 表级锁和行锁三类锁 目录 全局锁表级锁表锁1 读锁实例2 写锁实例 元数据锁 行锁行锁简介行锁实例
  • Java环境安装配置步骤介绍

    本文记录Windows环境和Linux环境 centos7 安装Java以及Linux环境升级Java JDK版本的步骤 目录 Windows环境安装Java JDK1 下载安装2 配置环境变量 Linux环境安装Java JDK1 下载安
  • Maven 安装和配置方法详解

    通常一个Java项目会引用大量的 jar 包 xff0c 而jar 包之间可能存在各种依赖关系 xff0c 如果运行Java项目时仅使用classpath 参数来管理jar包会非常不方便 xff0c 此外 xff0c 在项目编译 打包 升级
  • MySQL索引介绍

    索引主要是用来提高数据库的查询效率的 xff0c 它对指定的列或列的集合生成索引 xff0c 然后可以通过索引来检索目标数据 xff0c 就像目录一样 xff0c 缩小了扫描范围 xff0c 大大提高了查询效率 如果不使用索引 xff0c
  • 第二、UIScrollView的使用大全

    UIScrollView 原理详解 ScrollView UIScrollView UIScrollView 为了显示多于一个屏幕的内容或者超过你能放在内存中的内容 Scroll View 为你处理缩小放大手势 xff0c UIScroll
  • 持续集成平台Jenkins:docker镜像升级

    Jenkins 2 357 及 LTS 2 361 1之后的版本要求Java 11 或者 17 xff0c 如果使用的是Java 8 xff0c 要升级最新版本的Jenkins xff0c 就需要升级Java JDK版本 xff0c 本文记
  • 持续集成:通过Jenkins API创建项目和节点

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