Jenkins Tutorial
什么是Jenkins
Jenkins是一个自动化平台,它允许你使用pipelines去部署应用。它也可以自动化其他任务。
- BUILD
- TEST
- DEPLOYMENT
Jenkins 架构
首先,你拥有一个Master Server,它控制pipelines和安排Build到你的Agent上;
其次,你有Agents,能够运行在Build在它们的工作台上。

构建(Build)类型
Freestyle Build
- 创建一个Build最简单的方法
- 感觉就像Shell脚本一样
Pipelines
- 使用Jenkins files
- 使用 satge 分解构建的组件
安装Jenkins
这里使用Docker进行安装,也可以使用其他方式安装
https://www.jenkins.io/download/
$ docker pull jenkins/jenkins
$ docker run -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home --name jenkins-master --network jenkins jenkins/jenkins
访问http://localhost:8080/ 进入容器复制密码并粘贴

安装推荐的插件,创建管理员用户

配置

创建一个简单的Freestyle Job
- 点击新建Item

-
选择FreeStyle,点击创建

-
简单编写shell

-
在这里能看到构建历史

-
点击某个构建历史,查看控制台输出,发现我们编写的shell命令已经执行了

-
点击配置修改,点击查看环境变量列表

-
去使用Jenkins环境变量,填写在Build Steps处
echo "Hello world"
echo "The build ID of this job is ${BUILD_ID}"
echo "The build URL of this job is ${BUILD_URL}"
- 点击立即构建,查看控制台输出

- 重新更新shell script在Build Steps处
echo "Hello world"
echo "The build ID of this job is ${BUILD_ID}"
echo "The build URL of this job is ${BUILD_URL}"ls -ltr
echo "Jenkins" > test.txt
ls -ltr
- 保存并构建,查看控制台输出,你可以看到一开始没有文件,之后出现了文件

-
点击工作空间,你可以看到文件

-
再次构建一次,查看控制台输出,我们可以看到之前的文件依旧存在

-
如果我们需要每次构建去清除工作空间,配置勾选此选项

-
再此查看控制台输出,我们发现之前的文件已经不存在,重新生成了新的文件

探索Jenkins文件系统和工作空间
#进入容器
$ docker exec -it jenkins-master bashjenkins@9fbb1603c9e7:/$ cd /var/jenkins_home/
jenkins@9fbb1603c9e7:~$ ls -ltra
total 128
drwxr-xr-x 1 root root 4096 Dec 19 15:06 ..
drwxr-xr-x 10 jenkins jenkins 4096 Dec 24 03:08 war
drwxr-xr-x 3 jenkins jenkins 4096 Dec 24 03:08 .cache
drwxr-xr-x 3 jenkins jenkins 4096 Dec 24 03:08 .java
-rw-r--r-- 1 jenkins jenkins 64 Dec 24 03:08 secret.key
-rw-r--r-- 1 jenkins jenkins 0 Dec 24 03:08 secret.key.not-so-secret
drwxr-xr-x 2 jenkins jenkins 4096 Dec 24 03:08 nodes
-rw-r--r-- 1 jenkins jenkins 171 Dec 24 03:08 jenkins.telemetry.Correlator.xml
drwxr-xr-x 2 jenkins jenkins 4096 Dec 24 03:08 userContent
-rw-r--r-- 1 jenkins jenkins 129 Dec 24 03:08 queue.xml.bak
-rw-r--r-- 1 jenkins jenkins 100 Dec 24 03:14 copy_reference_file.log
-rw-r--r-- 1 jenkins jenkins 156 Dec 24 03:14 hudson.model.UpdateCenter.xml
-rw-r--r-- 1 jenkins jenkins 1037 Dec 24 03:14 nodeMonitors.xml
-rw-r--r-- 1 jenkins jenkins 1661 Dec 24 03:14 config.xml
-rw-r--r-- 1 jenkins jenkins 0 Dec 24 03:14 .lastStarted
drwxr-xr-x 87 jenkins jenkins 12288 Dec 24 03:22 plugins
-rw------- 1 jenkins jenkins 1680 Dec 24 03:22 identity.key.enc
drwxr-xr-x 2 jenkins jenkins 4096 Dec 24 03:22 updates
-rw-r--r-- 1 jenkins jenkins 370 Dec 24 03:22 hudson.plugins.git.GitTool.xml
drwxr-xr-x 3 jenkins jenkins 4096 Dec 24 03:22 .groovy
drwxr-xr-x 3 jenkins jenkins 4096 Dec 24 03:24 users
-rw-r--r-- 1 jenkins jenkins 179 Dec 24 03:24 jenkins.model.JenkinsLocationConfiguration.xml
-rw-r--r-- 1 jenkins jenkins 5 Dec 24 03:24 jenkins.install.UpgradeWizard.state
-rw-r--r-- 1 jenkins jenkins 5 Dec 24 03:24 jenkins.install.InstallUtil.lastExecVersion
-rw-r--r-- 1 jenkins jenkins 1 Dec 24 03:41 .owner
drwxr-xr-x 3 jenkins jenkins 4096 Dec 24 03:48 jobs
drwx------ 2 jenkins jenkins 4096 Dec 24 03:55 secrets
drwxr-xr-x 3 jenkins jenkins 4096 Dec 24 04:21 logs
-rw-r--r-- 1 jenkins jenkins 504 Dec 24 04:24 org.jenkinsci.plugins.resourcedisposer.AsyncResourceDisposer.xml
drwxr-xr-x 3 jenkins jenkins 4096 Dec 24 04:24 workspace
-rw-r--r-- 1 jenkins jenkins 129 Dec 24 04:25 queue.xml
drwxr-xr-x 15 jenkins jenkins 4096 Dec 24 04:25 .
- 进入
/var/jenkins_home/workspace,可以看到我们的Job Name
jenkins@9fbb1603c9e7:~$ cd workspace/
jenkins@9fbb1603c9e7:~/workspace$ ls -ltra
total 12
drwxr-xr-x 2 jenkins jenkins 4096 Dec 24 04:24 my_first_job
drwxr-xr-x 3 jenkins jenkins 4096 Dec 24 04:24 .
drwxr-xr-x 15 jenkins jenkins 4096 Dec 24 04:25 ..
- 进入我们创建的Job目录下
jenkins@9fbb1603c9e7:~/workspace$ cd my_first_job/
jenkins@9fbb1603c9e7:~/workspace/my_first_job$ ls -ltra
total 12
-rw-r--r-- 1 jenkins jenkins 8 Dec 24 04:24 test.txt
drwxr-xr-x 3 jenkins jenkins 4096 Dec 24 04:24 ..
drwxr-xr-x 2 jenkins jenkins 4096 Dec 24 04:24 .
jenkins@9fbb1603c9e7:~/workspace/my_first_job$ cat test.txt
Jenkins
使用Jenkins运行Python脚本
- 新建一个Job

- 添加Git仓库位置https://github.com/devopsjourney1/jenkins-101

- 编写Shell Script在Build Steps

- 点击构建查看控制台输出,发现进行拉取Git仓库执行helloworld.py文件

helloworld.py
print("Hello world")
设置Docker Cloud Agent


- 点击clouds

- 安装插件

- 你可以在这里添加你需要的云节点(如Docker ,AWS,k8s)

设置Commit触发
- 在Job的此位置设置,这样类似于设置一个Crontab去检测Git仓库最后一次的commit提交,然后执行自动化

H/5 * * * *每5分钟去进行一次检测
Pipelines
- 创建一个任务,选择Pipeline(选择流水线)

- 向下拉取,你需要添加pipeline脚本在这里

pipeline文件格式
pipeline { #所有命令包裹着pipeline里agent { node { #通过标签选择agentlabel 'jenkins-agent-goes-here'}}triggers { #触发器pollSCM '* * * * *'} stages { #stages->stage->stepsstage('Build') {steps {echo "Building.."sh '''echo "doing build stuff.."'''}}stage('Test') {steps {echo "Testing.."sh '''echo "doing test stuff..'''}}stage('Deliver') {steps {echo 'Deliver....'sh '''echo "doing delivery stuff.."'''}}}
}
- 将这段pipeline脚本填入,并保存构建
pipeline {agent any #选择任意一个可用的节点当作agent 这里使用的为本机stages {stage('Build') {steps {echo "构建中.."}}stage('Test') {steps {echo "测试中.."}}stage('Deploy') {steps {echo '部署中..'}}}
}

- 查看控制台输出

相关文章:
Jenkins Tutorial
什么是Jenkins Jenkins是一个自动化平台,它允许你使用pipelines去部署应用。它也可以自动化其他任务。 BUILDTESTDEPLOYMENT Jenkins 架构 首先,你拥有一个Master Server,它控制pipelines和安排Build到你的Agent上; 其次&…...
css mask 案例
文章目录 一、基本用法二、图案遮罩二、文字阴影效果三、日历探照灯效果 CSS的mask属性用于定义一个可重复使用的遮罩,可以将其应用到任何可视元素上。这个功能类似于Photoshop中的图层蒙版。通过mask属性,可以创建独特的效果,比如圆形、渐变…...
案例系列:Movielens_预测用户对电影的评分_基于行为序列Transformer的推荐系统
文章目录 简介数据集设置准备数据下载并准备数据框将电影评分数据转换为序列 定义元数据为训练和评估创建 tf.data.Dataset创建模型输入编码输入特征创建一个二叉搜索树模型运行训练和评估实验结论 描述: 使用行为序列Transformer(BST)模型在…...
单词接龙[中等]
一、题目 字典wordList中从单词beginWord和endWord的 转换序列 是一个按下述规格形成的序列beginWord -> s1 -> s2 -> ... -> sk: 1、每一对相邻的单词只差一个字母。 2、对于1 < i < k时,每个si都在wordList中。注意,beg…...
机器人制作开源方案 | 森林管理员
作者:李佳骏、常睿康、张智斌、李世斌、高华耸 单位:山西能源学院 指导老师:赵浩成、郜敏 1. 研究背景 森林作为地球上可再生自然资源及陆地生态的主体,在人类生存和发展的历史中起着不可代替的作用,它不仅能提供…...
Laravel框架使用phpstudy本地安装的composer用Laravel 安装器进行安装搭建
一、首先需要安装Laravel 安装器 composer global require laravel/installer 二、安装器安装好后,可以使用如下命令创建项目 laravel new sys 三、本地运行 php artisan serve 四、 使用Composer快速安装Laravel5.8框架 安装指定版本的最新版本(推荐&a…...
炫酷登录注册界面【超级简单 jQuery+JS+HTML+CSS实现】
一:源码获取 这两天根据需求写了一个比较好看的有动态效果的登录注册切换页面,这里我将源码资源分享给大家,大家可以直接免费下载使用哦,没有 vip 的小伙伴找我私聊发送"登录注册"即可我给你发文件,此登录注…...
2023年国赛高教杯数学建模E题黄河水沙监测数据分析解题全过程文档及程序
2023年国赛高教杯数学建模 E题 黄河水沙监测数据分析 原题再现 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变化和人民生活的影响,以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾等方面都具有重要的理论指导…...
跨国企业传输大文件注意事项和解决方案
随着全球化的推进,越来越多的企业需要在跨国业务合作、项目交付、数据分析等方面展开合作,这就带来了大量大文件的传输需求。大文件传输是指文件大小超过1GB的传输,通常涉及视频、音频、图片、文档、压缩包等多种格式。跨国传输大文件不仅需要…...
【Redis】Redis 的数据类型
有五种常用数据类型:String、Hash、Set、List、SortedSet。以及三种特殊的数据类型:Bitmap、HyperLogLog、Geospatial ,其中HyperLogLog、Bitmap的底层都是 String 数据类型,Geospatial 的底层是 Sorted Set 数据类型。 五种常用…...
QT小技巧 - 使用QMovie进行gif切帧
简介 使用QMovie 将 gif 进行切帧, magick 进行合并代码 QString gifPath "E:\\workspace\\qt\\gif2imgs\\203526qre64haq3ccoobqi.gif"; // 你的图片QMovie movie(gifPath); movie.setCacheMode(QMovie::CacheNone);qDebug() << movie.frameCou…...
ES-搜索
聚合分析 聚合分析,英文为Aggregation,是es 除搜索功能外提供的针对es 数据做统计分析的功能 - 功能丰富,提供Bucket、Metric、Pipeline等多种分析方式,可以满足大部分的分析需求 实时性高,所有的计算结果都是即时返回…...
微信小程序面试题
微信小程序面试题 请解释微信小程序的生命周期及其对应的钩子函数。 微信小程序的生命周期包括 onLaunch、onShow、onHide、onError、onPageNotFound 等阶段。对应的钩子函数分别是: onLaunch:小程序初始化时触发。onShow:小程序启动或从后台…...
OpenCV之图像匹配与定位
利用图像特征的keypoints和descriptor来实现图像的匹配与定位。图像匹配算法主要有暴力匹配和FLANN匹配,而图像定位是通过图像匹配结果来反向查询它们在目标图片中的具体坐标位置。 以QQ登录界面为例,将整个QQ登录界面保存为QQ.png文件,QQ登…...
掌握JWT:解密身份验证和授权的关键技术
JSON Web Token 1、什么是JWT2、JWT解决了什么问题3、早期的SSO认证4、JWT认证5、JWT优势6、JWT结构Header 标头Payload 负载 Signature 签名 7、代码实现添加依赖生成Token认证token 8、工具类9、JWT整合Web10、拦截器校验11、网关路由校验12、解决多用户登录的问题13、客户端…...
git命令和docker命令
1、git git是分布式的版本控制工具 git可以通过本地仓库管理文件的历史版本记录 # 本地仓库操作的命令 # 初始化本地库 git init # 添加文件到暂存区 git add . git checkout 暂存区要撤销的文件名称 # 提交暂存区文件 git commit -m 注释# 版本穿梭 # 查看提交记录 git log…...
【K8S in Action】服务:让客户端发现pod 并与之通信(2)
一 通过Ingress暴露服务 Ingress (名词) 一一进入或进入的行为;进入的权利;进入的手段或地点;入口。一个重要的原因是每个 LoadBalancer 服务都需要自己的负载均衡器, 以及 独有的公有 IP 地址, 而 Ingres…...
Spring Boot 中实现跨域的几种方式
前言 在现代Web应用中,由于安全性和隐私的考虑,浏览器限制了从一个域向另一个域发起的跨域HTTP请求。解决这个问题的一种常见方式是实现跨域资源共享(CORS)。Spring Boot提供了多种方式来处理跨域请求,本文将介绍其中的…...
WT2605C音频蓝牙语音芯片:单芯片实现蓝牙+MP3+BLE+电话本多功能应用
在当今的电子产品领域,多功能、高集成度成为了一种趋势。各种产品都需要具备多种功能,以满足用户多样化的需求。针对这一市场趋势,唯创知音推出了一款集成了蓝牙、MP3播放、BLE和电话本功能的音频蓝牙语音芯片——WT2605C,实现了单…...
计算机毕业设计 基于SpringBoot的高校宣讲会管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
