当前位置: 首页 > news >正文

Jenkins全栈体系(二)

Jenkins

第三章 Jenkins + Git + Maven 自动化部署配置

十、几种构建方式

  • 快照依赖构建/Build whenever a SNAPSHOT dependency is built
    • 当依赖的快照被构建时执行本job
  • 触发远程构建 (例如,使用脚本)
    • 远程调用本job的restapi时执行本job
  • job依赖构建/Build after other projects are built
    • 当依赖的job被构建时执行本job
  • 定时构建/Build periodically
    • 使用cron表达式定时构建本job
  • 向GitHub提交代码时触发Jenkins自动构建/GitHub hook trigger for GITScm polling
    • Github-WebHook出发时构建本job
  • 定期检查代码变更/Poll SCM
    • 使用cron表达式定时检查代码变更,变更后构建本job

1. 触发远程构建/gitlab上改动自动构建

代码改动自动可以使用gitlab的webhook回调钩子调起Jenkins的启动任务接口

在构建触发器中配置接口和token

在这里插入图片描述

2. 定时构建

Jenkins cron表达式

标准cron

https://crontab.guru

Jenkins cron不是标准的cron表达式

第一个 * 表示每个小时的第几分钟,取值0~59H * * * *
H:每小时执行一次第二颗 * 表示小时,取值0~23* 15 * * * 表示每天下午3点
* 1 * * *  表示每天凌晨1点第三颗 * 表示一个月的第几天,取值1~31
* 1 5 * *  表示每月5日凌晨1点第四颗 * 表示第几月,取值1~12
* 15 5 1 *  表示每年几月执行第五颗 * 表示一周中的第几天,取值0~7,其中0和7代表的都是周日

“/”

表示每隔多长时间,比如 */10 * * * * 表示 每隔10分钟

“H”

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

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

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 * * 1-6 * * 1-6 0点开始,每间隔2小时执行一次 0:45、2:45、4:45

3. 源码变更构建

使用Poll SCM 方式与Build periodically一样

会主动定期检查代码托管服务器上是否有变化,一旦发生变化执行job构建

4. 测试报告邮件通知

十一、自动化部署到docker容器中

1. docker外挂目录

docker run -d -p 8080:8080 --name demo-out -v /root/jarfile/demo-1-0.0.1-SNAPSHOT.jar:/app.jar openjdk:11 java -jar app.jar

2. 打包到容器内

2.1 准备一台测试服务器 docker环境
2.2 准备支持jdk的镜像
FROM openjdk:11
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]
2.3 把jar包打包到容器内

dockerfile

FROM openjdk:11
EXPOSE 8080WORKDIR /rootADD jarfile/demo*.jar /root/app.jar
ENTRYPOINT ["java","-jar","/root/app.jar"]

打包镜像

docker build -t demo .

配置国内镜像

修改/etc/docker/daemon.json文件,没有的话创建一个

写入

{"registry-mirrors": ["https://ustc-edu-cn.mirror.aliyuncs.com","http://hub-mirror.c.163.com","https://registry.aliyuncs.com"]
}

重启服务

systemctl daemon-reload
systemctl restart docker

十二、Jenkins集群/并发构建

集群化构建可以有效提升构建效率,尤其是团队项目比较多或是子项目比较多的时候,可以并发在多台机器上执行构建。

  • 勾选 在必要的时候并发构建

第四章 流水线 pipeline

流水线既能作为任务的本身,也能作为Jenkinsfile

使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来,同时也可以编辑开发Jenkins web ui不能完成的更复杂的构建逻辑,作为开发者可读性也更好。

一、完整语法

5个必备的组成部分

pipeline:整条流水线
agent:指定执行器
stages:所有阶段
stage:某一阶段,可有多个
steps:阶段内的每一步,可执行命令

二、测试脚本

1. 基础框架

pipeline {agent anystages {stage('拉取代码') {steps {echo '拉取代码完成'}}stage('执行构建') {steps {echo '执行构建完成'}}}post {always {echo "完成"}failure {echo "失败"}}
}

2. 阶段视图 Stage View

2.1 blue ocean可视化界面

全新的流水线控制ui,可重复执行某阶段代码

插件中心搜索blue ocean安装即可

2.2 post

流水线完成后可执行的任务

  • always 无论流水线或者阶段的完成状态。
  • changed 只有当流水线或者阶段完成状态与之前不同时。
  • failure 只有当流水线或者阶段状态为"failure"运行。
  • success 只有当流水线或者阶段状态为"success"运行。
  • unstable 只有当流水线或者阶段状态为"unstable"运行。例如:测试失败。
  • aborted 只有当流水线或者阶段状态为"aborted "运行。例如:手动取消。
2.3 agent

可以指定执行节点

label 指定运行job的节点标签

any 不指定,由Jenkins分配

pipeline {agent {node {label "jenkins-02"}}stages {stage('拉取代码') {steps {sh """sleep 10"""echo '拉取代码完成'}}stage('执行构建') {steps {echo '执行构建完成'}}}post {always {echo "完成"}failure {echo "失败"}}
}

3. pipeline中执行自动化构建

pipeline {agent anytools {maven "maven3"}stages {stage("拉取代码") {steps {git branch: 'main', credentialsId: 'gitlab', url: 'http://192.168.44.103/root/java-project.git'echo '拉取成功'}}stage("执行构建") {steps {//    sh "mvn --version"sh """ cd demo-1mvn clean package"""echo '构建完成'}}stage("clean test server"){steps{sshPublisher(publishers: [sshPublisherDesc(configName: 'testserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''rm -rf *docker stop demo
docker rm demo
docker rmi demo
''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '/root')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}stage("发送jar包到测试服务器") {steps {sshPublisher(publishers: [sshPublisherDesc(configName: 'testserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/jarfile', remoteDirectorySDF: false, removePrefix: 'demo-1/target', sourceFiles: '**/demo*.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '''docker build -t demo .
docker run -d -p 8080:8080 --name demo demo''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/', remoteDirectorySDF: false, removePrefix: 'demo-1/docker', sourceFiles: 'demo-1/docker/dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo 'jar send over!'}}}
}

三、声明式流水线

好处

  • 更像是在Jenkins web ui中的操作
  • 可读性比较高
  • 可以使用blue ocean自动生成
  • 支持语法检查

坏处

  • 代码逻辑能力比脚本式弱,不能完成特别复杂的任务

四、脚本式流水线

好处

  • 更少的代码和弱规范要求
  • 更灵活的自定义代码操作
  • 不受约束,可以构建特别复杂的工作流和流水线

坏处

  • 读写对编程要求比较高
  • 比声明式流水线代码更复杂

相关文章:

Jenkins全栈体系(二)

Jenkins 第三章 Jenkins Git Maven 自动化部署配置 十、几种构建方式 快照依赖构建/Build whenever a SNAPSHOT dependency is built 当依赖的快照被构建时执行本job 触发远程构建 (例如,使用脚本) 远程调用本job的restapi时执行本job job依赖构建/Build after other proj…...

c++11 标准模板(STL)(std::basic_istream)(九)

定义于头文件 <istream> template< class CharT, class Traits std::char_traits<CharT> > class basic_istream : virtual public std::basic_ios<CharT, Traits> 类模板 basic_istream 提供字符流上的高层输入支持。受支持操作包含带格式的…...

OpenSource - Spring Startup Ananlyzer

文章目录 &#x1f680;Optimization of Spring Startup核心能力&#x1f4c8;Spring应用启动数据采集报告应用启动时长优化 &#x1f4c8;Spring应用启动数据采集报告安装jar包配置项应用启动自定义扩展 &#x1f680;应用启动时长优化支持异步化的Bean类型接入异步Bean优化 开…...

ES6迭代器、Set、Map集合和async异步函数

目录 迭代器 Iterator 的作用 Iterator 的遍历过程 Set Map集合 map和对象区别? async异步函数 迭代器 迭代器&#xff08;Iterator&#xff09;就是这样一种机制。它是一种接口&#xff0c;为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口&…...

mac android studio设置跟mac系统一样的快捷键

mac版的android studio 跟mac系统的快捷键不一样,主要修改了下面几组操作,为了跟mac系统快捷键相同 setting->Keymap 搜索bottom 修改3个快捷键: cmd↓ 设置让鼠标移动到屏幕最后面 shiftcmd↓ 选中从当前位置到屏幕最下面 option↓. 或者 end 滚动到屏幕最下方 // 因为默认…...

Java-通过IP获取真实地址

文章目录 前言功能实现测试 前言 最近写了一个日志系统&#xff0c;需要通过访问的 IP 地址来获取真实的地址&#xff0c;并且存到数据库中&#xff0c;我也是在网上看了一些文章&#xff0c;遂即整理了一下供大家参考。 功能实现 这个是获取正确 IP 地址的方法&#xff0c;可…...

Java代码实现word转PDF

import com.spire.doc.Document; import com.spire.doc.FileFormat; import lombok.extern.slf4j.Slf4j; public class WordConvertPdf { /** * word转pdf * param wordPathName word文件路径及名称 * param pdfPathName pdf生成路径及名称 */ public static void wordToPdf(…...

Java设计模式-简单工厂(Simple Factory)模式

介绍 简单工厂&#xff08;Simple Factory&#xff09;模式&#xff0c;又称为静态工厂方法&#xff08;Static Factory Method&#xff09;模式。 由一个工厂类来创建具体产品&#xff0c;即创建具体类的实例。 简单工厂模式从概念上涉及三个角色&#xff1a; 抽象产品角色…...

微软所有业务线梳理

目录 一、Windows 二、Office 三、Surface 四、Xbox 五、Azure 六、Dynamics 七、LinkedIn 八、Bing...

SDN系统方法 | 1. 概述

随着互联网和数据中心流量的爆炸式增长&#xff0c;SDN已经逐步取代静态路由交换设备成为构建网络的主流方式&#xff0c;本系列是免费电子书《Software-Defined Networks: A Systems Approach》的中文版&#xff0c;完整介绍了SDN的概念、原理、架构和实现方式。原文: Softwar…...

【数据分享】1929-2022年全球站点的逐日平均压力数据(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 对于具体到监测站点的气象数据&#xff0c;之前我们分享过1929-2022年全球气象…...

Profibus DP主站转Modbus TCP网关profibus从站地址范围

远创智控YC-DPM-TCP网关。这款产品在Profibus总线侧实现了主站功能&#xff0c;在以太网侧实现了ModbusTcp服务器功能&#xff0c;为我们的工业自动化网络带来了全新的可能。 远创智控YC-DPM-TCP网关是如何实现这些功能的呢&#xff1f;首先&#xff0c;让我们来看看它的Profib…...

MySQL子查询

&#x1f607;作者介绍&#xff1a;一个有梦想、有理想、有目标的&#xff0c;且渴望能够学有所成的追梦人。 &#x1f386;学习格言&#xff1a;不读书的人,思想就会停止。——狄德罗 ⛪️个人主页&#xff1a;进入博主主页 &#x1f5fc;专栏系列&#xff1a;进入MySQL专栏知…...

学IT上培训班有用吗?

在学习IT技术的过程中&#xff0c;你是否也被安利过各种五花八门的技术培训班&#xff1f;这些培训班都是怎样向你宣传的&#xff0c;你又对此抱有着怎样的态度呢&#xff1f;在培训班里学技术&#xff0c;真的有用吗&#xff1f; 首先&#xff0c;IT行业是一个充满机遇和挑战…...

BI如何对接金蝶云星空数据源?奥威BI SaaS平台有绝招

传统BI部署时需要大量硬件和软件支持&#xff0c;而SaaS BI不仅不需要&#xff0c;还能让企业的数据可视化分析变得更加简单便捷&#xff0c;因此已经渐渐成为数字化时代的BI新趋势。那么&#xff0c;SaaS BI平台是如何快速接入数据完成数据可视化分析的&#xff1f;下面就以奥…...

鼎镁科技冲刺A股上市失败,董事长涂季冰三年薪水超过6000万元

7月15日&#xff0c;上海证券交易所披露的信息显示&#xff0c;因鼎镁新材料科技股份有限公司&#xff08;下称“鼎镁科技”&#xff09;审核不通过&#xff0c;上海证券交易所终止其发行上市审核。这意味着&#xff0c;鼎镁科技此次上市之旅彻底失败。 据贝多财经了解&#xf…...

PostgreSQL【应用 02】扩展SQL之C语言函数(编写、编译、载入)实例分享

C语言函数 1.准备1.1 开发文档1.2 工具安装 2.开始2.1 编写C语言函数2.2 编译和链接动态载入的函数 通过使用 PostgreSQL 的 C 函数接口&#xff0c;我们可以编写用 C 语言实现的函数&#xff0c;并将其集成到数据库中。这些函数可以在 SQL 查询中像其他内置函数一样被调用&…...

day37-框架

0目录 框架 1.框架介绍 2. SSM三大框架简介 3.Mybatis 4.拓展 1.框架介绍 1.1 为什么使用框架&#xff1f; &#xff08;1&#xff09;框架效率高&#xff0c;成本低 &#xff08;2&#xff09;框架是别人写好的构建&#xff0c;我们只需学会如何使用它&#xff08;可维护性…...

基于STM32单片机的智能家居烟雾温度火灾防盗报警的设计与实现

功能介绍 以STM32单片机作为主控系统&#xff1b;LCD1602液晶显示屏来显示显示测得的值&#xff1b;SR501人体红外感应是否有人进行防盗&#xff1b;通过烟雾传感器MQ-2获取前的烟雾值&#xff1b;通过DHT11温湿度传感器来获取当前的温湿度&#xff1b;所有的信息通过通过esp82…...

jenkins 采用ssh方式连接gitlab连接不上

一、gitlab 添加jenkins服务器的公钥 jenkins 生成秘钥命令 ssh-keygen -t rsa2.jenkins 秘钥地址&#xff1a; cd /root/.ssh3.复制公钥 到gitlab 添加 cat id_rsa_pub4.添加私钥到jenkins cat id_rsa5.绑定&#xff08;顺利的话到这里就结束了&#xff09; &#xff0…...

【RAG召回】BM25算法示例

rank-bm25 功能示例 本篇将通过多个示例&#xff0c;快速展示 rank-bm25 库的核心功能。不使用jieba。 准备工作 首先&#xff0c;确保您已经安装了 rank-bm25。 pip install rank-bm25接下来&#xff0c;我们定义一个通用的中文语料库和分词函数。这里我们使用简单的单字切…...

MySQL的日志

就相当于人的日记本&#xff0c;记录每天发生的事&#xff0c;可以对数据进行追踪 一、错误日志 也就是存放错误信息的 二、二进制日志-binlog 在低版本的MySQL中&#xff0c;二进制日志是不会默认开启的 存放除了查询语句的其他语句 三、查询日志 查询日志会记录客户端的所…...

MCP(Model Context Protocol)与提示词撰写

随着大模型&#xff08;LLM&#xff09;在复杂任务中的普及&#xff0c;如何让模型高效调用外部工具和数据成为关键挑战。传统函数调用&#xff08;Function Calling&#xff09;依赖开发者手动封装 API&#xff0c;而 MCP&#xff08;Model Context Protocol&#xff09; 通过…...

DQN算法(详细注释版)

DQN算法 DQN算法使用的常见问题 Q1: 为什么用目标网络而非Q网络直接计算&#xff1f; 答案&#xff1a;避免“移动目标”问题&#xff08;训练中Q网络频繁变化导致目标不稳定&#xff09;&#xff0c;提高收敛性。 Q2: 为什么用 max 而不是像SARSA那样采样动作&#xff1f;…...

Spring Cloud 多机部署与负载均衡实战详解

&#x1f9f1; 一、引言 为什么需要多机部署&#xff1f; 解决单节点性能瓶颈&#xff0c;提升系统可用性和吞吐量 在传统单机部署模式下&#xff0c;系统的所有服务或应用都运行在单一服务器上。这种模式在小型项目或低并发场景中可能足够&#xff0c;但随着业务规模扩大、用…...

【西门子杯工业嵌入式-5-串口实现数据收发】

西门子杯工业嵌入式-5-串口实现数据收发 一、通信基础1.1 什么是通信1.2 嵌入式系统中的通信 二、串行通信原理2.1 串行通信简介2.2 通信参数约定 三、GD32F470 串口资源与性能3.1 串口硬件资源 四、串口通信的实现4.1 串口初始化流程4.2 串口发送函数编写4.3 使用 printf 实现…...

aardio 简单网页自动化

WebView自动化&#xff0c;以前每次重复做网页登录、搜索这些操作时都觉得好麻烦&#xff0c;现在终于能让程序替我干活了&#xff0c;赶紧记录下这个超实用的技能&#xff01; 一、初次接触WebView WebView自动化就像给程序装了个"网页浏览器"&#xff0c;第一步得…...

大故障:阿里云核心域名爆炸了

大故障&#xff1a;阿里云核心域名被拖走了 今天早上许多群里出现网站故障的讨论&#xff0c;比如 cnblogs 全国访问一片红&#xff0c;一看原来是阿里云又出故障了。 今天早上许多群里出现网站故障的讨论&#xff0c;比如 cnblogs 全国访问一片红&#xff0c;一看原来是阿里云…...

Qt学习及使用_第1部分_认识Qt---学习目的及技术准备

前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...

Hadolint:Dockerfile 语法检查与最佳实践验证的终极工具

在容器化应用开发的浪潮中,Dockerfile 作为构建 Docker 镜像的核心配置文件,其质量直接影响着应用的安全性、稳定性和可维护性。然而,随着项目复杂度的增加,手动检查 Dockerfile 不仅耗时,还容易遗漏潜在问题。今天,我要向大家介绍一款强大的工具——Hadolint,它将彻底改…...