Day03-Jenkins与集成案例

Day03-Jenkins与集成案例

  • 6. CD持续交付,持续部署实现方案
  • 7. 案例04: basketball案例,搭建开发测试专用的任务
    • 7.1 任务要求
    • 7.2 步骤
    • 7.3 详细步骤
      • 1)安装插件
      • 2)创建任务
    • 7.4 gitlab配置钩子
      • 1) 解除钩子局域网访问限制
      • 2) gitlab配置钩子
    • 7.5 与部署相关的配置与脚本
    • 7.6 案例小结:
  • 8. 案例05: java项目代码上线项目
    • 8.1 项目描述
    • 8.2 项目环境
    • 8.3 手动实现
      • 1) 代码上传到gitlab
      • 2) 配置maven
      • 3) jenkins拉取代码与手动编译代码
      • 4) war包的部署
    • 8.4 自动实现
  • 今日总结:
    • 熟练使用今日案例05.

6. CD持续交付,持续部署实现方案

CD方案优点缺点应用场景与建议
使用Jenkins执行Shell命令,脚本简单,通用shell编程,集群中有大批量节点的时候效率低通用的,初学推荐使用
通过Jenkins的插件Publish Over SSH插件实现。(分发文件,远程执行命令)。简单所有被管理节点都要在Jenkins页面配置机器较少可以用用2-3台
᲼使用Jenkins执行Ansible剧本、Ad-hoc批量管理与维护需要掌握Ans剧本,模块网站集群批量更新.jk+ansible命令或jk+ansible插件
使用Jenkins执行Docker指令。(架构中使用到了docker)更加简单,适用于集群部署。需要掌握dockerfile,dockercompose书写jk+docker命令或docker插件.jk+ansible+docker
jenkins 交付到k8s集群jk+k8s…

7. 案例04: basketball案例,搭建开发测试专用的任务

7.1 任务要求

  • 开发人员书写代码,上传到代码仓库.
  • 只要仓库收到开发上传的代码,触发jenkins 04-test-job测试任务.
  • jenkins去拉取代码仓库最新的代码并部署到测试环境中.
  • 这个案例一般用于测试环境自动化部署代码

image-20240521140710013

7.2 步骤

  • jenkins添加gitlab插件(gitee用).

  • 在jenkins创建钩子令牌(认证).

  • 在gitlab配置jenkins钩子和令牌.

  • 测试,提交代码.

image-20240521143420068

7.3 详细步骤

1)安装插件

image-20240521142424361

image-20240521142530789

2)创建任务

image-20240521141625362

image-20240521143519597

image-20240521143705148

  • 开启构建触发器:获取钩子地址和创建令牌

image-20240521144219612

image-20240521144257633

7.4 gitlab配置钩子

1) 解除钩子局域网访问限制

image-20240521150556554

image-20240521150704847

2) gitlab配置钩子

  • 进入到Gitlab项目中进行配置.

image-20240521145755570

image-20240521145906564

  • 测试钩子

image-20240521150842672

  • 测试结果

image-20240521150927313

image-20240521151116523

  • 补充:如果是码云:
  • gitee怎么配置 我们那个url是内网解析的 gitee解析不了
  • 解决: 准备个公网的jenkins.

7.5 与部署相关的配置与脚本

echo "您当前部署的代码版本为: 最新版"
#0.vars
date=$(date +%F)
file=baskball_${date}.tar.gz
#1. 打包压缩
tar zcf /tmp/${file} .
#2. 分发
##for + scp 
scp /tmp/${file}  root@172.16.1.7:/tmp/
#3. 解压
ssh root@172.16.1.7  "tar xf /tmp/${file} -C /app/code/ball/"

image-20240521151618492

7.6 案例小结:

  • 目标:提交代码,自动触发jenkins拉取代码并部署代码
  • jenkins webhook钩子

8. 案例05: java项目代码上线项目

8.1 项目描述

  • java程序的源代码存放在了代码仓库中.
  • 通过jk拉取java源代码,通过工具(maven,gradle)对代码进行编译,最终生成war或jar包.
  • 通过jk,分发部署,重启服务

8.2 项目环境

环境角色ip
gitlab代码仓库10.0.0.71/172.16.1.71
jenkinsjk10.0.0.72/172.16.1.72
web03tomcat+jdk10.0.0.9/172.16.1.9
lb01负载均衡10.0.0.5/172.16.1.5

8.3 手动实现

  • 手动上传代码到gitlab
  • 手动在jenkins机器上拉取代码.
  • 手动通过maven(mvn)编译代码生产war/jar包.
  • war包改名ROOT.war
  • 部署:
    • war包发送到web节点.
    • war包部署webapps/目录下.
    • 重启tomcat.

image-20240521153840725

1) 代码上传到gitlab

git remote -v
git remote remove orgin
git remote add origin git@gitlab.oldboylinux.cn:root/hello_world_war.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

2) 配置maven

  • 对java源代码进行编译.读取当前目录下面的pom.xml文件.

pom.xml是java代码配置文件,里面记录代码依赖.代码war或jar名字.

  • 使用maven下载,部署,修改下配置(加速下载)

  • 选择什么版本?根据代码要求.

  • jenkins上部署maven

#1. 安装jdk 
java -version
#2. 安装 maven 
tar xf apache-maven-3.6.3-bin.tar.gz  -C /app/tools/
ln -s /app/tools/apache-maven-3.6.3/ /app/tools/maven 
echo 'export PATH=/app/tools/maven/bin/:$PATH' >>/etc/profile
source /etc/profile
mvn --version #3. 配置maven下载源
[root@oldboy-devops-jenkins /app/tools/maven/conf]# pwd
/app/tools/maven/conf
[root@oldboy-devops-jenkins /app/tools/maven/conf]# ll settings.xml
-rw-r--r-- 1 root root 10644 Jun 27 18:07 settings.xml
<mirrors> 下面写入 如下内容即可。
<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name> 
<url>https://maven.aliyun.com/repository/public</url>
</mirror>

3) jenkins拉取代码与手动编译代码

  • 创建maven项目

image-20240522103953157

  • 配置源码

image-20240522111705972

  • 根据提示配置maven位置.

image-20240522111952493

image-20240522112203126

  • 继续配置项目

image-20240522113350792

  • 运行项目检查结果

image-20240522113517983

  • 下面是手动编译的命令和说明
mvn clean package
clean清除已经生成的war/jar.
package创建war或jar包,打包

4) war包的部署

  • target/hello-world-war-1.0.0.war

  • 准备好tomcat环境

  • 传输war包到web节点上/opt/

  • 进入/opt/改war包名字 ROOT.war

  • 清理已有的目录和文件rm -fr /app/tools/tomcat/webapps/ROOT*

  • /opt/ROOT.war移动到/app/tools/tomcat/webapps/

  • 重启tomcat.

  • jenkins代码分发

#当前目录
/var/lib/jenkins/workspace/dev测试环境/05-java_hello_maven
#密钥认证
ssh-copy-id root@172.16.1.9
#分发war包
scp target/hello-world-war-1.0.0.war 172.16.1.9:/opt/
  • web节点部署代码
传输war包到web节点上/opt/
进入/opt/改war包名字 ROOT.war
清理已有的目录和文件rm -fr /app/tools/tomcat/webapps/ROOT*
/opt/ROOT.war移动到/app/tools/tomcat/webapps/
重启tomcat
  • 检查结果

image-20240522123812552

8.4 自动实现

image-20240522135309812

echo "您当前部署的代码版本为: ${TAG_NAME}"
echo "您任务的URL地址: ${JOB_DISPLAY_URL}"#0.vars
date=$(date +%F)
#web_list后面可以设置为参数化构建,文本参数
web_list="172.16.1.9"
#路径 $WORKSPACE
src_dir=./target/
dst_dir=/opt/
#web节点的变量
code_dir=/server/tools/tomcat/webapps/ROOT
code_file=/server/tools/tomcat/webapps/ROOT.war
#1. 分发
fenfa() {
for ip in ${web_list}
doscp ${src_dir}hello-world-war-1.0.0.war root@${ip}:${dst_dir}
done
}#2. 部署
#OK.进入/opt/改war包名字 ROOT-时间.war
#ok.清理已有的目录和文件rm -fr /app/tools/tomcat/webapps/ROOT*
#ok.给 /opt/ROOT-时间.war 创建软连接到/app/tools/tomcat/webapps/ROOT.war
#重启tomcatdeploy() {
for ip in ${web_list}
dossh root@${ip} "cd ${dst_dir} ;mv hello-world-war-1.0.0.war ROOT-${date}.war ;[ -d ${code_dir} ] && {mkdir -p /tmp/${date};mv ${code_dir} ${code_file} /tmp/${date} ;};ln -s ${dst_dir}/ROOT-${date}.war  ${code_file}systemctl restart tomcat"
done}#主函数
main() {fenfadeploy}main

今日总结:

熟练使用今日案例05.

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

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

相关文章

网络基础:OSPF 协议

OSPF&#xff08;Open Shortest Path First&#xff09;是一种广泛使用的链路状态路由协议&#xff0c;用于IP网络中的内部网关协议&#xff08;IGP&#xff09;。OSPF通过在网络中的所有路由器之间交换路由信息&#xff0c;选择从源到目的地的最优路径。OSPF工作在OSI模型的第…

Nginx系列(二)---Mac上的快速使用

一、安装 前置软件&#xff1a;Homebrew 安装方法&#xff1a;终端输入/bin/bash -c "$(curl -fsSL <https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install.sh>)"更新&#xff1a; brew update 设置中科大镜像源&#xff1a;git -C "$(brew --r…

昇思25天学习打卡营第10天 | 自然语言处理:RNN实现情感分类

1. RNN实现情感分类 1.2 概述 情感分类是自然语言处理中的经典任务&#xff0c;是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型&#xff0c;实现如下的效果&#xff1a; 输入: This film is terrible 正确标签: Negative(负面) 预测标签: Negative输…

初识Spark

一、简介 官网&#xff1a;Apache Spark™ - Unified Engine for large-scale data analytics Apache的顶级项目&#xff0c;用于大规模数据处理的统一分析引擎。 支持语言&#xff1a;Java、Scala、Python和R (源码为Scala) 高级工具&#xff1a; 1、SparkSQL用于SQL和结构…

Linux中cat命令的英文含义

我之前一直在想cat不是猫的意思吗&#xff0c;但是cat命令在Linux中并不是指"猫"这个动物&#xff0c;而是来源于它的功能&#xff1a;concatenate&#xff08;连接&#xff09;和typeset&#xff08;打印&#xff09;。这个命令的名称是这两个功能的首字母缩写。尽管…

DevExpress WPF中文教程:Grid - 如何显示摘要(设计时)?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

Mac/Linux安装JMeter压测工具

Mac安装JMeter压测工具 介绍 Apache JMeter™应用程序是开源软件&#xff0c;是一个100%纯的Java应用程序&#xff0c;旨在加载测试功能行为和衡量性能。它最初是为测试Web应用程序而设计的&#xff0c;但后来扩展到其他测试功能。 我能用它做什么&#xff1f; Apache JMet…

vue高德地图使用

先根据官方方法给vue项目引入高德 高德文档地址 做好准备后使用 初始化地图 AMap.plugin(AMap.MoveAnimation, () >{//地图this.map new AMap.Map("mapContainer", {resizeEnable: true,center: [116.397447,39.909176],//地图中心坐标zoom:12,//缩放值});this.…

Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现。由于时间的关系&#xff0c;宏哥这里用代码给小伙伴演示两个模块&#xff1a;注册和登录。 2.业务模块封装 因为现在各种APP的层出不群&#xff0c;各式各样的。但是其大多数都有注册、登录。为…

走在健康前沿:低GI食品认证与现代饮食的新篇章

随着现代社会节奏的加快&#xff0c;人们对健康饮食的追求也日益增强。在众多饮食理念中&#xff0c;低血糖生成指数&#xff08;GI&#xff09;食品凭借其对控制血糖和预防慢性疾病的潜在益处&#xff0c;逐渐成为健康饮食领域的明星。 GI的科学解码 GI&#xff0c;即食物血糖…

CTFHUB-SSRF-URL Bypass

开启题目 给出提示&#xff0c;url参数的值中必须包含有 http://notfound.ctfhub.com &#xff0c;可以采用&#xff0c;也就是 HTTP 基本身份认证绕过 HTTP 基本身份认证允许 Web 浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。 也就是…

AIGC文生图lora微调训练案例;SD-Train界面训练stable Diffusion lora模型

lora仓库&#xff08;1000多个lora微调模型分享&#xff09;&#xff1a; https://lorastudio.co/models 1、命令代码方式&#xff1a;文生图lora微调训练案例 主要用huggingface相关包&#xff1a;peft、accelerate、diffusers 参考&#xff1a; https://huggingface.co/blo…

Swift 6:导入语句上的访问级别

文章目录 前言示例启用 AccessLevelOnImport破坏性变更采用这些更改总结前言 SE-0409 提案引入了一项新功能,即允许使用 Swift 的任何可用访问级别标记导入声明,以限制导入的符号可以在哪些类型或接口中使用。由于这些变化,现在可以将依赖项标记为对当前源文件(private 或…

PostgreSQL的pg_filedump工具

PostgreSQL的pg_filedump工具 基础信息 OS版本&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a;16.2 pg软件目录&#xff1a;/home/pg16/soft pg数据目录&#xff1a;/home/pg16/data 端口&#xff1a;5777pg_filedump 是一个工具&#x…

JAVA小知识30:JAVA多线程篇1,认识多线程与线程安全问题以及解决方案。(万字解析)

来 多线程&#xff0c;一个学起来挺难但是实际应用不难的一个知识点&#xff0c;甚至在很多情况下都不需要考虑&#xff0c;最多就是写测试类的时候模拟一下并发&#xff0c;现在我们就来讲讲基础的多线程知识。 一、线程和进程、并发与并行 1.1、线程和进程 线程&am…

Java学习十二—Java8特性之Optional类

一、简介 Java 8 引入了 Optional​ 类作为一种容器&#xff0c;可以用来显式地表示一个值存在或不存在。它解决了传统上可能会遇到的空指针异常问题&#xff0c;同时提供了一种更优雅的方式来处理可能为null的情况。 Java 8 中引入 Optional​ 类的背景可以从以下几个方面来理…

线程池概念的详解

前言&#x1f440;~ 上一章我们介绍了什么是定时器以及如何去实现一个定时器&#xff0c;今天我们来讲解在多线程中同样很重要的一个内容线程池 线程池的出现 线程池概念 标准库中的线程池 工厂模式 newCacheThreadPool方法 newFixedThreadPool方法 ThreadPoolExecutor…

Akamai+Noname强强联合 | API安全再加强

最近&#xff0c;Akamai正式完成了对Noname Security的收购。本文我们将向大家介绍&#xff0c;经过本次收购后&#xff0c;Akamai在保护API安全性方面的后续计划和未来愿景。 Noname Security是市场上领先的API安全供应商之一&#xff0c;此次收购将让Akamai能更好地满足日益增…

图像基础知识

图像卷积 卷积(convolution)是通过两个函数f和g生成第三个函数的一种数学算子,表征函数f与g经过翻转和平移的重叠部分的面积。 卷积概念是两个变量在某范围内相乘后求和的结果。图像处理中的卷积概念:数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积…

Java进阶学习|Day4.Java多线程,线程池

文章目录 了解多线程CPU进程(Process)线程多线程开发多线程优点 实现方式继承Thread类实现Runnable接口实现Callable接口 线程状态转换线程状态线程调度调整线程优先级线程睡眠线程等待线程让步线程加入线程唤醒 线程同步线程同步方式多线程间通信 线程池了解线程池定义常见接口…