Jenkins参数化构建及代码发布

如何使用gitlab--web端可以观看此篇教程

https://blog.csdn.net/m0_59933574/article/details/134528050?spm=1001.2014.3001.5502icon-default.png?t=N7T8https://blog.csdn.net/m0_59933574/article/details/134528050?spm=1001.2014.3001.5502

整体思路

依赖环境及工具

  • Git

  • Centos7及以上

  • Gitlab

  • Jenkins

  • shell

  • ansible

实验机器

主机ip安装服务
192.168.231.241jenkins,后面称为jenkins端
192.168.231.238        gitlab,后面称为gitlab端
192.168.231.132git,nginx,后面称为nginx端

实验流程

jenkins-web端

构建后的操作 给我发邮件来通知我,以此来验证我是否实验成功

nginx端

首先下载nginx,其次删除其默认的网站发布目录html

rm -rf /usr/share/nginx/html

下载git

yum -y install git

gitlab端

新建一个项目:nginx-parameter

新建一个文件,不需要太复杂,简单的 可以证明实验即可,我的内容是

<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>

提交,克隆ssh

nginx端

将代码拉取到nginx的默认网站发布目录下,将其改名为html

[root@mysql nginx]# git clone http://192.168.231.238/root/nginx-parameter.git
正克隆到 'nginx-parameter'...
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 15 (delta 0), reused 0 (delta 0), pack-reused 12
Unpacking objects: 100% (15/15), done.
[root@mysql nginx]# ls
modules  nginx-parameter

###改名
[root@mysql nginx]# mv nginx-parameter/  html
[root@mysql nginx]# cd html/
[root@mysql html]# ls
index.html  README.md

将nginx端的公钥给gitlab端,这样nginx端去拉取代码就不需要输入密码

[root@nginx ~]# cat .ssh/
authorized_keys  id_rsa           id_rsa.pub       known_hosts      
[root@nginx ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3MCPw7lCMJo34jv6igODosRxIOGbavGGkNpya/Pmg74Lr9GWlWUR046NXJrB61fLC7HfSXCguP1up6ttZjP+b/qTtxT9rtZP4e2pNbk4t9Y+gE+JD6ZI1/mZL7Kr65CgaOq2UYJiJawY1+d3ElkXIt5g0wB5RBvuMPt/UMAGDH7HJ03CFzcD0T+K9oFQM/vbIZDXU/wbw/fMnQtpZKk0xgvKcKt/nUq07VSrblcumNSZyihvIEMZ6FphTYHd803JsOL51DHbhh6eegY5zriDD7gqtmYf8d9EXkFphZECHBiYxABMeNxzqxIV/7LoiYFV/lyTZZkYAvrrW2PRdBajj root@mysql

添加保存即可

jenkins节点上,下载ansible

下载ansible
yum -y insatll ansible

编辑管理机器
[root@jenkins ~]# cat /opt/hosts 
[nginx]
192.168.231.132

将自己的公钥发给nginx端
[root@jenkins ~]# ssh-copy-id 192.168.231.132
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.231.132's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.231.132'"
and check to make sure that only the key(s) you wanted were added.

验证能否管理ping通

[root@jenkins ~]# ansible -i /opt/hosts all -m ping -o
192.168.231.132 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}

写个脚本

[root@jenkins opt]# cat nginx-parameter.sh 
#!/bin/bash

# nginx\tomcat
SERVICE_NAME=$1

# start\stop\restart\none
SERVICE_STATUS=$2

# pull\reset1\reset2\reset_id\none
GITLAB_CODE=$3

# node\GITLAB_CODE值为reset_id时需要
GITLAB_ID=$4

CMD="ansible -i /opt/hosts nginx"

if [ "$SERVICE_NAME" = "nginx" ];then
    if [ "$GITLAB_CODE" = "pull" ];then
        $CMD -m shell -a "chdir=/usr/share/nginx/html  git pull  git@192.168.231.238:root/nginx-parameter.git" 
    elif [ "$GITLAB_CODE" = "reset1" ];then
        $CMD -m shell -a "chdir=/usr/share/nginx/html git reset --hard HEAD^"
    elif [ "$GITLAB_CODE" = "reset2" ];then
        $CMD -m shell -a "chdir=/usr/share/nginx/html git reset --hard HEAD^^"
    elif [ "$GITLAB_CODE" = "reset_id" ];then
        $CMD -m shell -a "chdir=/usr/share/nginx/html git reset --hard $GITLAB_ID"
    fi
    if [ "$SERVICE_STATUS" != "none" ];then
       $CMD -m shell -a "systemctl $SERVICE_STATUS nginx"
    fi
fi

jenkins的web端

增加构建步骤

开始实验

第一次构建

控制台输出

查看nginx端

第二次构建

修改gitlab端的代码

构建,同样都是拉取最新的代码

控制台输出

查看nginx端

第三次构建

修改gitlab端的代码

开始构建,同样拉取最新的代码,查看控制台输出

查看nginx端

开始回滚-1

构建,回到上俩次

查看控制台输出

查看nginx端

开始混滚-2

构建,回到上一次

查看控制台输出

查看nginx端

jenkins参数化构建的好处

  1. 灵活性:参数化构建可以根据不同的需求定制构建过程。你可以在执行作业时输入参数,使构建过程更加灵活和可配置。

  2. 可重用性:通过参数化构建,你可以将一个通用的构建过程转化为可重复使用的模板,以适应不同的场景和需求。这样可以避免重复创建相似的作业,提高效率。

  3. 自动化:通过参数化构建,可以实现自动化的构建流程。例如,可以通过选择参数来控制构建的环境、版本等,减少手动干预,提高自动化程度。

  4. 参数验证:参数化构建可以对输入的参数进行验证,确保输入的值符合要求。这有助于减少人为错误和不一致性。

  5. 集成测试:参数化构建可以与其他插件和工具集成,从而实现更复杂的构建和集成测试流程。例如,可以根据参数的不同执行不同的测试套件或部署到不同的环境。

总之,参数化构建提供了更大的灵活性和可配置性,帮助你根据需求定制构建过程,并提高自动化程度和效率。它是Jenkins强大的功能之一,可以帮助你更好地管理和执行构建任务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构高阶】红黑树

目录 一、红黑树的概念 二、红黑树的性质 2.1 红黑树与AVL树的比较 三、红黑树的实现 3.1 红黑树节点的定义 3.2 数据的插入 3.2.1 红黑树的调整思路 3.2.1.1 cur为红&#xff0c;f为红&#xff0c;g为黑&#xff0c;u存在且为红 3.2.1.2 cur为红&#xff0c;f为红&am…

php实现截取姓名中的第一个字作为头像的实战记录

php 截取中文字符串第一个字 substr 函数 在 PHP 中&#xff0c;使用 substr 函数来截取中文字符串的第一个字。由于 PHP 默认的字符编码是 UTF-8&#xff0c;它可以正确处理中文字符。 $chineseString "你好世界"; $firstChar substr($chineseString, 0, 1); e…

【小白专用】Apache2.4+PHP8.3+MYSQL的配置

1.下载PHP和Apache 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意&#xff1a; 1.使用Apache作为服务器的话&#xff0c;一定要下载Thread Safe的&#xff0c;否则没有php8apache2_4.dll这个文件&#xff0c; 如果使用IIS的请下载 NON Tread safe的 2.如果…

简单聊聊使用lombok 的争议

大家好&#xff0c;我是G探险者。 项目里&#xff0c;因为我使用了Lombok插件&#xff0c;然后代码走查的时候被领导点名了。 我心想&#xff0c;这么好用的插件&#xff0c;为啥不推广呢&#xff0c;整天写那些烦人的setter&#xff0c;getter方法就不嫌烦么&#xff1f; 领导…

[足式机器人]Part4 南科大高等机器人控制课 Ch05 Instantaneous Velocity of Moving Frames

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;CLEAR_LAB 笔者带更新-运动学 课程主讲教师&#xff1a; Prof. Wei Zhang 南科大高等机器人控制课 Ch05 Instantaneous Velocity of Moving Frames 1.Instantanenous Velocity of Rotating Frames2.Instantanenous Veloc…

计算机视觉 基于Open3D了解用于网格和点云邻域分析的KD树和八叉树

一、简述 距离计算和邻域分析是理解网格和点云的形状、结构和特征的重要工具。我们这里要基于一些3D库来提取基于距离的信息并将其可视化。 与深度图或体素相比,点云和网格表示 3D 空间中的非结构化数据。点由它们的 (X, Y, Z) 坐标表示,在 3D 空间中可能彼此靠近的两…

Vue3:表格单元格内容由:图标+具体内容 构成

一、背景 在Vue3项目中&#xff0c;想让单元格的内容是由 &#xff1a;图标具体内容组成的&#xff0c;类似以下效果&#xff1a; 二、图标 Element-Plus 可以在Element-Plus里面找是否有符合需求的图标iconfont 如果Element-Plus里面没有符合需求的&#xff0c;也可以在这…

什么是缓存穿透、缓存击穿、缓存雪崩,以及各自的解决方案

什么是缓存穿透、缓存击穿、缓存雪崩 缓存雪崩 当缓存数据大面积失效&#xff0c;导致请求无法从缓存中拿到数据而是直接访问数据库。 缓存穿透 缓存穿透是指查询一个缓存中和数据库中都不存在的数据&#xff0c;导致每次查询这条数据都会透过缓存&#xff0c;直接查库&am…

C# Solidworks二次开发:三种获取SW设计结构树的方法-第一讲

今天要讲的方法是如何在Solidworks中获取左侧设计结构上的节点&#xff0c;获取节点的方法我所知道的有三种。 这三种方法满足我在使用过程的多种需求&#xff0c;下面先开始介绍第一个方法&#xff1a; 方法的API如下所示&#xff1a;GetComponents Method (IAssemblyDoc) 这…

安卓上比iOS快捷指令更强大的工具——MacroDroid

使用 MacroDroid (Android) 自动化您的日常生活——一个简单的自动化应用程序&#xff0c;用于在 Android 上自动执行任务以及如何在其上自动执行任务。 iOS 和 Android 之间的区别? iOS和Android是两种不同的移动操作系统&#xff0c;iOS由苹果公司开发&#xff0c;于2007年…

Hexo部署到云服务器后CSS样式无效的问题

Hexo部署到云服务器后CSS样式无效的问题 01 前言 趁活动入手了一个云服务器&#xff08;Linux&#xff09;&#xff0c;打算简单挂个博客上去&#xff0c;因为之前部署到github有了一些经验&#xff0c;所以还是选择使用Hexo。中间步骤略&#xff0c;部署完使用浏览器访问的时…

(六)五种最新算法(SWO、COA、LSO、GRO、LO)求解无人机路径规划MATLAB

一、五种算法&#xff08;SWO、COA、LSO、GRO、LO&#xff09;简介 1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为&…

【pycharm】Pycharm中进行Git版本控制

本篇文章主要记录一下自己在pycharm上使用git的操作&#xff0c;一个新项目如何使用git进行版本控制。 文章使用的pycharm版本PyCharm Community Edition 2017.2.4&#xff0c;远程仓库为https://gitee.com/ 1.配置Git&#xff08;File>Settings&#xff09; 2.去Gitee创建…

Elasticsearch 8.9 refresh刷Es缓冲区的数据到Lucene,更新segemnt,使数据可见

一、相关API的handler1、接受HTTP请求的hander(RestRefreshAction)2、往数据节点发送刷新请求的action(TransportRefreshAction)3、数据节点接收主节点refresh传输的action(TransportShardRefreshAction) 二、在IndexShard执行refresh操作1、根据入参决定是使用lucene提供的阻塞…

什么是神经网络的非线性

大家好啊&#xff0c;我是董董灿。 最近在写《计算机视觉入门与调优》&#xff08;右键&#xff0c;在新窗口中打开链接&#xff09;的小册&#xff0c;其中一部分说到激活函数的时候&#xff0c;谈到了神经网络的非线性问题。 今天就一起来看看&#xff0c;为什么神经网络需…

亚马逊云科技re_Invent 2023产品体验:亚马逊云科技产品应用实践 国赛选手带你看Elasticache Serverless

抛砖引玉 讲一下作者背景&#xff0c;曾经参加过国内世界技能大赛云计算的选拔&#xff0c;那么在竞赛中包含两类&#xff0c;一类是架构类竞赛&#xff0c;另一类就是TroubleShooting竞赛&#xff0c;对应的分别为AWS GameDay和AWS Jam&#xff0c;想必也有朋友玩过此类竞赛&…

RTMP流设置超时时间失败

使用FFmpeg(版本是5.0.3&#xff09;将rtmp流作为输入&#xff0c;设置超时时间&#xff08;使用-timeout参数&#xff09;&#xff0c;结果报错&#xff1a;Cannot open Connection tcp://XXX:1935?listen&listen_timeout 通过./ffmpeg -help full 命令查看FFmpeg帮助&am…

【论文笔记】Gemini: A Family of Highly Capable Multimodal Models——细看Gemini

Gemini 【一句话总结&#xff0c;对标GPT4&#xff0c;模型还是transformer的docoder部分&#xff0c;提出三个不同版本的Gemini模型&#xff0c;Ultra的最牛逼&#xff0c;Nano的可以用在手机上。】 谷歌提出了一个新系列多模态模型——Gemini家族模型&#xff0c;包括Ultra…

jenkins设置中文

安装以下两个插件 Locale plugin Localization: Chinese (Simplified) 在jenkins的system配置中找到locale配置项 在locale配置项的默认语言中填入以下内容保存 zh_CN 重启jenkins即可

Gitzip插件【Github免翻下载】

今天给大家推荐一个github下载的插件&#xff0c;平常大家下载应该无外乎就是以下两种&#xff1a; Download zip利用git clone 但是这两种各有各的弊端&#xff0c;前者一般需要科学上网才可以&#xff0c;后者下载不稳定经常中途断掉。 今天给推荐一个款浏览器插件-Gitzip.大…