Day02-Jenkins与集成案例

Day02-Jenkins与集成案例

  • 1.概述
    • 1.1 什么是Jenkins
    • 1.2 Jenkins
  • 2. Jenkins快速上手指南
    • 2.1 部署JDK
    • 2.2 部署Jenkins(最新版)(略)
    • 2.2 部署jenkins (rpm版本)
    • 2.3 解锁Jenkins
    • 2.4 安装插件
      • 1)安装常见插件工具集
      • 2)手动添加插件
  • 3. 案例01:创建一个项目-初体验-Jenkins-Shell集成
    • 3.0 对jk配置
    • 3.1 创建并运行jenkins项目,执行Shell命令
    • 3.2 项目详细步骤
      • 0)创建对应的的目录
      • 1) 创建freestyle项目
      • 2) 配置项目基础信息
      • 3)配置构建保存(丢弃旧的构建)
      • 4) 配置参数化构建
      • 5) 配置构建与shell
    • 3.3 运行任务
      • 1) 运行工程
      • 2) 查看输出
      • 3) 检查输出
    • 3.5 小结
    • 3.6 所有构建记录是否要保留?
  • 4. 案例02:Jenkins实现Gitlab集成
    • 4.1 准备windows环境
    • 4.2 配置jenkins
      • 0) 进行hosts解析
      • 1)添加任务
      • 2)源码管理
      • 3)运行查看结果
    • 4.3 配置脚本
    • 4.4 案例小结
  • 5. 案例03: Jenkins基于tag标签的代码拉取与部署
    • 5.1 案例背景:
    • 5.2 准备代码
    • 5.3 安装jenkins获取git tag标签的插件
    • 5.4 创建Jenkins任务
    • 5.5 部署到web节点
    • 5.6 检查部署结果
    • 5.7 案例03小结
  • 今日总结

1.概述

1.1 什么是Jenkins

  • Jenkins 是一个开源持续集成的工具,是由 JAVA 开发而成。

  • Jenkins 是一个调度平台,本身不处理任何事情,调用插件来完成所有的工作。

  • 通过Jenkins完成,CI/CD…

    • DevOps
    • DevSecOps
      • dev 开发
      • ops 运行
      • sec 安全

image-20240516110432530

1.2 Jenkins

  • jenkins能将各种开源的软件集成为一体,从而实现不同功能的调度工作

image-20240516110625545

2. Jenkins快速上手指南

  • 安装Jenkins只需要简单几步即可完成。PS: Jenkins的安装方式很多,可参考。Jenkins官方安装文档

  • https://www.jenkins.io/zh/doc/book/installing/

系统要求/软件要求主机名配置ip
系统devops-oldboy-jenkins2c4G10.0.0.72/172.16.1.72
软件jdk 11版本
  • 安装方式
#1.rpm包/yum yum安装jenkins 
#2.war包   tomcat --> war
#3.jar包         java -jar xx.jar -参数.....

2.1 部署JDK

yum install -y java-11 #jdk

2.2 部署Jenkins(最新版)(略)

#配置jenkins源
[root@jenkins-node1 ~]# cat /etc/yum.repos.d/jenkins.repo
[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat-stable
gpgcheck=0#安装Jenkins
[root@jenkins-node1 ~]# yum install jenkins -y#启动Jenkins并加入开机自启动
[root@jenkins-node1 ~]# systemctl start jenkins
[root@jenkins-node1 ~]# systemctl enable jenkins
[root@oldboy-jenkins ~]# systemctl enable jenkins 
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on
[root@oldboy-jenkins ~]# systemctl start jenkins

2.2 部署jenkins (rpm版本)

#1. 安装jdk 
yum install -y java-11
#2. 安装rpm包
yum localinstall -y jenkins-2.361.4-1.1.noarch.rpm
rpm -ql jenkins 
#3.启动
systemctl enable jenkins 
systemctl start jenkins 
systemctl status jenkins.service
  • 检查端口进程

image-20240516113308413

  • 访问jenkins
jk.oldboylinux.cn:8080

2.3 解锁Jenkins

解锁 Jenkins,当您第一次访问新的Jenkins实例时,系统会要求您使用自动生成的密码对其进行解锁。浏览到http://jk.oldboylinux.cn:8080 并等待 解锁 Jenkins 页面出现。

image-20240516113718895

  • 选择关闭

image-20240516115801393

  • 提示jenkins已经就绪

image-20240516115911010

  • 登录

image-20240516115925277

2.4 安装插件

Jenkins插件安装方式
web页面,选择与安装(联网)一个一个找选择,安装重启jenkins
自己下载插件,jenkins替你安装(hpi)web页面一个一个安装,未来批量安装需要脚本
导入插件(手动,批量)去一个机器上面把已经下载安装的插件打包,新机器解压,修改所有者
jenkins不同版本的插件不通用
三种安装方式:
1.联网安装 通过互联网下载插件1) 需要知道插件名称   ( 需要知道要集成哪些软件或服务; )2) 在哪个位置进行插件安装 Manage Jenkins --> Mange Plugins注意: 1) 安装会比较的慢;需要等很久;2) 如果出现警告,要看提示; 不要盲目升级,很容易造成 Jenkins连带升级, 会出现其他很多插件无法使用;2.下载 .hpi 文件安装https://mirror.tuna.tsinghua.edu.cn/jenkins/plugins/git/latest/git.hpi3.导入插件将此前已经安装好的插件; 备份下来; 然后恢复;问题: 插件存储在哪个路径下: /var/lib/jenkins/plugins/

1)安装常见插件工具集

tar xf jenkins-2.361-plugins.tar.gz -C /var/lib/jenkins/plugins/
systemctl restart jenkins

image-20240516134825729

2)手动添加插件

image-20240516134911300

image-20240516134925557

image-20240516135107473

image-20240516135206290

  • 修改密码

image-20240516135312177

3. 案例01:创建一个项目-初体验-Jenkins-Shell集成

  • 通过jenkins 执行命令、脚本。

3.0 对jk配置

为了方便JK进行操作与管理各种节点,避免出现权限问题。

这里把jenkins运行用户改为root。

当然也可以给Jenkins配置sudo权限,这里我们选择修改为root。

之前的旧版本/etc/sysconfig/jenkins #文件即可.
现在版本:
/usr/lib/systemd/system/jenkins.service
egrep -i '^User|^Group'
/usr/lib/systemd/system/jenkins.service
User=root
Group=root
systemctl daemon-reload 
systemctl restart jenkins

3.1 创建并运行jenkins项目,执行Shell命令

  • 目标:
#jenkins 初体验  
通过运行jenkins 任务
提示我们进行:
选择
dev  #开发环境
prod #生产环境
把选择结果放在变量中choose。jenkins执行脚本case "$choose" indev)  echo "部署到测试环境"  ;;prod) echo "部署到生产环境"  ;;
esac

3.2 项目详细步骤

0)创建对应的的目录

  • dev目录和prod目录,表示测试环境和生产环境
  • 创建文件夹

image-20240516161050152

image-20240516161200474

  • 只需要修改名字即可

image-20240516161257291

1) 创建freestyle项目

image-20240516161409034

  • 进入到dev目录创建1个项目。

image-20240516161516145

image-20240516161543157

补充说明:

自由风格: 一般用于部署静态,各种都可以。

maven项目:java代码。

流水线(pipeline):把第1个或第2个任务通过指令(代码)方式实现。

2) 配置项目基础信息

3)配置构建保存(丢弃旧的构建)

image-20240516161705039

4) 配置参数化构建

  • 添加参数化构建

image-20240516162209336

  • 配置变量与选择的值

image-20240516162405472

5) 配置构建与shell

  • 添加执行shell

image-20240516162523725

  • 配置命令或代码

image-20240516162807468

case  "$choose"  indev)  echo "部署到测试环境"  ;;prod) echo "部署到生产环境"  ;;
esacecho "当前用户是:`whoami`"
echo "当前的路径:`pwd`"

3.3 运行任务

  • 运行项目

1) 运行工程

image-20240516162858962

image-20240516162957867

2) 查看输出

image-20240516163507891

3) 检查输出

image-20240516163713847

温馨提示:项目运行的时候

工作目录在/var/lib/jenkins/workspace/项目名字目录下

运行项目的用户是jenkins

3.5 小结

  • 通过jenkins实现带有参数的构建(执行任务的加入交互功能,类似于Shell脚本$1,$2,read命令)。
  • 通过jenkins执行shell指令(命令或脚本内容)。 ᲼
  • 查看输出与结果.

3.6 所有构建记录是否要保留?

  • 丢弃旧的构建

image-20240516165309055

image-20240516165439880

4. 案例02:Jenkins实现Gitlab集成

4.1 准备windows环境

  • 安装git-bash

image-20240522110421168

  • 准备代码目录(代码目录绝对路径中不要包含中文字符)

image-20240517084553982

  • 创建密钥并配置gitlab/gitee
ssh-keygen.exe
cat /c/Users/Administrator/.ssh/id_rsa.pub
  • 创建gitlab/gitee项目

image-20240517084652607

image-20240517085324040

  • 初始化并上传代码
#配置基本信息
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
git config --global --list
git remote -v
#初始化
git init
#配置远程仓库地址
git remote add origin git@gitlab.oldboylinux.cn:root/baskball.git#上传代码与标签
git add .
git commit  -m "v1.0"
git tag -a "v1.0" -m "v1.0"
git push  -u origin master
git push  -u origin  Վʔtags
  • 检查

image-20240517085748301

  • 检查可以上传代码到仓库中即可。

4.2 配置jenkins

0) 进行hosts解析

增加如下内容即可/etc/hosts
172.16.1.71 gitlab.oldboylinux.cn
172.16.1.72 jk.oldboylinux.cn

1)添加任务

image-20240517090505402

image-20240517090636622

2)源码管理

  • 下面配置源码部分内容,通过git方式拉去代码。

    • 配置git仓库地址(从gitlab或gitee获取)
  • 配置访问凭证

image-20240517090914760

image-20240517091010567

  • 配置私钥的凭证

image-20240517091105196

image-20240517091207563

  • 粘贴私钥信息(把windows下面的私钥复制出来)

image-20240517091259714

  • 选择新建的凭证

image-20240517091559138

注意如果出现host key checking 类错误提示:

命令行ssh gitlab.oldboylinux.cn 输入yes即可。

  • 配置下shell命令

image-20240517091720421

3)运行查看结果

image-20240517092017847

image-20240517091920800

4.3 配置脚本

  • 这部分配置build步骤,表示对拉取过来的代码进行处理
  • 这里选择的打包即可

image-20240517094927818

  • 构建与检查结果

image-20240517095104714

4.4 案例小结

  • 核心在于Jenkins上面创建Freestyle项目.
    • 参数化构建.
    • 配置源代码地址,拉取方式.
    • Build相关的操作.
      • 脚本.
      • 脚本,把代码分发到web服务器并解压.

image-20240517095153842

5. 案例03: Jenkins基于tag标签的代码拉取与部署

5.1 案例背景:

  • 案例02中拉取的代码总是最新的.
  • 目前我们需要部署指定的tag标签(版本)的代码.
  • 最后代码打包并分发web服务器.
  • 整体流程与案例02类似.

5.2 准备代码

  • 修改index.html,修改标题.

  • 提交,打标签,创建出v2.0 v3.0版本即可.

  • 修改代码标题

image-20240517100105198

  • 提交代码
 git add .git commit -m v3.0git tag -a v3.0 -m v3.0git push -u origin --allgit push -u origin --tags
  • 检查

image-20240517100012023

5.3 安装jenkins获取git tag标签的插件

  • git parameter

image-20240517100711185

image-20240517101238913

  • 重启jenkins
systemctl restart jenkins

image-20240517100600118

5.4 创建Jenkins任务

  • 创建新的自由风格项目

image-20240517100345999

  • 添加参数化构建之git参数

image-20240517101355918

  • 配置git参数

image-20240517102117646

  • 配置源码管理

image-20240517101801999

  • 配置每次构建之前清空工作目录(避免缓存导致问题)

image-20240517102000755

  • 配置Build步骤(shell脚本)

image-20240517102244946

  • 检查结果

image-20240517102410628

5.5 部署到web节点

  • web节点的准备
[root@web01 ~]# cat /etc/nginx/nginx.conf 
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid       /var/run/nginx.pid;
events {worker_connections  1024;
}
http {include       /etc/nginx/mime.types;default_type application/octet-stream;log_format main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile       on;#tcp_nopush     on;keepalive_timeout  65;#gzip on;include /etc/nginx/conf.d/*.conf;
}[root@web01 ~]# cat /etc/nginx/conf.d/ball.conf 
server {listen 80;server_name ball.oldboylinux.cn;access_log /var/log/nginx/ball.access.log main;error_log   /var/log/nginx/ball.error.log notice;root /app/code/ball;location / {index index.html;}}
  • 创建密钥认证
 ssh-keygen ssh-copy-id root@172.16.1.7ssh root@172.16.1.7 hostname -I
  • jenkins项目配置(shell部分)
echo "您当前部署的代码版本为:${git_tag}"
#1. 打包压缩
tar zcf /tmp/baskball-${git_tag}.tar.gz   .
#2. 分发
##for + scp 
scp /tmp/baskball-${git_tag}.tar.gz root@172.16.1.7:/tmp/
#3. 解压
ssh root@172.16.1.7 "tar xf /tmp/baskball-${git_tag}.tar.gz -C /app/code/ball/"

5.6 检查部署结果

image-20240517103856429

image-20240517104017273

5.7 案例03小结

  • 与案例02类似
  • 多了1个参数化构建,获取git标签.
  • 部署web节点.
  • 完整的代码上线流程.

今日总结

  • Jenkins案例02和案例03核心.
    • 掌握两个案例流程,理解与说出来.
    • Jenkins页面操作熟练,摆脱笔记.
  • 复习下密钥认证,脚本判断与循环.

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

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

相关文章

力扣404周赛 T1/T2/T3 枚举/动态规划/数组/模拟

博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 3200.三角形的最大高度【简单】 题目: 给你两个整数 red 和 b…

【C++】vector的底层原理及实现

文章目录 vector的底层结构迭代器容量操作size()capacity()reserve()resize() 默认成员函数构造无参构造函数带参构造函数 析构拷贝构造赋值重载 operator[ ]插入删除操作insert()任意位置插入erase()任意位置删除push_back()尾插pop_back()尾删 vector的底层结构 我们的目的不…

开源之夏|祝贺MatrixOne开源社区项目中选同学!

在本届「开源之夏 2024」活动中,MatrixOne开源社区共计上线3个项目任务,最终有 3位同学成功突围。接下来让我们看看每个项目的详细中选情况: 中选学生公示 项目名称:基于大语言模型的操作系统任务自动识别,拆解&#…

Stable Diffusion教程:如何实现人脸一致

在AI绘画中,一直都有一个比较困难的问题,就是如何保证每次出图都是同一个人。今天就这个问题分享一些个人实践,大家和我一起来看看吧。 一. 有哪些实现方式 方式1:固定Seed种子值。 固定Seed种子值出来的图片人物确实可以做到一…

大语言模型系列-Transformer(二)

Transformer 模型的入门可以从以下几个方面开始: 1. 理解基本概念 序列到序列(Sequence-to-Sequence)任务:Transformer 模型主要用于这类任务,如机器翻译、文本摘要等。注意力机制(Attention Mechanism&a…

PyTorch基础(23)-- Tensor.scatter_()方法

一、前言 本次要介绍的函数为Tensor.scatter_函数,也是PyTorch中常用的函数之一,但遗憾的是,我想在网络上查询该函数的用法时,大部分的文章都是直接给出一个示例,看完之后,其中的原理我还是无法理解&#…

python生成器在读取接口用例中应用解析

Python生成器Generator Python生成器(Generator)是一种特殊类型的函数,它可以通过yield语句逐步生成值。 生成器提供了一种延迟计算的方式,可以逐步产生结果,而不是一次性生成所有的值。 1、生成器原理: …

2024年【A特种设备相关管理(A4电梯)】试题及解析及A特种设备相关管理(A4电梯)模拟试题

题库来源:安全生产模拟考试一点通公众号小程序 A特种设备相关管理(A4电梯)试题及解析根据新A特种设备相关管理(A4电梯)考试大纲要求,安全生产模拟考试一点通将A特种设备相关管理(A4电梯&#x…

Mac密室逃脱游戏推荐:Escape Simulator for mac安装包

Escape Simulator 是一款逃生模拟游戏,玩家在游戏中需要寻找线索、解决谜题,以逃离各种房间或环境。这种类型的游戏通常设计有多个关卡或场景,每个场景都有不同的设计和难度。 在 Escape Simulator 中,玩家的目标通常是找到出口或…

东方韵味:红酒与茶道的很好邂逅

在古老的东方,茶道与红酒各自承载着深厚的文化底蕴和历史传承。当这两大传统文化碰撞、交融,仿佛展开了一幅绚烂多姿的画卷,既展现了东方的神秘韵味,又融入了红酒的异国风情。今天,就让我们一同探索这场红酒与茶道的很…

详解微服务应用灰度发布最佳实践

作者:子丑 本次分享是站在 DevOps 视角的灰度发布实践概述,主要内容包括以下四个方面: 第一,灰度发布要解决的问题; 第二,灰度发布的四种典型场景; 第三,如何把灰度发布融入到应…

2024年07月03日 Redis部署方式和持久化

Redis持久化方式:RDB和AOF,和混合式 RDB:周期备份模式,每隔一段时间备份一份快照文件,从主线程Fork一个备份线程出来备份,缺点是会造成数据的丢失。 AOF:日志模式,每条命令都以操作…

Java8环境安装(jdk1.8安装)详细教程

Java 8环境安装(jdk1.8安装)详细教程 Java 8(也称为JDK 1.8),是Oracle公司于2014年3月发布的一个重要的Java语言版本。这个版本自发布以来,因其众多的新特性和改进,被认为是Java语言发展历程中…

itk::ShapedNeighborhoodIterator类C2516问题

错误问题&#xff1a; 1>C:\itk\src-5.3.0\Modules\Core\Common\include\itkShapedNeighborhoodIterator.h(183,1): error C2516: itk::ShapedNeighborhoodIterator<TImage,TBoundaryCondition>::ConstIterator: is not a legal base class 1>C:\itk\src-5.3.0\Mo…

【FFmpeg】avcodec_send_frame函数

目录 1.avcodec_send_frame1.1 将输入的frame存入内部buffer&#xff08;encode_send_frame_internal&#xff09;1.1.1 frame的引用函数&#xff08;av_frame_ref &#xff09;1.1.1.1 帧属性的拷贝&#xff08;frame_copy_props&#xff09;1.1.1.2 buffer的引用函数&#xf…

Appium 使用隐式等待,无法执行代码怎么办?

简介 添加等待是为了确保自动化脚本在执行过程中与应用程序之间的同步和稳定性。 应用程序的响应时间是不确定的&#xff0c;可能存在网络延迟、加载时间、动画效果等因素。如果在执行自动化脚本时没有适当的等待机制&#xff0c;脚本可能会在应用程序还未完成相应操作或加载完…

转让5000万无区域能源公司要求和流程

国家局的公司&#xff0c;也就是无地域无区域性的公司名称。这样的公司是还可以继续注册的&#xff0c;但是想要拥有国家局无区域的名称就不是那么容易的了。总局的企业要求高&#xff0c;也是实力的体现。对字号有保护。所以有很多人都对无地域的名称一直情有独钟。现有一家名…

智能视频监控平台LntonCVS视频监控汇聚平台系统详细介绍

视频监控综合管理平台是专为大中型用户设计的安防管理软件&#xff0c;旨在实现跨区域网络化视频监控的集中管理。该平台集成了信息资源管理、设备管理、用户管理、网络管理和安全管理等多项功能&#xff0c;能够集中管理监控中心的所有视频图像&#xff0c;支持多品牌设备联网…

AI基准测评(下):视频生成、代码能力、逻辑推理,AI是否已经超越人类?

本文作者&#xff1a;王加龙&#xff0c;阿里云高级算法专家 文章推荐 AI实测&#xff5c;基于图像、语言与声音&#xff0c;人工智能是否已经超越了人类&#xff1f; 知乎AI产品“直答”正式上线&#xff01;文心一言4.0 Turbo来袭&#xff0c;可为农民提供专业指导&#x…

Fork/Join框架

什么是 Fork/Join Fork/Join 框架是 Java7 提供了的一个用于并行执行任务的框架&#xff0c; 是一个把大任务分割成若干个小任务&#xff0c;最终汇总每个小任务结果后得到大任务结果的框架。 分治 我们再通过 Fork 和 Join 这两个单词来理解下 Fork/Join 框架&#xff0c;F…