Jenkins部署与自动化构建

news2025/2/26 23:26:24

Jenkins笔记

一、安装Jenkins

docker 安装 Jenkins

  1. 拉取稳定版Jenkins镜像

    注意: docker拉取镜像的时候要拉取 jenkins/jenkins 而不是jenkins 要装稳定版,否则后面会有很多插件装不上

    docker pull jenkins/jenkins:lts
    
  2. 挂载对应的容器卷

    #给需要挂载的文件夹授权
    mkdir jenkins_home
    chmod 777 /docker/jenkins_home/
    
    #启动容器
    docker run -d -p 8090:8080 -p 8091:50000 --privileged=true --name jenkins_8090 -v /docker/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime 55860ee0cd73
    
    -d 后台运行镜像
    -p 8090:8080 将镜像的8080端口映射到服务器的8090端口。
    -p 8091:50000 将镜像的50000端口映射到服务器的8091端口
    -v /data/jenkins_home:/var/jenkins_home /var/jenkins_home目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。这里我们设置的就是上面我们创建的 /data/jenkins_home目录
    -v /etc/localtime:/etc/localtime让容器使用和服务器同样的时间设置。
    –name jenkins_8090 给容器起一个别名
    http://mirror.esuni.jp/jenkins/updates/update-center.json
    
  3. 修改插件下载镜像源为清华镜像(可以先直接尝试一下是否可以安装成功)

    # 修改xml
    vim jenkins_home/hudson.model.UpdateCenter.xml 
    #将 <url>https://updates.jenkins.io/update-center.json</url>替换为 <url>http://mirror.esuni.jp/jenkins/updates/update-center.json</url>
    http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    
    # 修改jenkins/updetes/default.json文件
    ①把:“http://www.google.com/” 改成 “http://www.baidu.com/”
    ②把:“https://updates.jenkins.io/download” 全部替换成 “http://mirrors.tuna.tsinghua.edu.cn/jenkins”
    
    sed -i 's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json
    sed -i 's#https://www.google.com#https://www.baidu.com#g' default.json
    
    sed -i 's#https://updates.jenkins.io/download#https://mirrors.huaweicloud.com/jenkins#g' default.json && sed -i 's#http://www.google.com#https://www.baidu.com#g' default.json 
    
    http://ip:9090/pluginManager/advanced
    https://cdn.jsdelivr.net/gh/jenkins-zh/update-center-mirror/tsinghua/current/update-center.json
    
    
    # 重启服务
     docker stop jenkins_8090
     docker start jenkins_8090 
    
    
  4. 访问web页面 http://IP:8090/

  5. 去查看第一次登录的密码

    #查看输出日志
    docker logs jenkins_8090
    
    #在日志中会有一段密码
    Jenkins initial setup is required. An admin user has been created and a password generated.
    Please use the following password to proceed to installation:
    
    800c8b5201284979a1ea16c1893358d5
    
    This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
    
    #或者也可以去它上面给的地址中查看密码
    将密码填入上面的文本框中
    
  6. 等待一会后,开始安装插件

    我这里选择的是按照推荐安装在这里插入图片描述

  7. 后续需要通过maven来构建我们的项目,所以需要在容器内安装mavne

    # 将maven下载好后解压
    unzip /mavne/apache-maven-3.8.6 -d ./
    
    # 修改maven的镜像源
    vim /mavne/apache-maven-3.8.6/conf/setting.xml
    
    #将里面的镜像换为阿里云镜像
    <mirror>  
    <id>alimaven</id>              
    <name>aliyun maven</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
    <mirrorOf>central</mirrorOf>          
    </mirror>
    
    #增加软连接 (不需要进入到原来的路径也可以验证Maven安装)
    ln -s /maven/apache-maven-3.8.6/bin/mvn /usr/local/bin/mvn
    
    #验证是安装成功
    mvn -v 
    
    

Java启动war包直接安装

  1. 下载适合的war包 https://mirrors.jenkins.io/war-stable/

    我这里用的jdk1.8 所以下载的版本为jenkins 2.346.1

  2. 利用java命令启动

    touch temp.txt
    # 这种方式会在后台运行 不会被关闭
    nohup java -jar jenkins.war --httpPort=8090 >temp.txt &
    
  3. 访问 ip:8090 后续操作同上4⃣️

二、配置maven+Git自动构建jar包

  1. 安装maven插件

    在这里插入图片描述

    安装好后进入新增item,出现小猫头鹰即安装成功

在这里插入图片描述

  1. 创建一个任务

    在这里插入图片描述

  2. 选择Git ,此时下面会提示git连接错误

    在这里插入图片描述

    可以配置下凭证

    在这里插入图片描述

  3. 安装git

    yum install -y git
    # 安装完毕后验证一下
    git --verison
    
  4. 设置需要构建的分支

    在这里插入图片描述

  5. 配置maven路径

    在这里插入图片描述

    配置安装的maven路径

    在这里插入图片描述

  6. 设置需要构建的pom文件路径

    在这里插入图片描述

  7. 保存后开始构建

    在这里插入图片描述

    可以在构建中看到控制台输出(记得将maven的镜像地址换成阿里云地址

    在这里插入图片描述

三、自动化发布到测试服务器运行

  1. 安装服务器连接插件 Publish Over SSH

    在这里插入图片描述

  2. 进入配置后管理界面

    在这里插入图片描述

    在这里插入图片描述

    选择这个选项

  3. 配置测试服务器连接

    因为我们需要增加一台远程服务器,所以我们需要做一些配置信息

    在这里插入图片描述

    在这里插入图片描述

  4. 添加一台远程服务器

    在这里插入图片描述

  5. 此时在原先的地方就有了我们刚添加的服务器

    在这里插入图片描述

    配置相关数据

    1. 构建前Pre Steps

    在这里插入图片描述

    构建后Post Steps

    在这里插入图片描述

超时机制

  1. 启动脚本问题会导致超时,从而导致启动不成功

    可以设置超时时间为0 这样就可以不会因为超时而不成功

nohup java -jar /jenkins/build_jar/first1/*.jar &
# 这条语句会超时,原因是因为没有指明日志输出到哪里,控制台会一直等待

#修改为如下
nohup java -jar /jenkins/build_jar/first1/*.jar >/jenkins/build_jar/first1/mylog.log 2>&1 &

# 也可以简化为
nohup java -jar /jenkins/build_jar/first1/*.jar &>/jenkins/build_jar/first1/mylog.log  &


数据流重定向

数据流重定向就是将某个命令执行后应该要出现在屏幕上的数据传输到其他地方

# 标准输入:代码为0,使用<或者<<
# 标准输出:代码为1,使用>或者>>
# 标准错误输出:代码为2,使用2>或者2>>
# 若以>输出到一个已存在的文件中,那么这个文件会被覆盖
# > 覆盖写
# >> 追加写

编写清理Shell脚本

jps|grep -v Jps|awk '{print $1}'

#将 xxxx写入xxx.txt
echo "xxxx">xxx.txt

#!/bin/bash

#获取程序运行的pid
ps -ef|grep jenkins_demo #会获取到两条记录 有一条是grep的数据

#利用grep -v 再次过滤 grep -v 需要过滤掉的信息
ps -ef|grep jenkins_demo|grep -v grep

#利用grep '需要的信息' 进行过滤
ps -ef|grep jenkins_demo|grep 'SNAPSHOT'

#获取打印出来的信息的第二列数据PID
`ps -ef|grep jenkins_demo|grep 'SNAPSHOT'|awk '{printf $2}'`


部署前shell操作(删除原来的包,同时关闭上一次运行的pid)

#!/bin/bash
#删除原来的包
rm -rf /jenkins/build_jar/first1

#传入一个参数
appname=$1
if [ -z $appname ]
then
  appname='jenkins_demo'
fi
echo $appname

#获取pid
pid=`ps -ef | grep $appname | grep 'java -jar' | awk  '{printf $2}'`

echo $pid

#如果pid为空的话,提示一下,否则执行kill命令
if [ -z $pid ]
#使用-z来判断是否是空值
then
  echo "$appname not started"
else
  kill -9 $pid
  echo "$appname stoping..."
fi

#再次精准匹配 查看是否已经kill完 -w是精准匹配
check=`ps -ef|grep -w $pid |grep java`
if [ -z $check ]
then
  echo "$appname pid:$pid is stop"
else
  echo "$appname stop Failed"
fi
  1. 配置构建前执行shell脚本

    在这里插入图片描述

  2. 此时构建的话,Jenkins会自动帮我们删除以前的版本数据,同时kill掉以前运行的pid

四、构建触发器

触发器可以通过一些事件触发Jenkins的自动构建,如:上传代码,合并代码等。

1. 生成API token

  • 1.1 进入jenkins安全设置,开启安全域及授权策略

    配置开启

    在这里插入图片描述

  • 1.2 生成api token

    在这里插入图片描述

2. Jenkins项目配置触发器

  • 2.1 选择测试项目-配置-构建触发器,选择触发远程构建,将token粘贴在身份验证令牌处,保存

    在这里插入图片描述

  • 2.2 通过访问 JENKINS_URL/job/first/build?token=TOKEN_NAME 观察项目是否进入构建队列

3. 远程Git仓库配置WebHooks

(GitLab GitHub)同理

  • 3.1在Jenkins中安装Gitee插件(同上)

  • 3.2在项目设置中配置Gitee令牌地址等

    在这里插入图片描述

    在这里插入图片描述

  • 3.3增加webHooks管理

    在这里插入图片描述

  • 3.4添加post地址和token 这里的地址直接用上面Jenkins的链接,token则是刚才生成的密码

    在这里插入图片描述

  • 3.5尝试重新上传代码,可以发现现在会自动触发构建

    在这里插入图片描述

4. 几种构建方式

在这里插入图片描述

1、快照依赖构建/Build whenever a SNAPSHOT dependency is built

  • 当依赖的快照被构建时执行本job

2、触发远程构建 (例如,使用脚本)

  • 远程调用本job的restapi时执行本job

3、job依赖构建/Build after other projects are built

  • 当依赖的job被构建时执行本job

4、定时构建/Build periodically

  • 使用cron表达式定时构建本job

5、向GitHub提交代码时触发Jenkins自动构建/GitHub hook trigger for GITScm polling

  • Github-WebHook出发时构建本job

6、定期检查代码变更/Poll SCM

  • 使用cron表达式定时检查代码变更,变更后构建本job

5. 定期构建cron表达式

在构建中Build periodically与Poll SCM接收的参数都是cron表达式

与标准的cron表达式不同,没有秒字段

cron表达式网站

第一个 * 表示每个小时的第几分钟,取值0~59

0 */1 * * *
H:每小时0分执行一次

第二颗 * 表示小时,取值0~23

* 15 * * * 表示每天下午3点
* 1 * * *  表示每天凌晨1点

第三颗 * 表示一个月的第几天,取值1~31
* 1 5 * *  表示每月5日凌晨1点

第四颗 * 表示第几月,取值1~12
* 15 5 1 *  表示每年一月5日15时的每一分钟执行

第五颗 * 表示一周中的第几天,取值0~7,其中0和7代表的都是周日

H (hash散列)

  • hash散列值,以job名取值,获取到以job名为入参的唯一值,相同名称值也相同,这个偏移量会和实际时间相加,获得一个真实的运行时间。

  • 意义在于:不同的项目在不同的时间运行,即使配置的值是一样的,比如 都是15 * * * * ,表示每个小时的第15分钟开始执行任务,那么会造成同一时间内在Jenkins中启动很多job,换成H/15 * * * *,那么在首次启动任务时,会有随机值参与进来,有的会在17分钟启动 有的会在19分钟启动,随后的启动时间也是这个值。这样就能错开相同cron值的任务执行减轻同一时间拉起的Job太多

  • H的值也可以设置范围

  • H * * * *表示一小时内的任意时间
    
    */10 * * * *每10分钟
    
    H/10 * * * *每10分钟,可能是7,17,27,起始时间定hash,后续不会变
    
    45 3 * * 1-6 每个周一至周六,凌晨3点45 执行1次
    
    45 3-5 * * 1-6 每个周一至周六,凌晨3点45 ,凌晨4点45,凌晨5点45 各执行1次
    
    H(40-48) 3-5 * * 1-6 在40~48之间取值 其他同上
    
    45 3-5/2 * * 1-6 每个周一至周六,凌晨3点45 ,凌晨5点45 各执行1次
    
    45 0-6/2 * * * 0点开始,6点结束,每间隔2小时执行一次 0:45、2:45、4:45、6:45
    
    
  • 如图 配置后会每天凌晨两点的某一分钟为我们构建 H 2 * * *

    在这里插入图片描述

6. Poll SCM(轮询)

​ 这个是由Jenkins服务发起对远程git仓库的访问,比较配置的分支上是否有新的内容,如果有则会发起一次构建,轮询频率控制是通过cron表达式控制。

在这里插入图片描述

五、配置邮箱接收构建信息

1. 设置管理员邮箱(发件邮箱)

  • 1.1 登录163邮箱,进入邮箱协议设置

    在这里插入图片描述

  • 1.2 获取授权密码(ZSJRNM*********)

    在这里插入图片描述

2. Jenkins邮件设置配置

  • 在管理界面Configure System中

    在这里插入图片描述

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G2Cr5m0K-1680142247362)(/Users/lvhao/zixuexi/git学习/practice-and-learning/笔记/云原生/图片/邮件配置2.png)]

    在这里插入图片描述

    在这里插入图片描述

    此时可以点击下面的发送邮件测试是否能成功发送

    在这里插入图片描述

  • 在项目管理里配置构建后邮件通知

  • 重新构建项目,可以看到已经有短信通知了

3.邮件设置中的坑

  1. 点击发送测试信息的时候,提示**AuthenticationFailedException: 550 User has no permission**错误

    那就是授权出现了错误,此时就需要重新获取授权码再授权一次,但记得邮箱设置页面中已获得授权的设备一定要记得删除,防止自己的邮箱账号被盗

  2. 点击发送测试信息的时候,提示MailConnectException: Couldn't connect to host, port: smtp.163.com, 25; timeout 60000;

    这个话是因为可能你使用的是Linux服务器,防火墙25端口没有开,有两种解决办法

    1.开启防火墙25端口

    注意:如果你和我一样使用的为阿里云服务器的话,阿里云为了安全考虑默认是关闭25端口的,如果你想要开启的话需要提交申请审批,大概需要3-5天

    2.使用SSL协议号

    • 下面配上网易163邮箱的相关服务器信息:

      在这里插入图片描述

    我这里使用的是465端口,同时启用SSL协议

  3. 点击发送测试信息的时候,提示MessagingException: Got bad greeting from SMTP host: smtp.163.com, port: 465, response: [EOF],则查看使用的端口是否需要使用SSL协议

    在这里插入图片描述

  4. 用来发送的邮箱要和管理员设置的邮箱一致

    在这里插入图片描述

    这样就可以开开心心的发邮件啦!以上这些坑不幸的我都踩到了😭

在这里插入图片描述

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

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

相关文章

Elasticsearch:配置选项

Elasticsearch 带有大量的设置和配置&#xff0c;甚至可能让专家工程师感到困惑。 尽管它使用约定优于配置范例并且大部分时间使用默认值&#xff0c;但在将应用程序投入生产之前自定义配置是必不可少的。 在这里&#xff0c;我们将介绍属于不同类别的一些属性&#xff0c;并讨…

【风光场景生成】基于改进ISODATA的负荷曲线聚类算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。⛳座右铭&#…

《计算机网络-自顶向下》04. 网络层-数据平面

文章目录网络层数据平面和控制平面两者的概述数据平面控制平面控制平面&#xff1a;传统方法控制平面&#xff1a;SDN 方法网络服务模型路由器工作原理通用路由器体系结构输入端口的功能基于目标的转发交换结构内存交换方式总线交换方式纵横式交换方式输出端口的功能何时何处出…

YOLOV8改进:如何增加注意力模块?(以CBAM模块为例)

YOLOV8改进&#xff1a;如何增加注意力模块&#xff1f;&#xff08;以CBAM模块为例&#xff09;前言YOLOV8nn文件夹modules.pytask.pymodels文件夹总结前言 因为毕设用到了YOLO&#xff0c;鉴于最近V8刚出&#xff0c;因此考虑将注意力机制加入到v8中。 YOLOV8 代码地址&am…

ChatGPT能代替Oracle DBA吗?用Oracle OCP(1z0-083)的真题测试一下。

让我们来看看ChatGPT不能通过Oracle OCP的考试&#xff1f; 文章目录引言测试过程总结和分析关于博主&#xff0c;姚远&#xff1a;Oracle ACE&#xff08;Oracle和MySQL数据库方向&#xff09;。Oracle MAA 大师。华为云MVP。《MySQL 8.0运维与优化》的作者。拥有 Oracle 10g和…

被吐槽 GitHub仓 库太大,直接 600M 瘦身到 6M,这下舒服了

大家好&#xff0c;我是小富&#xff5e; 前言 忙里偷闲学习了点技术写了点demo代码&#xff0c;打算提交到我那 2000Star 的Github仓库上&#xff0c;居然发现有5个Issues&#xff0c;最近的一条日期已经是2022/8/1了&#xff0c;以前我还真没留意过这些&#xff0c;我这人懒…

Esp8266+阿里云+STM32点灯(三)

1、简介 1、固件库烧录&#xff1a;Esp8266阿里云STM32点灯&#xff08;一&#xff09; 2、ESP8266通过电脑与阿里云通讯&#xff1a;Esp8266阿里云STM32点灯&#xff08;二&#xff09; 前两部分已经完成ESP8266和阿里云简单通讯&#xff0c;这部分通过STM32单片机通过ESP8…

vue全局使用svg

1、安装依赖 npm install svg-sprite-loader2、配置选项 在vue.config.js的chainWebpack里配置下面代码 解释&#xff1a;config.module.rule是一个方法&#xff0c;用来获取某个对象的规则。.exclude.add&#xff08;文件a&#xff09;是往禁用组添加文件a&#xff0c;就是对文…

人民链Baas服务平台上线,中创助力人民数据共建数据服务应用场景

人民链2.0是数据要素大发展时代下的可信联盟链 作为区块链分布式存储领域行业先驱与让人民放心的国家级数据云平台&#xff0c;中创算力与人民数据的合作从未间断。为了推动人民链2.0高质量发展&#xff0c;中创算力与人民数据开展了多方面合作&#xff0c;助力人民数据共建数据…

计算机网络 - 网络通信 (TCP与UDP)

前言 本篇通过了解套接字&#xff0c;TCP与UDP协议的特点&#xff0c;使用UDP的api套接字与TCP的api套接字进行回显程序的网络通信&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录前言1. 认识网络通信需…

JVM、JVM中的垃圾回收、类加载、IoC和DI

一、JVM 1、概念 JVM&#xff1a;Java Virtual Machine 的简称&#xff0c;意为 Java虚拟机&#xff0c;可以运行Java代码&#xff0c;是整个Java实现跨平台的最核心的部分&#xff1b;所有的Java程序会首先被编译为.class的类文件&#xff0c;这种类文件可以在虚拟机上执行&…

2022-ISCC信息安全与对抗竞赛wp-misc(详解,有脚本( •̀ ω •́ )y)

前言 没想到不知不觉一年时间就这样过去了&#xff0c;又到了一年一度的ISCC信息对抗大赛&#xff0c;不知道去年打比赛的小伙伴今年还能不能再碰到&#xff0c;期待与君再相见( •̀ ω •́ )y 所以今天就把去年的题目再复现一遍供师傅们参考 嘻嘻 目录 misc &#xff08…

2023MathorCup数模B题思路数据代码论文【全网最全分享】

文章目录赛题思路赛题详情参赛建议&#xff08;个人见解&#xff09;选择队友及任务分配问题&#xff08;重要程度&#xff1a;5星&#xff09;2023MathorCup数模B题思路数据论文代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片&#xff0c;…

STM-32:I2C外设总线—硬件I2C读写MPU6050

目录一、I2C外设简介二、I2C框图三、I2C基本结构四、主机发送五、主机接收六、I2C的中断请求七、软件/硬件波形对比八、应用实例&#xff1a;硬件I2C读写MPU60508.1接线图8.2程序代码一、I2C外设简介 STM32内部集成了硬件I2C收发电路&#xff0c;可以由硬件自动执行时钟生成、…

Blender安装最新版本

目录1. Blender下载1.1 Blender硬件要求1.2 下载Blender1.3 或者下载LTS版本2. 安装向导2.1 在Windows上安装2.1.1安装msi文件(这里演示案例)2.1.2 点击“Next”2.1.3 勾选&#xff0c;点击“Next”2.1.4 点击“Next”2.1.5 点击“Install”2.1.6 安装进度2.1.7 点击“Finish”…

来了,简单宣告下 Compose for iOS Alpha 正式发布

来了来了&#xff0c;盼星星盼月亮&#xff0c;广大 Compose 开发者期待许久的 Jetpack Compose Multiplatform for iOS 近期终于正式发布了 Alpha 支持&#xff0c;其实在此之前&#xff0c;我在 《一文快速带你了解 KMM 、 Compose 和 Flutter 的现状》 等文章里说了很多次 C…

十三款MySQL可视化管理工具

文章目录一、DBeaver二、DataGrip三、phpMyAdmin四、MySQLDumper五、Navicat六、MySQL GUI Tools七、MySQL ODBC Connector八、MySQL Workbench九、SQLyog十、MySQL-Front十一、dbForge Studio for MySQL十二、HeidiSQL十三、Beekeeper StudioMySQL 的管理维护工具非常多&#…

【C++ 二】选择结构、循环结构、跳转语句

选择结构、循环结构、跳转语句 文章目录选择结构、循环结构、跳转语句前言1 选择结构1.1 if语句1.2 三目运算符1.3 switch 语句2 循环结构2.1 while 循环语句2.2 do...while 循环语句2.3 for 循环语句2.4 嵌套循环3 跳转语句3.1 break 语句3.2 continue 语句3.3 goto语句总结前…

Unity | Video Player的使用方法和原理

讲解逻辑为Unity | 基础逻辑_菌菌巧乐兹的博客-CSDN博客 一、把素材仓库里的视频放进Game界面 1.我们需要在素材仓库中放一个视频&#xff08;其他文件夹不用管&#xff0c;我只是懒得删了&#xff09; 2.在Unity里建一个能接收视频的地方VideoPlayer 备注&#xff1a;视频和…

【Python基础入门学习】Python背景知识及介绍

一、背景知识 主流编程语言&#xff1a;java/python/c(c) Python主要应用领域&#xff1a;人工智能、大数据 云计算领域的openstack 框架就是Python写的 测试发展方向&#xff1a;测开、安全、性能 1.1 发展过程 机器语言&#xff08;二进制&#xff09;-- 汇编语言 – 高级汇…