Jnekins Active动态参数 集成Gitlab实践

news2024/11/25 7:03:28

参数化构建这里可以添加选项参数,一些字符串的参数,非常的多。这些参数在流水线执行的时候,它会加入到流水线里面去,最终在流水线运行的时候调用这些参数,选完参数之后再去构建。

写一段groovy脚本,然后返回一个列表,其实也就是数组,之后就可以展示出来了。

所以上面就两种类型,一种是普通类型,一种是带有动作的。最终可以看到参数是需要去写脚本的。

这里面有三种类型,使用前面两种就足够了,都是动态类型的选项参数,都支持去运行一组脚本。

这里面写怎么样复杂的groovy脚本都是可以的,最终你将选项返回出来就可以了。

上面就是普通类型的,还有动态类型的。 还支持是否多选,单选。

动态类型还支持选择参数值,这里可以写关联参数的名称。在这里定义好了之后就可以在代码里面去引用它了。(动态类型根据普通类型的值变化而变化

如果选ant gradle都没有反应,如果选maven就动态选择了。

if (buildTools .equals("maven")){
  return ["mvn clean"]
}else if (buildTools.equals("ant")){
  return ["ant"]
}else{
 return ["gradle"]
}

 

实践


Branches API | GitLab

下面要完成实践,比如要选分支还是选tag,然后自动的将gitlab上面的标签拿下来。

其实最后的效果就是选择tag,那么就列出该项目下面所有的tag,选择branch就列出该项目下面的所有的branch。

接下来要调用gitlab的api接口了。  

现在就是准备调用接口拿到项目的分支信息。

要调用api,那么第一步就需要去获取token。

拿到token之后,然后去gitlab看看接口如何调用。

Branches API | GitLab     找到api的分支,这里还有project_id

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/repository/branches"

[root@jenkins ~]# curl --header "PRIVATE-TOKEN: gL8YqsRqzmjfnZ34N7UR" "http://192.168.11.129/api/v4/projects/2/repository/branches"

[{"name":"master","commit":{"id":"45adcfde1668ea88ec76390b5298122bb175b5d5","short_id":"45adcfde","created_at":"2022-10-21T12:11:38.000+08:00","parent_ids":null,"title":"Update src/org/devops/test.groovy","message":"Update src/org/devops/test.groovy","author_name":"Administrator","author_email":"admin@example.com","authored_date":"2022-10-21T12:11:38.000+08:00","committer_name":"Administrator","committer_email":"admin@example.com","committed_date":"2022-10-21T12:11:38.000+08:00","web_url":"http://gitlab.devops.com/root/devops-library/-/commit/45adcfde1668ea88ec76390b5298122bb175b5d5"},"merged":false,"protected":true,"developers_can_push":false,"developers_can_merge":false,"can_push":true,"default":true,"web_url":"http://gitlab.devops.com/root/devops-library/-/tree/master"}][root@jenkins ~]# 

上面就是通过curl或者postman去获取了项目的所有分支信息。后面就是用groovy写一个HTTP请求,然后放到Jenkins作业里面。

header里面要有key和value,所以在postman里面要加上header的信息。

这里使用url去发请求,发请求这里基本上就是设置method,选择请求的类型。之后设置请求头,也就是header里面的信息。最后将请求的信息返回。

返回的是json的map,最后就是去过滤数据就行了。

[
    {
        "name": "master",
        "commit": {
            "id": "45adcfde1668ea88ec76390b5298122bb175b5d5",
            "short_id": "45adcfde",
            "created_at": "2022-10-21T12:11:38.000+08:00",
            "parent_ids": null,
            "title": "Update src/org/devops/test.groovy",
            "message": "Update src/org/devops/test.groovy",
            "author_name": "Administrator",
            "author_email": "admin@example.com",
            "authored_date": "2022-10-21T12:11:38.000+08:00",
            "committer_name": "Administrator",
            "committer_email": "admin@example.com",
            "committed_date": "2022-10-21T12:11:38.000+08:00",
            "web_url": "http://gitlab.devops.com/root/devops-library/-/commit/45adcfde1668ea88ec76390b5298122bb175b5d5"
        },
        "merged": false,
        "protected": true,
        "developers_can_push": false,
        "developers_can_merge": false,
        "can_push": true,
        "default": true,
        "web_url": "http://gitlab.devops.com/root/devops-library/-/tree/master"
    },
    {
        "name": "release-1.1.1",
        "commit": {
            "id": "45adcfde1668ea88ec76390b5298122bb175b5d5",
            "short_id": "45adcfde",
            "created_at": "2022-10-21T12:11:38.000+08:00",
            "parent_ids": null,
            "title": "Update src/org/devops/test.groovy",
            "message": "Update src/org/devops/test.groovy",
            "author_name": "Administrator",
            "author_email": "admin@example.com",
            "authored_date": "2022-10-21T12:11:38.000+08:00",
            "committer_name": "Administrator",
            "committer_email": "admin@example.com",
            "committed_date": "2022-10-21T12:11:38.000+08:00",
            "web_url": "http://gitlab.devops.com/root/devops-library/-/commit/45adcfde1668ea88ec76390b5298122bb175b5d5"
        },
        "merged": false,
        "protected": false,
        "developers_can_push": false,
        "developers_can_merge": false,
        "can_push": true,
        "default": false,
        "web_url": "http://gitlab.devops.com/root/devops-library/-/tree/release-1.1.1"
    }
]

response.name是一个list对象。

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                script{
                    response = sh  returnStdout: true, 
                    script: """
                    curl --location \
                        --request GET \
                        "http://192.168.11.129/api/v4/projects/2/repository/branches" \
                        --header "PRIVATE-TOKEN: gL8YqsRqzmjfnZ34N7UR"
                    """
                    println(response)
                    response = readJSON text: "${response}"
                    println(response.name)
                }
            }
        }
    }
}




+ curl --location --request GET http://192.168.11.129/api/v4/projects/2/repository/branches --header 'PRIVATE-TOKEN: gL8YqsRqzmjfnZ34N7UR'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  1583  100  1583    0     0  21052      0 --:--:-- --:--:-- --:--:-- 21391
[Pipeline] echo
[{"name":"master","commit":{"id":"45adcfde1668ea88ec76390b5298122bb175b5d5","short_id":"45adcfde","created_at":"2022-10-21T12:11:38.000+08:00","parent_ids":null,"title":"Update src/org/devops/test.groovy","message":"Update src/org/devops/test.groovy","author_name":"Administrator","author_email":"admin@example.com","authored_date":"2022-10-21T12:11:38.000+08:00","committer_name":"Administrator","committer_email":"admin@example.com","committed_date":"2022-10-21T12:11:38.000+08:00","web_url":"http://gitlab.devops.com/root/devops-library/-/commit/45adcfde1668ea88ec76390b5298122bb175b5d5"},"merged":false,"protected":true,"developers_can_push":false,"developers_can_merge":false,"can_push":true,"default":true,"web_url":"http://gitlab.devops.com/root/devops-library/-/tree/master"},{"name":"release-1.1.1","commit":{"id":"45adcfde1668ea88ec76390b5298122bb175b5d5","short_id":"45adcfde","created_at":"2022-10-21T12:11:38.000+08:00","parent_ids":null,"title":"Update src/org/devops/test.groovy","message":"Update src/org/devops/test.groovy","author_name":"Administrator","author_email":"admin@example.com","authored_date":"2022-10-21T12:11:38.000+08:00","committer_name":"Administrator","committer_email":"admin@example.com","committed_date":"2022-10-21T12:11:38.000+08:00","web_url":"http://gitlab.devops.com/root/devops-library/-/commit/45adcfde1668ea88ec76390b5298122bb175b5d5"},"merged":false,"protected":false,"developers_can_push":false,"developers_can_merge":false,"can_push":true,"default":false,"web_url":"http://gitlab.devops.com/root/devops-library/-/tree/release-1.1.1"}]
[Pipeline] echo
------------------------------
[Pipeline] readJSON
[Pipeline] echo
[master, release-1.1.1]
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

最后或者你这样写也行,导入类,写成groovy脚本。

这样就可以将分支拿过去了,tag同理。

Jenkins其实本身就是Java包,里面也可以调用其现成的方法。token的值,怎么保存在Jenkins里面以及如何使用如下:

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                script{
                      withCredentials([string(credentialsId: '81605426-8e30-4220-b421-0d2bfdfbe880', variable: 'token')]) {
                            response = sh  returnStdout: true, 
                            script: """
                            curl --location \
                                --request GET \
                                "http://192.168.11.129/api/v4/projects/2/repository/branches" \
                                --header "PRIVATE-TOKEN: ${token}"
                            """
                                 }
                                response = readJSON text: "${response}"
                                println(response.name)
                }
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/65240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二分查找算法【包括数组全局有序和局部有序的介绍,以及求局部最小值】

二分查找算法 二分查找要点&#xff1a;有序&#xff0c;但是一定全局有序吗&#xff1f;> 不一定需要全局有序 全局有序概念 一个有序的数组&#xff0c;通过找到 L 和 R 的中点值 &#xff0c;与目标值比较&#xff0c;来排除一半错误的信息 时间负责度计算 32 16 8 …

Codeforces Round #787 (Div. 3) F. Vlad and Unfinished Business

翻译&#xff1a; Vlad和Nastya住在一个由&#x1d45b;房子和&#x1d45b;−1路组成的城市。从每一个房子&#xff0c;你只需要沿着路走就可以到达另一个。也就是说&#xff0c;城市是一棵树。 弗拉德住在索引为&#x1d465;的房子里&#xff0c;娜斯提亚住在索引为&#…

[附源码]Python计算机毕业设计SSM交通事故记录信息管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

「Redis数据结构」字符串对象String

「Redis数据结构」字符串对象String 文章目录「Redis数据结构」字符串对象String一、概述二、编码分类intembstrrow三、小结四、参考一、概述 字符串数据类型是Redis里最常用的类型&#xff0c;它的键和值都是字符串&#xff0c;使用起来非常的方便。虽然字符串数据类型的值都…

BUG系列路径规划算法原理介绍(一)——总结篇

本系列文章主要对Bug类路径规划算法的原理进行介绍&#xff0c;在本系列的第一篇文章中按照时间顺序梳理了自1986年至2018年Bug类路径规划算法的发展&#xff0c;整理了13种BUG系列中的典型算法&#xff0c;从本系列的第二篇文章开始依次详细介绍了其中具有代表性的BUG1、BUG2、…

【论文合集】2022年11月医学影像期刊论文合集

★ 本月IEEE Transactions on Medical Imaging(1区 top if 11.037) 共41篇, Medical Image Analysis&#xff08;1区 top if 13.828&#xff09; 共47篇. ”标题高频词汇 (segmentation, 15), (medical, 13), (3d, 6), (domain, 6), (surgical, 5), (reconstruction, 5), (at…

confluence的几个高危漏洞复现

序言 本次复现涉及了好几个confluence的相关漏洞&#xff0c;从复现利用到提权&#xff0c;有兴趣的可以自行搭建环境测试。 1.CVE-2021-26084 Confluence OGNL 注入漏洞 1.1 漏洞描述 在某些情况下&#xff0c;远程攻击者在经过身份验证或在特定环境下未经身份验证的情况下…

【MySQL】表的增删改查(二)

你可以了解世间万物&#xff0c;但追根溯源的唯一途径便是亲身尝试。——《心灵捕手》 前言&#xff1a; 大家好&#xff0c;上期我们讲到了表的GRUD操作中的新增数据、查询数据以及表中数据的排序、去重等操作&#xff0c;本期讲解条件查询、修改数据、删除数据的简单操作&…

Jlink_V9固件修复教程

最近自己的Jlink坏了&#xff0c;于是找了一个好的Jlink给坏的重新刷了一下固件就修好了。记录一下修复过程&#xff0c;以及遇到的问题。 故障现象&#xff1a;Jlink丢失固件之后指示灯不亮&#xff0c;连接板子时&#xff0c;KEIL无法识别。 注&#xff1a;JLINK_V9主控芯…

【Vue】从vue2到vue3,生命周期函数有何变化之详解

vue2与vue3生命周期的对比&#xff1a; Vue2--------------Vue3 beforeCreate—————–>setup() created————————>setup() beforeMount—————–>onBeforeMount mounted—————-------> onMounted beforeUpdate -————–> onBeforeUpdate u…

Spring Boot自动配置原理(Spring Boot面试题)

目录 1、产生疑惑 2、源码分析 2.1、pom.xml文件分析 2.2、启动类分析 3、总结 1、产生疑惑 当我们第一次使用Spring Boot练习的时候会觉得Spring Boot这么厉害&#xff0c;不管是依赖还是配置&#xff0c;它都为我们准备好了&#xff0c;我们只需要去编写业务代码就可…

[附源码]Python计算机毕业设计Django数字乡村基础治理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

调优四剑客的实战演练,福尔摩斯•K带你轻松优化性能

前言天下武功&#xff0c;唯快不破。在侦探的世界中&#xff0c;破案效率永远是衡量一名侦探能力的不二法门。作为推理界冉冉升起的新星&#xff0c;大侦探福尔摩斯K凭借着冷静的头脑、严谨的思维&#xff0c;为我们展现了一场场华丽而热血的推理盛宴。接下来&#xff0c;我们不…

【运维面试题】访问www.baidu.com背后发生了什么·dns解析过程·ping过程

文章目录 一、访问www.baidu.com背后发生了什么二、dns解析过程答法1(推荐)答法2三、ping过程一、访问www.baidu.com背后发生了什么 1.浏览器解析url是否合法 2.浏览器向DNS服务器请求解析ip地址 3.dns将解析出来的ip地址返回给浏览器 4.三次握手,浏览器与服务器进行tcp连接…

TVM 从入门到精通 | 安装 TVM (Part 2)

By 超神经内容一览&#xff1a;TVM 共有三种安装方法&#xff1a;从源码安装、使用 Docker 镜像安装和 NNPACK Contrib 安装。本文讲解如何通过 Docker 镜像 和 NNPACK Contrib 安装。关键词&#xff1a;TVM Docker 基础教程 欢迎回到 TVM 文档讲解 101&#xff0c;这个系…

【Python+Appium】开展自动化测试(十二)通过坐标定位元素

目录 前言 1&#xff0c;通过绝对坐标定位&#xff08;不推荐&#xff09; 2&#xff0c;通过相对坐标定位&#xff08;推荐&#xff09; 写在最后 前言 在使用appium做app自动化测试的过程中&#xff0c;可能会遇到元素的属性值不是唯一的情况&#xff0c;导致不能通过fin…

Linux上docker部署Mysql备份与恢复

Linux上Mysql备份与恢复 1.完全备份 完整备份是将所选的全部数据都备份起来&#xff0c;将备份文件生成一个镜像&#xff0c;再保存到其他的硬盘分区中。 1.1 完全备份一个或多个完整的库 ps: 博主mysql是用docker部署的&#xff0c;这时候需要进入docker容器进行操作。 d…

太极限了,JDK的这个BUG都能被我踩到!

之前遇到个文件监听变更的问题&#xff0c;刚好这周末有空研究了一番&#xff0c;整理出来分享给大家。 从一次故障说起 我们还是从故障说起&#xff0c;这样更加贴近实际&#xff0c;也能让大家更快速理解背景。 有一个下发配置的服务&#xff0c;这个配置服务的实现有点特…

详解设计模式:访问者模式

访问者模式&#xff08;Visitor Pattern&#xff09;&#xff0c;是在 GoF 23 种设计模式中定义了的行为型模式。据《大话设计模式》中说算是最复杂也是最难以理解的一种模式了。 访问者模式 是一种将数据操作与数据结构分离的设计模式&#xff0c;它可以算是 23 中设计模式中最…

NewStar CTF Week3Misc 4-5Web

目录 <1> Week-3 Misc (1) Whats HTTP (2) qsdzs girlfriend 3 (3) WebShell&#xff01; (4) 混沌的图像 <1> Week-4 Web (1) So Baby RCE(%0A进行rce rev|sort读取flag) (2) UnserializeThree(%0d换行rce) <2> week5-web (1) Give me your photo…