Jenkins参数化构建
目录
一. 准备ansible
二. Gitlab新建子项目
三. Jenkins建立任务,进行初步配置
四. 导入nginx主机的公钥
五. 配置ansible执行脚本
六. 构建测试
一. 准备ansible
在jenkins主机中安装ansible
[root@jenkins ~]# yum install -y epel-release
[root@jenkins ~]# yum install -y ansible
查看配置文件
[root@jenkins ~]# cat /etc/ansible/ansible.cfg
# Since Ansible 2.12 (core):
# To generate an example config file (a "disabled" one with all default settings, commented out):
# $ ansible-config init --disabled > ansible.cfg
#
# Also you can now have a more complete file by including existing plugins:
# ansible-config init --disabled -t all > ansible.cfg# For previous versions of Ansible you can check for examples in the 'stable' branches of each version
# Note that this file was always incomplete and lagging changes to configuration settings# for example, for 2.9: https://github.com/ansible/ansible/blob/stable-2.9/examples/ansible.cfg
初次进入需要自己选择两个命令其中一个执行,然后生成配置命令,后者比前者多一些插件相关的配置选项。
ansible-config init --disabled > ansible.cfg
或
ansible-config init --disabled -t all > ansible.cfg
[root@jenkins ~]# cd /etc/ansible/
[root@jenkins ansible]# ansible-config init --disabled -t all > ansible.cfg
[root@jenkins ansible]# vim /etc/ansible/ansible.cfg +318host_key_checking=Flase #将这个参数配置打开
配置主机清单
本机jenkins为192.168.226.22 主机清单配置另一台用于nginx上线项目的主机192.168.226.21
[root@jenkins ansible]# vim /etc/ansible/hosts
[nginx]
192.168.226.21 ansible_user=root ansible_password=lzz2578+[tomcat]
验证连通性
[root@jenkins ansible]# ansible all -m ping
192.168.226.21 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"
}
在192.168.226.21主机中下载nginx并启动
[root@nginx ~]# yum install -y nginx && systemctl enable --now nginx
二. Gitlab新建子项目
gitlab仓库主机为192.168.226.20
建立一个index.html代码文件用于测试
输入代码提交
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>测试小标题</title>
</head>
<body><h1>第是第一个小标题</h1></body>
</html>
三. Jenkins建立任务,进行初步配置
图中设置中构建步骤的代码如下:
echo "=========="
sh /opt/ansible.sh $service $status $gitlab_code $code_idecho "==========="echo "代码上线完成"
四. 导入nginx主机的公钥
# 生成密钥对
[root@nginx ~]# ssh-keygen# 复制查看到的公钥
[root@nginx ~]# cat .ssh/id_rsa.pub
[root@nginx nginx]# cd /usr/share/nginx
# 备份原目录
[root@nginx nginx]# mv html html.break
克隆代码仓库
[root@jenkins nginx]# git clone git@192.168.226.20:ugo_team/ceshi-paramter.git
# 给改目录改名
[root@nginx nginx]# mv ceshi-paramter html
五. 配置ansible执行脚本
[root@jenkins nginx]# cd /opt
[root@jenkins opt]# vim ansible.sh
#!/bin/bash# 接收 Jenkins 传递的参数
SERVICE_NAME="$1"
SERVICE_STATUS="$2"
GITLAB_CODE="$3"
CODE_ID="$4"# Ansible 主机清单路径
HOST="/etc/ansible/hosts"# Ansible 命令基础部分
CMD="/usr/bin/ansible -i $HOST"# 检查服务名称是否为 nginx,并根据传递的 GITLAB_CODE 参数执行不同的操作
if [ "$SERVICE_NAME" = "nginx" ]; thenif [ "$GITLAB_CODE" = "pull" ]; thenecho "Executing: $CMD $SERVICE_NAME -m shell -a 'chdir=/usr/share/nginx/html git pull origin main'"$CMD $SERVICE_NAME -m shell -a "chdir=/usr/share/nginx/html git pull origin main"elif [ "$GITLAB_CODE" = "reset1" ]; thenecho "Executing: $CMD $SERVICE_NAME -m shell -a 'chdir=/usr/share/nginx/html git reset --hard HEAD^'"$CMD $SERVICE_NAME -m shell -a "chdir=/usr/share/nginx/html git reset --hard HEAD^"elif [ "$GITLAB_CODE" = "reset2" ]; thenecho "Executing: $CMD $SERVICE_NAME -m shell -a 'chdir=/usr/share/nginx/html git reset --hard HEAD^^'"$CMD $SERVICE_NAME -m shell -a "chdir=/usr/share/nginx/html git reset --hard HEAD^^"elif [ "$GITLAB_CODE" = "code_id" ]; thenecho "Executing: $CMD $SERVICE_NAME -m shell -a 'chdir=/usr/share/nginx/html git reset --hard $CODE_ID'"$CMD $SERVICE_NAME -m shell -a "chdir=/usr/share/nginx/html git reset --hard $CODE_ID"elseecho "Unknown GITLAB_CODE: $GITLAB_CODE"exit 1fi# 根据传递的 SERVICE_STATUS 参数执行 systemctl 操作if [ "$SERVICE_STATUS" != "none" ]; thenecho "Executing: $CMD $SERVICE_NAME -m service -a 'name=$SERVICE_NAME state=$SERVICE_STATUS'"$CMD $SERVICE_NAME -m service -a "name=$SERVICE_NAME state=$SERVICE_STATUS"fi
elseecho "Unsupported SERVICE_NAME: $SERVICE_NAME"exit 1
fi
加上执行权限
[root@jenkins opt]# chmod +x ansible.sh
六. 构建测试
点击构建
选择对应的参数
看构建成功
访问nginx主机的网页例如我这里访问:http://192.168.226.21/
代码仓库修改代码测试
再次构建
如此再重复进行一次修改并构建
进行版本回退测试,回退上两个版本
回退到指定版本
到代码仓库查提交记录
这次选择刚最新提交的,也是有三个标题的那个版本,复制其对应的字符
点击构建,选择对应的参数
如此就完成了简易实验。
相关文章:

Jenkins参数化构建
目录 一. 准备ansible 二. Gitlab新建子项目 三. Jenkins建立任务,进行初步配置 四. 导入nginx主机的公钥 五. 配置ansible执行脚本 六. 构建测试 一. 准备ansible 在jenkins主机中安装ansible [rootjenkins ~]# yum install -y epel-release [rootjenkins…...

函数实例讲解(三)
文章目录 常用的三个数学函数1、绝对值函数ABS2、取整数部分INT3、求余数函数MOD 求极值函数max、min1、Max2、Min 附加条件下求平均数1、AVERAGE2、AVERAGEIF3、AVERAGEIFS VLOOKUP与COLUMN1、VLOOKUP2、COLUMN 查找函数LOOKUP1、基础语法2、向量形式3、数组形式 常用的三个数…...

如何选择适合自己的编程语言?大学新生入门编程最佳路径指南
编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱?本文将为你提供详细的指导,为你的大学生…...

编程的法则 依赖倒置原则 (Dependency Inversion Principle)包括如何实践
编程的法则 依赖倒置原则 (Dependency Inversion Principle)包括如何实践 flyfish 2017-07-19 2024-07-18 在软件工程中,存在着层次结构,其中上层的业务逻辑依赖于下层的实现细节。如果是直接的依赖关系可能会导致问题…...

[数据集][目标检测]肾结石检测数据集VOC+YOLO格式1299张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1299 标注数量(xml文件个数):1299 标注数量(txt文件个数):1299 标注…...

pxe安装部署
RHEL7为例: ifconfig查看ip 一.环境配置 1.配置软件仓库: mkdir /rhel7 mount /dev/cdrom /rhel7 echo mount /dev/cdrom /rhel74 >> /etc/rc.d/rc,local chmod x /etc/rc.d/rc.local 2.关闭火墙和selinux,下载…...

Linux用户-sudo命令
作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注我,我尽量把自己会的都分享给大家,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux是一个多用户多任务操作系统,这意味着它可以同时支持多个用户登录并使用系统。…...

Unity强化工程 之 SpriteEditer Multiple
本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 1. SpriteEditer Multiple Automatic slicing - Unity 手册 这是用于裁剪图集的模式 应用之后精灵编辑器会看到Slice亮…...

大数据Flink(一百零九):阿里云Flink的基本名称概念
文章目录 阿里云Flink的基本名称概念 一、层次结构 二、概念说明 1、工作空间(Workspace) 2、项目空间(Namespace) 3、资源(Resource) 4、草稿(Draft&#…...

如何利用AI工具延长摸鱼时间、准点下班?
你好同学,我是沐爸,欢迎点赞、收藏和关注!个人知乎、公众号"沐爸空间" 俗话说,不会摸鱼的程序猿不是好的程序猿。同学,你是不是也在为不能准点下班、每天加班、没有时间提升自己而烦恼? 接下来…...

Yarn:一个快速、可靠且安全的JavaScript包管理工具
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,还请三连支持一波哇ヾ(@^∇^@)ノ) 目录 一、Yarn简介 二、Yarn的安装 1. 使用npm安装Yarn 2. 在macOS上…...

上线前端系统
上线一个静态的前端系统(续) 在eleme服务器上 启动服务 启动rpcbind [rooteleme-static ~]# systemctl restart rpcbind 启动nfs [rooteleme-static ~]# systemctl restart nfs 重启服务 启动smb [rootstatic-server img]# systemctl start smb…...

制作一个不依赖任何基础镜像的docker镜像
1、比如官方提供的hello-world镜像 #docker pull hello-world #docker images hello-world latest feb5d9fea6a5 2 years ago 13.3kB 可以看到这个镜像只有13.3kB 2、# docker run hello-world 只能打印一些信息 3、这个hello-world镜像的dockerfile就下面3行语…...

【拓扑排序topsort】——启动!!!
B3644 【模板】拓扑排序 / 家谱树 #include<bits/stdc.h> #define int long long #define fi first #define se second #define pb push_back #define PII pair<int,int > #define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) using namespace std; …...

计算机网络-http协议和https的加密原理
HTTP(HyperText Transfer Protocol,超文本传输协议)是用于在万维网(World Wide Web)上传输超文本的基础协议。它定义了客户端(通常是浏览器)和服务器之间的文本数据传输格式和规则。以下是HTTP的…...

共享`pexlinux`数据文件的网络服务
实验环境准备: 1.红帽7主机 2.要全图形安装 3.配置网络为手动,配置网络可用 4.关闭vmware DHCP功能 一、kickstart自动安装脚本制作 1.安装图形化生成kickstart自动脚本安装工具 2.启动图形制作工具 3.图形配置脚本 这里使用的共享方式是http࿰…...

HC32F4A0 10路串口UART 配置
HC32 小华MCU 使用一段时间了,反正芯片BUG 是比较多了,比如串口接收错误后导致再也无法接收,PWM模块无法输出 低电平 , CAN 接收错误导致 输出引脚 CAN_TXD 一直输出脉冲 。。。;好的一面也存在吧,IO 引脚…...

拯救PyCharm:击退IDE崩溃的终极策略
拯救PyCharm:击退IDE崩溃的终极策略 PyCharm,作为开发界的明星IDE之一,以其强大的功能和灵活的定制性深受广大开发者喜爱。然而,即便是这样一款卓越的开发工具,也可能会遇到崩溃的问题,影响开发效率和工作…...

深入解析Unix命令:掌握wc、whereis和which的使用技巧
目录 1. wc命令 2. whereis命令 3. which命令 结论 在Unix和类Unix系统中,wc、whereis和which是三个常用的命令行工具,每个都有着独特的功能和用途。让我们逐个来了解它们的作用和使用方法。 1. wc命令 wc命令是"word count"的缩写&…...

奥运会大规模使用中国AI大模型!
B站:啥都会一点的研究生公众号:啥都会一点的研究生 AI圈最近又发生了啥新鲜事? 巴黎奥运会大规模使用中国 AI 大模型 巴黎奥运会成为一场科技与体育的盛宴,其中包括了大量中国科技的应用。AI 技术将在多个方面发挥作用…...

Linux中的线程3
死锁 在Linux操作系统中,死锁(Deadlock)是指两个或多个进程(或线程)在执行过程中,因互相持有对方所需的资源而又都在等待对方释放资源,导致它们都无法继续执行下去的一种状态。这种僵局会浪费系…...

内网权限维持——利用WMI进行权限维持
文章目录 一、WMI事件订阅机制简介二、利用事件订阅进行权限维持三、防御方式 一、WMI事件订阅机制简介 WMI(Windows Management Instrumentation,Windows管理规范)是windows提供的一种能够直接与系统进行交互的机制,旨在为系统中…...

【数据结构算法经典题目刨析(c语言)】括号匹配问题(图文详解)
💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:数据结构经典题目刨析(c语言) 目录 一、题目描述 二、解题思路 三、代码实现 一、题目描述 二、解题思路 问题要求将三种类型括号匹配,其中包括顺序匹配和数量匹配 使用栈的后进先…...

浅谈 Spring AOP框架 (1)
文章目录 一、什么是 Spring AOP二、为什么要使用 Spring AOP三、AOP 的一些应用场景四、AOP 的组成五、如何使用 Spring AOP六、Spring AOP 的实现原理6.1、JDK 和 CGLIB 的区别 一、什么是 Spring AOP AOP (Aspect Oriented Programming) :面向切面编程ÿ…...

Linux 面试准备 - 2024
复习一下,资料来自慕课网课程 Linux 速成班和一些网上面试资料。 1. Linux 内核功能 1. 内存管理 2. 进程管理 3. 设备驱动程序 4. 系统调用和安全防护 2. 文件系统 - 一切皆文件 2.1 文件目录 /根目录etc配置文件bin必要命令usr 二级目录(非用户…...

C++笔记---类和对象(中)
1. 类的默认成员函数 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。 一个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,分别为:构造函数,析构函数,拷贝构…...

【C++】入门基础知识
河流之所以能够到达目的地,是因为它懂得怎样避开障碍。💓💓💓 目录 ✨说在前面 🍋知识点一:C的发展历史 • 🌰1.C发展历史 • 🌰2.C的迭代与更新 • 🌰3.编程语言排…...

AI的应用场景和未来展望
AI(人工智能)的应用场景广泛且多样,已经深入到我们生活的方方面面,成为现代社会不可或缺的一部分。 AI的应用场景 1、通用软件与工具型应用 办公软件:如钉钉、飞书等,通过AI技术提供内容生成与摘要、智能…...

vim、sublime、notepad文本编辑器的使用
VIM: Windows上配置gvim并作为C和C的IDE Windows上配置gvim并作为C和C的IDE | Reasuon sublime notepad...

PyCharm中的外部更改识别:终极解决方案指南
标题:PyCharm中的外部更改识别:终极解决方案指南 引言 PyCharm,作为JetBrains公司开发的集成开发环境(IDE),以其强大的功能和高效的代码编辑体验而广受开发者喜爱。然而,在开发过程中…...