jenkins持续集成框架

news2024/11/19 23:33:37

1 什么是jenkins

   Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。


2 为什么要使用jenkins

5.3 安装jenkins

安装到linux服务器上。-----必须按照jdk---而且jdk的本版必须对应jenkins软件的本版

jdk的本版必须为11以上而且不能是20版本

1.必须安装jdk[省略

2.安装jenkins的依赖的插件

yum install fontconfig

3.运行jenkins服务

1. 下载jenkins
网址:https://mirrors.jenkins.io/war/
2. 启动jenkins
# 使用nohup命令启动 nohup 当虚拟机黑屏时 也会运行   日志--->输出到jenkins.log   & 后台运行
nohup java -jar /usr/app/jenkins.war  --httpPort=8777  > /usr/app/jenkins.log 2>&1 &4. 
浏览器访问jenkins服务器
ip是自己服务器的网址
http://ip:8777
5.推荐安装

3. jenkins集成jdk

因为我们写的项目都是java项目,因为jenkins自身无法完成编译功能,所有需要集成jdk。

需要再jenkins所在的服务器安装jdk.

4. jenkins集成git

jenkins回自动拉取git改变的代码。需要jenkins需要集成git这个软件

jenkins所在的服务器安装git

yum -y install git git --version

jenkins集成git软件

gitee创建一个仓库

jenkins创建任务

一个任务对应一个项目。

5. jenkins集成maven

现在的项目全部都是maven结构的项目。

再jenkins所在的服务器安装maven软件

1. 解压maven压缩包
2. 重命名
3. 配置环境变量 vi /etc/profile
################################MAVEN环境变量##################################
export MAVEN_HOME=/usr/app/maven3.9.6
export PATH=$MAVEN_HOME/bin:$PATH
4. 刷新配置 source /etc/profile
5. 配置maven的本地仓库和远程镜像
      <!-- 中央仓库在中国的镜像 -->
        <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>

jenkins集成maven

1. jenkins安装maven插件
2. 集成本地的maven

测试拉取远程maven项目

构建一个新的任务(maven项目)

6. jenkins自动拉取git仓库的代码

默认gitee不允许内网访问gitee中的代码

所以要借用第三方软件

6.1 使用内网穿透软件

内网的项目可以通过内网穿透软件让外网访问。natapp

(1)在该网址https://natapp.cn/注册一个账号 并购买免费的隧道

购买免费隧道

下载客户端

看自己的电脑支持 下载对应的版本

 输入要被代理的地址 和端口号

 

 

6.2 jenkins安装gitee

修改gitee的内容

7. jenkins完成自动部署功能

思考: 项目部署的服务器和jenkins所在的服务器要不要是同一台。==不要再同一台服务器==

原因: jenkins所在的服务器需要安装很多软件。jenkins所在的服务器消耗资源非常大。如果项目和jenkins再同一台服务器,势必会造成项目卡。

思考: 我们刚才观察到jenkins项目好的项目jar就在jenkins所在的服务器。

把打不好的项目复制到其他服务器。

解决: 远程复制。 scp 要复制的文件 root@远程ip:/远程目录

发现: 需要你输入远程服务器的密码。而jenkins软件不能帮你输入密码。

解决: 免密操作

如何设置密码操作

免密登录主要是方便jenkins服务器192.168.223.188的root用户—》应用服务器192.168.223.187的root用户上的jar包拷贝,部署本就是jar包拷贝的过程

在192.168.223.188【jenkins】机器上使用root用户生成秘钥注意此处是root用户

$ ssh-keygen -t rsa

# 3次回车

运行后会在当前用户的根目录生成一个.ssh文件夹

ssh文件夹中的文件描述

id_rsa : 生成的私钥文件

id_rsa.pub : 生成的公钥文件

接下来需要将公钥导入到认证文件中

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys​

如果希望ssh公钥生效需满足至少下面两个条件:

.ssh目录的权限必须是700

.ssh/authorized_keys文件权限必须是600

给对应文件授权

$ chmod 700 ~/.ssh

$ chmod 600 ~/.ssh/authorized_keys

authorized_keys文件拷贝到另一台应用服务器的root用户.ssh目录下

# 在应用服务器(192.168.223.187)上用root用户创建/root/.ssh文件夹 mkdir -p /root/.ssh、# 在jenkins服务器(192.168.223.188)上将pub公钥文件拷贝到应用服务器的.ssh目录下

scp -p ~/.ssh/id_rsa.pub root@192.168.223.187:/root/.ssh/authorized_keys

在jenkins192.168.223.188服务器上进行免密连接测试.

发现无需输入密码

7.2 让jenkins复制打包好的项目到其他服务器

#!/bin/bash
​
echo "部署的目录和项目名称"
DIR="/data/app"
projectName="my-boot"
​
echo "待部署的应用服务器,可多台"
server_ips="192.168.223.187"
for server_ip in ${server_ips[@]}
do
​
echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
mkdir -p $DIR/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
  mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar 
fi
EOF
​
echo "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar
​
echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar
​
EOF
​
done
​
echo "success"

7.3 启动项目

启动的脚本

#!/bin/bash
set -e #任何命令出错就退出
set -o pipefail
​
APP_ID=my-boot
APP_DIR="/data/app"
​
nohup java -jar ${APP_DIR}/${APP_ID}/${APP_ID}.jar > release_out.log &
start_ok=false
if [[ $? = 0 ]];then
        sleep 3
        tail -n 10 release_out.log
        sleep 5
        tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];then
    echo "Application started ok"
    exit 0
else
    echo "Application started error"
    exit 1
fi

修改权限

chmod 777 start.sh

7.4 关闭项目

#!/bin/bash
​
APP_ID=my-boot
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh

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

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

相关文章

信号量、PV操作及软考高级试题解析

信号量 在并发系统中&#xff0c;信号量是用于控制公共资源访问权限的变量。信号量用于解决临界区问题&#xff0c;使得多任务环境下&#xff0c;进程能同步运行。此概念是由荷兰计算机科学家Dijkstra在1962年左右提出的。信号量仅仅跟踪还剩多少资源可用&#xff0c;不会跟踪…

AIGC 时代软件工程师:前景、需求与大模型提效探究

过去&#xff0c;在互联网浪潮汹涌的十年来&#xff0c;软件工程师的角色愈发凸显其不可或缺的价值。随着AIGC&#xff08;人工智能生成内容&#xff09;时代的到来&#xff0c;软件开发的每个环节都正在经历一场前所未有的革新。今天&#xff0c;我们深入研究了大型AI模型如何…

【C++STL详解(十)】--------priority_queue的模拟实现

目录 前言 一、堆的向上调整算法 二、堆的向下调整算法 三、优先队列模拟实现 Ⅰ、接口总览 Ⅱ、各个接口实现 1.构造函数 2.仿函数 3.向上调整 4.向下调整 5.其余接口 Ⅲ、完成代码 前言 上节内容我们简单的介绍了关于priority_queue的使用内容&#xff0c;我们明白…

鸿蒙OpenHarmony开发板解析:【系统能力配置规则】

如何按需配置部件的系统能力 SysCap&#xff08;SystemCapability&#xff0c;系统能力&#xff09;是部件向开发者提供的接口的集合。 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 部件配置系统…

17 【Aseprite 作图】参考图和颜色

参考图 Aseprite 作图&#xff0c;“打开 - 一张参考图”&#xff0c;再把参考图拉到右边&#xff0c;就可以得到参考图和缩略图 取消选区 通过“选择 - 取消选择”&#xff0c;可以 取消选区 复制参考图的颜色 打开参考图后&#xff0c;参考图的调色板就会出现参考图所有的…

视频号小店保证金,服务费,手续费是多少?货款结算周期多长?

大家好&#xff0c;我是电商糖果 随着视频号小店越来越火&#xff0c;很多商家都想入驻小店。 入驻之前大家对视频号的收费问题都比较好奇。 糖果2022年就开始做店的了&#xff0c;对小店的保证金&#xff0c;服务费的&#xff0c;手续费&#xff0c;货款结算周期都非常了解…

Windows11 同时安装jdk8和jdk17 可切换

Windows11 同时安装jdk8和jdk17 可切换 死忠于JDK8的码农们&#xff0c;可能不得不做出一些改变的 因为在springboot3最低也是只能用17 并且最近如果创建springboot项目的时候&#xff0c;你会发现&#xff0c;最低也是17的 并且&#xff0c;如果使用springcloud开发&#x…

axios异步操作第一篇

1 同步请求和异步请求 客户端给java后台程序发送请求&#xff0c;发送请求的方式有两种&#xff1a; 同步请求 同步请求发送方式&#xff1a; 1 浏览器地址栏&#xff0c;输入url&#xff1a;http://localhost:8080/web-app/xxxServlet 2 3 删除 4 javascript:location.hr…

CrossManager软件安装

目录 一、CrossManager软件 1.1 下载安装程序&#xff1a; 1.2 注册-登录 1.3 运行安装程序 1.4 完成安装&#xff1a; 1.5 激活软件&#xff1a; 文章底部可获取安装包---CrossManager软件安装&#xff08;有效期30天&#xff09; 当涉及到专业的软件安装和配置时&…

脑机接口(BCI)助力失语者重获交流能力:纽约大学最新研究突破

近年来&#xff0c;脑机接口&#xff08;BCI&#xff09;技术取得了显著的进展&#xff0c;引发了科研界和公众的广泛关注。特别是在失语症的治疗领域&#xff0c;BCI技术为那些因神经系统缺陷而失去交流能力的患者带来了新的希望。失语症不仅严重影响了患者的日常生活&#xf…

通俗的理解网关的概念的用途(四):什么是网关设备?(网络层面)

任何一台Windows XP操作系统之后的个人电脑、Linux操作系统电脑都可以简单的设置&#xff0c;就可以成为一台具备“网关”性质的设备&#xff0c;因为它们都直接内置了其中的实现程序。MacOS有没有就不知道&#xff0c;因为没用过。 简单的理解&#xff0c;就是运行了具备第二…

给网络镜像模式下的 WSL2 使用 127.0.0.1代理的方法

网络镜像模式下的WSL2虽然复制了宿主机windows的ip&#xff0c;但是仍然无法访问127.0.0.1的代理。经过调查&#xff0c;发现因为WSL2从应用商店下载而来&#xff0c;所以可能是UWP应用&#xff0c;所以需要用工具解除环回代理限制。

数据中心法

数据中心法是实现词法分析器的结构化方法。通过设计主表和子表分开存储状态转移信息&#xff0c;实现词法分析器的控制逻辑和数据结构分离。 主要解决了状态爆炸、难以维护和复杂性的问题。 状态爆炸是指当状态和转移较多时&#xff0c;单一使用一个表来存储所有的信息的话会导…

韩顺平0基础学Java——第8天

p155-168 数组&#xff08;第六章&#xff09; 数组可以存放多个同一类型的数据&#xff0c;数组也是一种数据类型&#xff08;引用类型&#xff09;。 即&#xff0c;数组就是一组数据~ 例&#xff1a;double [] hens {1,2,3,4,5,6}; 新建了一组鸡&#xff0c;里面有6个。…

画出入学管理系统的顶层图和1层图

&#xff08;学校作业&#xff09; 题目如下&#xff1a; 某培训机构入学管理系统有报名、交费和就读等多项功能&#xff0c;下面是对其各项功能的说明&#xff1a; 1、报名&#xff1a;由报名处负责&#xff0c;需要在学员登记表上进行报名登记&#xff0c;需要查询课…

教你解决PUBG绝地求生卡在初始界面 登不上去 打不开游戏的问题

在热门大逃杀游戏《绝地求生》&#xff08;PUBG&#xff09;里&#xff0c;紧张刺激的战斗和高度还原的战场环境深深吸引着全球玩家的心。然而&#xff0c;在经历一场紧张激烈的生存挑战后&#xff0c;部分玩家遭遇了一段不太愉快的小插曲&#xff1a;游戏在胜利或战败的结算界…

视频批量剪辑指南:一键合并视频并添加背景音乐,高效便捷

在数字化时代&#xff0c;视频剪辑已经成为了一项常见且重要的技能。无论是制作家庭影片、工作展示还是社交媒体内容&#xff0c;掌握高效的视频剪辑技巧都能极大地提升我们的工作效率和创作质量。本文将为您介绍云炫AI智剪中高效的视频批量剪辑方法&#xff0c;让您能够一键合…

【LLM 论文】Step-Back Prompting:先解决更高层次的问题来提高 LLM 推理能力

论文&#xff1a;Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models ⭐⭐⭐⭐ Google DeepMind, ICLR 2024, arXiv:2310.06117 论文速读 该论文受到的启发是&#xff1a;人类再解决一个包含很多细节的具体问题时&#xff0c;先站在更高的层次上解…

vue----- watch监听$attrs 的注意事项

目录 前言 原因分析 解决方案 总结 前言 在 Vue 开发过程中&#xff0c;如遇到祖先组件需要传值到孙子组件时&#xff0c;需要在儿子组件接收 props &#xff0c;然后再传递给孙子组件&#xff0c;通过使用 v-bind"$attrs" 则会带来极大的便利&#xff0c;但同时…

分解质因数-第12届蓝桥杯国赛Python真题解析

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第61讲。 分解质因数&#…