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_pack
  app_scp
  app_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 80

docker 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" ];then
    git_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}
do
   ssh 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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WEB APIS(DOM对象,操作元素内容,属性,表单属性,自定义属性,定时器)

js基础基本语法&#xff1a; 变量&#xff0c;数据类型&#xff0c;循环&#xff0c;函数&#xff0c;对象等(主要是控制台打印&#xff09; WEB APIS 操作DOM BOM &#xff1a; 控制网页元素&#xff0c;交互等各种网页交互效果 js高级 语法&#xff1a; js新增语法&#xff0…

cs144(一)

cs144(一) 1、osi 当应用程序有数据要发送时&#xff0c;应用层将数据交给传输层&#xff0c; 传输层负责将数据可靠或不可靠地传送到另外一端&#xff0c;传输层通过将数据交给网络层来发送数据 网络层负责将数据分成数据包&#xff0c;每个数据包都有正确的目的地址 最后…

IEC61850读服务器目录命令——GetServerDirectory介绍

IEC61850标准中的GetServerDirectory命令是变电站自动化系统中非常重要的一个功能&#xff0c;它主要用于读取服务器的目录信息&#xff0c;特别是服务器的逻辑设备节点&#xff08;LDevice&#xff09;信息。以下是对GetServerDirectory命令的详细介绍。 目录 一、命令功能 …

如何使用AWS Lambda构建一个云端工具(超详细)

首发地址&#xff08;欢迎大家访问&#xff09;&#xff1a;如何使用AWS Lambda构建一个云端工具&#xff08;超详细&#xff09; 1 前言 1.1 无服务器架构 无服务器架构&#xff08;Serverless Computing&#xff09;是一种云计算服务模型&#xff0c;它允许开发者构建和运行…

力扣-位运算-1【算法学习day.41】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…

MySQL数据库学习(持续更新ing)

1. 什么是数据库&#xff1f;什么是数据库管理系统&#xff1f;什么是SQL&#xff1f;他们之间的关系是什么&#xff1f; 数据库&#xff1a;Database&#xff0c; 简称DB。按照一定格式存储数据&#xff0c;一些文件的组合。 数据库管理系统&#xff1a;DataBaseManagement&…

【Python · PyTorch】循环神经网络 RNN(基础概念)

【Python PyTorch】循环神经网络 RNN&#xff08;基础概念&#xff09; 0. 生物学相似性1. 概念2. 延时神经网络&#xff08;TDNN&#xff09;3. 简单循环神经网络&#xff08;Simple RNN&#xff09;3.1 BiRNN 双向循环神经网络3.2 特点记忆性参数共享图灵完备 3.3 网络结构3…

【Isaac Sim】相关问题汇总

目录 一、安装点击Install时报错二、启动时报 Failed to create any GPU devices三、加载Isaac Sim自带模型或示例时报 Isaac Sim is not responding 一、安装点击Install时报错 报错&#xff1a; request to https://asset.launcher.omniverse.nvidia.com/… failed, reason:…

接口上传视频和oss直传视频到阿里云组件

接口视频上传 <template><div class"component-upload-video"><el-uploadclass"avatar-uploader":action"uploadImgUrl":on-progress"uploadVideoProcess":on-success"handleUploadSuccess":limit"lim…

DataWorks快速入门

DataWorks基于MaxCompute、Hologres、EMR、AnalyticDB、CDP等大数据引擎&#xff0c;为数据仓库、数据湖、湖仓一体等解决方案提供统一的全链路大数据开发治理平台。本文以DataWorks的部分核心功能为例&#xff0c;指导您使用DataWorks接入数据并进行业务处理、周期调度以及数据…

项目学习:仿b站的视频网站项目03-注册功能

概括 通过上一期&#xff0c;完成了项目和数据库的基础结构的搭建&#xff0c;接下来主要是完成项目的注册功能。该功能模块主要分为有两个接口&#xff0c;一个是验证码接口&#xff0c;一个是注册接口。 让我们开始吧&#xff01; 验证码接口 验证码的生成主要配合下面这…

20.100ASK_T113-PRO 开发板开机自动QT程序简单的方法一

本文详细介绍了在嵌入式系统中实现程序开机自启动的多种方法&#xff0c;包括通过修改/etc/profile、/etc/rc.local文件&#xff0c;以及在/etc/init.d目录下创建启动脚本等方式。文章还解释了不同配置文件的作用及它们之间的区别。 开机自动启动QT应用程序 用户模式下的启动 …

【Java】Linux、Mac、Windows 安装 Oracle JDK

一、Linux 环境安装JDK 1、下载 根据实际需求&#xff0c;在 Oracle 官网 上下载某版本JDK&#xff08;如 jdk-8u341-linux-x64.tar.gz&#xff09;&#xff0c;再通过文件传输工具&#xff08;如 Finalshell、FileZilla 等&#xff09;丢到服务器上。 2、安装 # 查看是否安…

Web3与智能合约:区块链技术下的数字信任体系

随着互联网的不断发展&#xff0c;Web3代表着我们迈入了一个去中心化、更加安全和智能的网络时代。作为Web3的核心组成部分&#xff0c;区块链技术为智能合约的出现和发展提供了强有力的基础。智能合约不仅仅是自动化的代码&#xff0c;它们正逐步成为重塑数字世界信任体系的关…

怎么把湖南平江1000吨黄金开采出来?开采露天金矿的实用公式与方案——露天矿山爆破设计施工方案

在露天矿山爆破设计中&#xff0c;面对多溶洞、多破碎带和多断层的复杂地质条件&#xff0c;需要制定一套科学、合理的爆破方案。以下是一份详细的爆破设计施工方案&#xff0c;包括爆破参数与计算公式&#xff1a; 一、爆破设计原则 1.安全性&#xff1a;确保爆破作业过程中的…

电子应用设计方案-20:智能电冰箱系统方案设计

智能电冰箱系统方案设计 一、系统概述 本智能电冰箱系统旨在提供更便捷、高效、智能化的食品存储和管理解决方案&#xff0c;通过集成多种传感器、智能控制技术和联网功能&#xff0c;实现对冰箱内部环境的精确监测和控制&#xff0c;以及与用户的互动和远程管理。 二、系统组成…

栈的应用,力扣394.字符串解码力扣946.验证栈序列力扣429.N叉树的层序遍历力扣103.二叉树的锯齿形层序遍历

目录 力扣394.字符串解码 力扣946.验证栈序列 力扣429.N叉树的层序遍历 力扣103.二叉树的锯齿形层序遍历 力扣394.字符串解码 看见括号&#xff0c;由内而外&#xff0c;转向用栈解决。使用两个栈处理&#xff0c;一个用String,一个用Integer 遇到数字:提取数字放入到数字栈…

pandas与open读取csv/txt文件速度比较

pandas与open读取csv/txt文件速度比较 由于在工作中经常需要读取txt或csv文件&#xff0c;使用pandas与open均可以读取并操作文件内容&#xff0c;但不知道那个速度更快一些&#xff0c;所以写了一个脚本去比较在文件大小不同的情况下读取数据的速度 测试结果: 大小pandas速度…

039_SettingsGroup_in_Matlab图形界面的设置选项

只要你知道你自己正在做什么&#xff0c;那么你怎么做都行。—— C.J. DateMatlab的界面与设置 Matlab的界面 Matlab的界面是GUI设计中非常值得讨论的一个议题。先来看&#xff0c;默认的Matlab界面。 这里的界面从上到下分为了四个部分&#xff0c;分别是&#xff1a; 工具…

Flink-Source的使用

Data Sources 是什么呢&#xff1f;就字面意思其实就可以知道&#xff1a;数据来源。 Flink 做为一款流式计算框架&#xff0c;它可用来做批处理&#xff0c;也可以用来做流处理&#xff0c;这个 Data Sources 就是数据的来源地。 flink在批/流处理中常见的source主要有两大类…