DevOps-Jenkins-新手入门级

1. Jenkins概述

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

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

1.1 什么是代码部署

代码发布/部署>开发书写的程序代码---->部署测试/生产环境 web服务器(站点目录中)

 2. Jenkins快速上手指南

安装Jenkins只需要简单几步即可完成。

可参考官网:

Jenkins 的安装和设置

2.1 环境准备

主机配置ip
devops_jenkins_xzb

2c4G

jdk 11版本

10.0.0.60/172.16.1.60

2.2 部署JDK

## 安装jenkins
## 安装jdk
yum install -y jdk-17
yum install jenkins
systemctl enable jenkins
systemctl start jenkins## 检查进程端口
ss -lntup ##8080端口
ps -ef |grep java##浏览器解析访问
10.0.0.60:8080

2.3 选择关闭

2.4 提示jenkins已经就绪 

2.5 登录

2.6 安装插件

Jenkins插件安装方式说明
web页面,选择与安装(联网)一个一个找选择,安装重启jenkins
自己下载插件,jenkins替你安装(hpi)web页面一个一个安装,未来批量安装需要脚本
导入插件(手动,批量)去一个机器上面把已经下载安装的插件打包,新机器解压,修改所有者
jenkins不同版本的插件不通用

2.7 修改密码

3. 体验Jenkins-Jenkins-Shell集成

3.1 对jenkins配置

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

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

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

##修改所以者
egrep -i '^User|^Group' /usr/lib/systemd/system/jenkins.service
User=root
Group=root##重启daemon
systemctl daemon-reload ##重启jenkins
systemctl restart jenkins

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

1. 通过运行jenkins 任务,提示我们进行选择:

dev   #开发环境

prod #生产环境

2. 把选择结果放在变量中choose

3. jenkins执行脚本

3.3 项目详细步骤 

创建对应的的目录

创建文件夹

 创建freestyle项目

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

补充说明:

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

maven项目:java代码

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

配置构建保存

配置参数化构建 

添加参数化构建

配置变量与选择的值 

配置构建与shell 

添加执行shell

配置命令或代码 

 3.4 运行任务

运行工程

 检查输出

 

 

 3.5 所有构建记录是否要保留

丢弃旧的构建

4. Jenkins实现Gitee集成

4.1 准备windows环境

安装git-bash

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

创建密钥并配置gitee

## 创建密钥
ssh-keygen.exe## 查看密钥
cat /c/Users/Administrator/.ssh/id_rsa.pub

创建gitee项目

配置密钥认证 

初始化并上传代码 

##配置基本信息
git config global user.name "Administrator"
git config global user.email "admin@example.com"
git config global list##初始化
git init#配置远程仓库地址
git remote add origin git@gitee.com:xing-zhibang/csdn_-jenkins-xzb.git
git remote -v##上传代码与标签
git add .
git commit -m "CSDN_Jenkins_xzb 项目完成100"
git tag -a 'v1' -m '项目完成100%'
git push  -u origin  master ##上传主分支
git push  -u origin v1      ##上传标签

检查

 4.2 配置jenkins

添加任务

源码管理 

配置git仓库地址(从gitee获取)

 配置访问凭证

 

 把windows下面的私钥写入进去

 

配置下shell命令 

4.3 运行查看结果 

4.4 配置脚本 

1. 这部分配置build步骤,表示对拉取过来的代码进行处理

2. 这里可以选择打包

 构建与检查结果

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

案例背景:

1. 上个案例中拉取的代码总是最新的

2. 目前我们需要部署指定的tag标签(版本)的代码

3. 最后代码打包并分发web服务器

5.1 准备代码 

修改index.html,修改标题. 提交,打标签,

创建出v2.0 v3.0版本即可.

修改代码标题 

 提交代码

git add .
git commit  -m v2.0
git tag -a v2.0 -m v2.0
git push -u origin  all
git push -u origin  tags

检查

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

5.3 创建Jenkins任务 

添加参数化构建之git参数

配置git参数

配置源码管理 

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

 配置Build步骤(shell脚本)

检查结果 

 

5.4 部署到web节点

在web主机上编写nginx配置文件

cat /etc/nginx/conf.d/firework.conf 
server{listen 80;server_name firework.oldboylinux.cn;access_log /var/log/nginx/firework/access.log main;error_log /var/log/nginx/firework/errot.log notice;root /app/code/firework;location / {index index.html;}
}

在Jenkins主机上创建密钥认证

ssh-keygen 
ssh-copy-id root@172.16.1.8  ##分发给web主机
ssh  root@172.16.1.8 远程连接web主机

jenkins项目配置(shell部分)

检查部署结果 

5.5 shell实现方式

## 配置jenkins到 web密钥认证
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.8
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.5# 下载代码
git clone git@gitee.com:xing-zhibang/csdn_-jenkins-xzb.git## 代码打包 
tar zcf  /tmp/web_html-$(date +%F).tar.gz   csdn_-jenkins-xzb/##查看
ll /tmp/
-rw-r--r-- 1 root root 7498973 Nov 18 14:09 web_html-2024-11-18.tar.gz# 推送代码包scp:推送到web服务器的/opt
for ip in 8 5; 
do  scp /tmp/web_html-2024-11-18.tar.gz  172.16.1.${ip}:/opt;
done## 解压,修改目录名字,创建软连接
for ip in 8 5 ;  
do   ssh 172.16.1.${ip} "cd /opt && tar xf web_html-2024-11-18.tar.gz && mv csdn_-jenkins-xzb csdn_-jenkins-xzb-$(date +%F) && rm -f /app/code/html && ln -s /opt/csdn_-jenkins-xzb-$(date +%F) /app/code/html";  
done 

使用jenkins自动拉取代码并自动上线 (通过jenkins执行脚本)

#!/bin/bash
#author:xzb666
##desc:通过脚本打包,分发,解压,连接,部署
App_time=`date +%F`
App_dir=/tmp
App_dest_dir=/opt
App_web_servers="172.16.1.8 172.16.1.5"app_pack(){
##代码打包tar zcf ${App_dir}/web_html-${App_time}.tar.gz  ${App_dir}/csdn-jenkins-xzb 
}app_scp(){
##代码推送for ip in ${App_web_servers}do  scp ${App_dir}/web_html-${App_time}.tar.gz ${ip}:${App_dest_dir}done
}
app_deploy(){
## 解压,修改目录名for ip in ${App_web_servers}do ssh $ip "cd ${App_dest_dir} && tar xf web_html-${App_time}.tar.gz && rm -f /app/code/html && ln -s ${App_dest_dir}/tmp/csdn-jenkins-xzb  /app/code/html "done 
}
main(){app_packapp_scpapp_deploy
}
main

jenkins 配置 主要修改执行shell部分即可

6. Jenkins部署java项目

由于java编写的代码是无法直接在服务器上运行,需要使用maven工具进行打包。

1. .开发提交代码------>gitee

2. jenkins------->git------->获取Gite代码

3. 代码的质量检测; sonarqube

4. 代码的编译; mvn clean package ----->jar/war

5. 发布过程:

    摘除节点

    发布代码,创建软连接。

    重载Tomcat服务,curl测试一下;

    加入节点;

6. 继续下一台节点;

6.1 手动实现构建Java项目-手动

## 下载源码
git clone  https://gitee.com/94fzb/zrlog.git##去清华镜像网站下载maven
mv apache-maven-3.8.8-bin.tar.gz  /app/tools## 解压
tar xf apache-maven-3.8.8-bin.tar.gz ## 创建软连接
ln -s /app/tools/apache-maven-3.8.8  /app/tools/maven## 增加环境变量
echo 'export PATH=/app/tools/maven/bin/:$PATH' >>/etc/profile## 查看版本
mvn --version## 配置maven源
vim /app/tools/maven/conf/settings.xml 
147     <mirror>
148      <id>aliyunmaven</id>
149      <mirrorOf>*</mirrorOf>
150      <name>阿里云公共仓库</name>
151      <url>https://maven.aliyun.com/repository/public </url>
152     </mirror>## 使用maven编译java代码  pom.xml所在目录执行.
mvn  clean  package## 检查代码包
ll /tmp/zrlog/package-web/target

6.2 jenkins拉取代码与手动编译代码

创建maven项目

配置源码

根据提示配置maven位置

运行项目检查结果

 6.3 war包的部署

1. 准备好tomcat环境

2. 传输war包到web节点上/opt/

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

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

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

6. 重启tomcat

7. 基于docker的案例实现静态代码

7.1 代码准备

7.2 书写dockerfile

1. jenkins机器安装与启动docker

2. 发送代码到jenkins的/app/code/bird/下面

3. 准备开始书写dockerfile

##当代码拉到本地
cd /app/code/cxk
git clone git@gitee.com:xing-zhibang/jenkins-docker.git##书写Dockerfile文件
FROM nginx:1.22-alpine
LABEL author='xzb' 
COPY . /usr/share/nginx/html
EXPOSE 80docker build -t web:ngx_cxk_v1.0 .## 运行容器
docker run -d --name "nginx_cxk" -p 8888:80 --rm web:ngx_cxk_v1.0 

 7.3 准备私有仓库

## 在docker02上拉取仓库,并启动仓库
docker pull registry:latest
docker run -d -p 5000:5000 -v registry:/var/lib/registry --name "xzb_registry" --restart=always registry:latest ## 上传镜像到镜像仓库
docker push reg.oldboylinux.cn:5000/xzb/nginx_cxk_v1.0

7.5 创建jenkins任务

 书写脚本

检查结果

 

web节点上启动对应的docker容器

## 密钥认证##vars
web_server="172.16.1.82"##判断git_tag是否为默认
if [  "$git_tag" = "origin/master" ];thengit_tag=latest
fi## 构建镜像
docker build -t reg.oldboylinux.cn:5000/xzb/web:nginx_cxk${git_tag} .## 推送到私有仓库
docker push reg.oldboylinux.cn:5000/xzb/web:nginx_cxk${git_tag}## 部署web服务器
for ip in ${web_servers}
dossh root@${ip} "docker run -d --name "nginx_cxk${git_tag} " -p 80:80 restart=always reg.oldboylinux.cn:5000/xzb/web:nginx_cxk${git_tag}"
done

最近状态不好,作者想休息一段时间了,后面的待更新吧.....

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

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

相关文章

11.22 深度学习-pytorch自动微分

# 自动微分模块torch.autograd负责自动计算张量操作的梯度&#xff0c;具有自动求导功能。自动微分模块是构成神经网络训练的必要模块&#xff0c;可以实现网络权重参数的更新&#xff0c;使得反向传播算法的实现变得简单而高效 import torch # 1. **张量** # Torch中一切…

在win10下搭建ftp服务器

1 说明 本文档在win10下实现。 2 安装ftp服务器 打开“控制面板/程序和功能”&#xff0c;如下&#xff1a; 点击“启用或关闭windows功能”&#xff0c;如下&#xff1a; 安装“ftp服务器”&#xff0c;将下图红色圈中部分打勾&#xff0c;如下&#xff1a; 必须勾选…

数据结构C语言描述4(图文结合)--栈的实现,中序转后序表达式的实现

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法&#xff1b;有C基础即可跟着学习&#xff0c;代码均可运行&#xff1b;准备考研的也可跟着写&#xff0c;个人感觉&#xff0c;如果时间充裕&#xff0c;手写一遍比看书、刷题管用很多&#xff0c;这也是本人采用纯C语言…

对比 MyBatis 批处理 BATCH 模式与 INSERT INTO ... SELECT ... UNION ALL 进行批量插入

前言 在开发中&#xff0c;我们经常需要批量插入大量数据。不同的批量插入方法有不同的优缺点&#xff0c;适用于不同的场景。本文将详细对比两种常见的批量插入方法&#xff1a; MyBatis 的批处理模式。使用 INSERT INTO ... SELECT ... UNION ALL 进行批量插入。 MyBatis …

vue中路由缓存

vue中路由缓存 问题描述及截图解决思路关键代码及打印信息截图 问题描述及截图 在使用某一平台时发现当列表页码切换后点击某一卡片进入详情页后&#xff0c;再返回列表页时页面刷新了。这样用户每次看完详情回到列表页都得再重新输入自己的查询条件&#xff0c;或者切换分页到…

第N8周:使用Word2vec实现文本分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 本周任务&#xff1a; 结合Word2Vec文本内容预测文本标签 加载数据 import torch import torch.nn as nn import torchvision from torchvision import tra…

如何在 UniApp 中实现 iOS 版本更新检测

随着移动应用的不断发展&#xff0c;保持应用程序的更新是必不可少的&#xff0c;这样用户才能获得更好的体验。本文将帮助你在 UniApp 中实现 iOS 版的版本更新检测和提示&#xff0c;适合刚入行的小白。我们将分步骤进行说明&#xff0c;每一步所需的代码及其解释都会一一列出…

FreeRTOS之vTaskDelete实现分析

这里写自定义目录标题 1 函数接口1.1 函数接口1.2 函数参数简介 2 vTaskDelete的调用关系2.1 调用关系2.2 调用关系示意图 3 函数源码分析3.1 vTaskDelete3.2 uxListRemove 1 函数接口 1.1 函数接口 void vTaskDelete( TaskHandle_t xTaskToDelete )1.2 函数参数简介 TaskHa…

移动充储机器人“小奥”的多场景应用(上)

一、高速公路服务区应用 在高速公路服务区&#xff0c;新能源汽车的充电需求得到“小奥”机器人的及时响应。该机器人配备有储能电池和自动驾驶技术&#xff0c;能够迅速定位至指定充电点&#xff0c;为待充电的新能源汽车提供服务。得益于“小奥”的机动性&#xff0c;其服务…

C语言实例_5之根据输入年月日,计算属于该年的第几天

1. 题目 输入某年某月某日&#xff0c;判断这一天是这一年的第几天&#xff1f; 2. 分析 步骤1:得先判断年份是否是闰年&#xff0c;是的话&#xff0c;当月份大于3时&#xff0c;需多加一天&#xff1b; 步骤2:还需根据输入月份&#xff0c;判断输入天数是否合理&#xff0…

Semaphore 信号量

文章目录 基本概念工作原理Semaphore 与 ReentrantLockSemaphore常用场景1. 限制并发线程数&#xff08;最常见场景&#xff09;2. 公平模式的信号量&#xff08;保证按顺序访问资源&#xff09;3. 限制数据库连接数&#xff08;模拟数据库连接池&#xff09;4. 限制 API 请求次…

Redis 的代理类注入失败,连不上 redis

在测试 redis 是否成功连接时&#xff0c;发现 bean 没有被创建成功&#xff0c;导致报错 根据报错提示&#xff0c;需要我们添加依赖&#xff1a; <dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>&l…

桌面怎么快速添加便签?适合桌面记事的便签小工具

在数字化时代&#xff0c;我们每天面对电脑处理大量任务&#xff0c;无论是工作计划、会议纪要还是个人生活琐事&#xff0c;都需要一个可靠的桌面记事工具来帮助我们记录和整理。因此&#xff0c;一款适合桌面使用的便签软件成为了我们不可或缺的助手。 敬业签就是这样一款功…

UE5 腿部IK 解决方案 footplacement

UE5系列文章目录 文章目录 UE5系列文章目录前言一、FootPlacement 是什么&#xff1f;二、具体实现 前言 在Unreal Engine 5 (UE5) 中&#xff0c;腿部IK&#xff08;Inverse Kinematics&#xff0c;逆向运动学&#xff09;是一个重要的动画技术&#xff0c;用于实现角色脚部准…

KLV6008固态继电器:高压应用的理想紧凑方案

在当今快节奏的电子领域&#xff0c;找到平衡性能、可靠性和安全性的组件至关重要。CRIA Semiconductor的KLV6008固态继电器(SSR)正是满足了这一要求。这款紧凑型继电器专为高压、低电流切换而设计&#xff0c;是适用于各种应用的多功能解决方案。 为什么选择KLV6008&#xff1…

如何在 React 项目中应用 TypeScript?应该注意那些点?结合实际项目示例及代码进行讲解!

在 React 项目中应用 TypeScript 是提升开发效率、增强代码可维护性和可读性的好方法。TypeScript 提供了静态类型检查、自动补全和代码提示等功能&#xff0c;这对于 React 开发者来说&#xff0c;能够帮助早期发现潜在的 bug&#xff0c;提高开发体验。 1. 项目初始化 在现…

解锁生成式AI的真实价值:衡量ROI的12步框架

在当今快速发展的技术环境中,生成式AI正逐渐成为企业创新和增长的重要驱动力。然而,随着数十亿美元的投资涌入生成式AI项目,一个严峻的问题浮出水面:如何衡量这些投资的回报(ROI)?本文将探讨生成式AI ROI衡量的挑战,并提供一个12步框架,帮助公司有效地评估和最大化其生…

【网络云计算】2024第48周-每日【2024/11/20】小测-理论题-计算机网络概述

文章目录 1、计算机常见的网络设备有哪些&#xff1f;2、进制换算3、写出你认为的如何才能学好网络知识4、写出你知道的网络相关的求职岗位有哪些&#xff1f; 【网络云计算】2024第48周-每日【2024/11/20】小测-理论题- 1、计算机常见的网络设备有哪些&#xff1f; 2、进制换…

在 Swift 中实现字符串分割问题:以字典中的单词构造句子

文章目录 前言摘要描述题解答案题解代码题解代码分析示例测试及结果时间复杂度空间复杂度总结 前言 本题由于没有合适答案为以往遗留问题&#xff0c;最近有时间将以往遗留问题一一完善。 LeetCode - #140 单词拆分 II 不积跬步&#xff0c;无以至千里&#xff1b;不积小流&…

HarmonyOs鸿蒙开发实战(21)=>组件间通信@ohos/liveeventbus

1.简介 LiveEventBus是一款消息总线&#xff0c;具有生命周期感知能力&#xff0c;支持Sticky&#xff0c;支持跨进程&#xff0c;支持跨APP发送消息。 2.下载安装 ohpm install ohos/liveeventbus 3.订阅&#xff0c;注册监听 4.发送事件 5. 完成 > 记得关注博主&#xff…