Jenkins集成JDK、git、gitee、maven逐步实现自动拉取,自动部署,自动启动

news2024/9/22 23:38:29

1. jenkins集成JDK

  1. 成功登录Jenkins后,选择Manage Jenkins,选择Tools

    在这里插入图片描述

  2. 集成JDK

    在这里插入图片描述

2. jenkins集成git

因为Jenkins自动从git远程仓库拉取代码

首先要在Jenkins所在的linux服务器上安装git

yum install -y git

然后,实行集成JDK的第一步

  1. 配置git

    在这里插入图片描述

3. Jenkins创建项目,拉取git仓库中的代码

  1. 选择新建Item,创建一个Jenkins项目

    在这里插入图片描述

  2. 添加git远程仓库地址

    在这里插入图片描述

现在jenkins无法自动拉取代码【当仓库中的代码发生改变时无法自动拉取】

  1. 手动拉取——点击Build Now,立马构建,若构建成功,表示之前的集成和配置成功

    在这里插入图片描述

4. Jenkins集成maven

由于Jenkins本身不能对代码进行打包。所以我们需要集成maven,而且我们的项目100%都是maven构建的项目

  • linux安装maven
  1. 将下载好的maven文件拉取到Jenkins所在的Linux服务器上

  2. 解压

    tar -zxvf xxx.tar.gz
    

    在这里插入图片描述

  3. 配置环境变量

    vi /etc/profile
    
    export MAVEN_HOME=安装路径
    export PATH=$MAVEN_HOME/bin:$PATH
    

    退出并保存

  4. 重启

    source /etc/profile
    
  5. 查看版本

    mvn -version
    

在这里插入图片描述

显示版本号,即为安装成功

  1. 修改maven配置文件【本地仓库和阿里云远程仓库地址】

    在这里插入图片描述

    可将window里的配置文件覆盖到linux中

  • Jenkins集成maven
  1. 安装maven项目

    在这里插入图片描述

  2. jenkins集成maven

    在这里插入图片描述

5.实现自动拉取

因为gitee仓库的代码——默认gitee不允许内网拉取

所以需要借助内网穿透软件以实现内网拉取

1. 准备内网穿透的软件——NATAPP

可直接参考官方文档:

https://natapp.cn/article/natapp_newbie

  1. 打开网址,进行免费注册

    https://natapp.cn/article/natapp_newbie

  2. 注册成功后,会借助支付宝完成个人信息认证

    • 成功后的页面

      在这里插入图片描述

  3. 功后,点击购买隧道,选择免费购买,点击选择免费购买即可

    在这里插入图片描述

  4. 点击客户端下载,根据具体需要下载对应的版本

    在这里插入图片描述

  5. 将其解压在一个文件夹后,创建一个后缀为.bat的脚本,用于开启natapp。脚本内容为:start natapp -authtoken=xxxx,xxxx内容为自己的authtoken

    在这里插入图片描述

    1. 查看自己的authtoken:点击我的隧道即可看见

    在这里插入图片描述

    1. 点击在上示图片中的配置,配置自己的jenkins的服务器ip和端口号8777,以实现jenkins的自动拉取

      在这里插入图片描述

    2. 最后,双击步骤5中自己创建的.bat文件,生成外网域名

      在这里插入图片描述

以上完成了关于NATAPP的相关操作

2. 关于jenkins上的操作

  1. 创建一个新建item,选择maven

    在这里插入图片描述

  2. 点开该项目配置git

    在这里插入图片描述

  3. 配置构建触发器,做以下操作,点击保存即可【在此之前需要先下载安装gitee插件】

在这里插入图片描述

3. 修改gitee仓库的配置

  1. 选中jenkins配置的那个远程仓库,点击配置,选中WebHooks,点击添加

    在这里插入图片描述

  2. 配置URL和WebHook密码

    在这里插入图片描述

测试

完成上述操作后,即可实现远程仓库改变,jenkins自动拉取

6.实现自动化部署

通过shell脚本实现自动化部署

jenkins 软件需要大量集成第三方很多软件【maven、git、jdk】,如果我们的项目也部署到该服务器下,势必导致项目性能弱

把jenkins所在的服务器下打包好的项目远程复制到其他服务器上。在其他服务器进行项目的启动和关闭

  • 远程复制命令
scp xxx.jar root@远程ip:/远程路径

此时需要输入密码,所以要进行免密复制操作

6.1 免密复制操作

配置ssh免密登录

免密登录主要是方便Jenkins服务器的root用户——向——>应用服务器的root用户上 jar包拷贝。部署本就是jar包拷贝的过程

  • Jenkins机器上使用root用户 生成密钥【注意,此处是root用户】
ssh-keygen -t rsa
然后进行3次回车

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

ssh文件夹中的文件描述

  • id_rsa :生成的私钥文件
  • id_rsa.pub:生成的公钥文件
  • 接下来,需要将公钥导入到认证文件中【Jenkins】
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

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

  • .ssh目录的权限必须是700
  • .ssh/authorized_keys文件权限必须是600
  • 给对应文件授权【Jenkins】
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
  • authorized_keys文件拷贝到另一台应用服务器的root用户 .ssh目录下

    • 首先在应用服务器上用root用户创建/root/.ssh文件夹

      mkdir -p /root/.ssh
      
    • Jenkins服务器上将pub公钥文件拷贝到应用服务器的 .ssh目录下

scp -p ~/.ssh/id_rsa.pub root@应用服务器的IP地址:/root/.ssh/authorized_keys
  • Jenkins服务器上进行免密连接测试
ssh 应用服务器ip地址

总结

1. 在jenkin所在的服务器使用ssh-keygen -t rsa
2. 把公钥加载到认证文件中cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3. 修改.ssh [700]和authorized_keys [600]的权限.
4. 把jenkins服务器上公钥远程复制到免密的服务器上。mkdir -p /root/.ssh
    scp -p ~/.ssh/id_rsa.pub root@应用服务器的IP地址:/root/.ssh/authorized_keys

6.2 用于远程复制的脚本

  1. 点开Jenkins项目,点击配置
  2. 选中下图位置,点击Execute shell,将脚本粘贴到此处

在这里插入图片描述

脚本

#!/bin/bash

echo "部署的目录和项目名称"
DIR="/data/app"
projectName="my-boot"

echo "待部署的应用服务器,可多台"
# 部署项目的ip 
server_ips="172.16.7.112"
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"

把Jenkins打包的jar远程copy到指定的服务器下

6.3 用于启动项目的脚本

  1. 根据远程复制的脚本,可知项目打包后的路径/data/app

  2. 该目录下有my-boot目录

  3. 在该目录下创建start.sh文件

    mkdir start.sh
    
  4. 将下列脚本复制粘贴即可

#!/bin/bash
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

6.4 用于关闭的脚本

  1. 根据远程复制的脚本,可知项目打包后的路径/data/app

  2. 该目录下有my-boot目录

  3. 在该目录下创建stop.sh文件

    mkdir stop.sh
    
  4. 将下列脚本复制粘贴即可

#!/bin/bash

APP_ID=my-boot
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh

6.5 在Jenkins配置中引入关闭和启动脚本

sh $DIR/${projectName}/stop.sh
sh $DIR/${projectName}/start.sh

先关后开

在这里插入图片描述

6.6 测试

测试时,需要在应用服务器上启动该项目,同样在my-boot目录下

java -jar my-boot.bar

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

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

相关文章

ElMessage自动引入,样式缺失和ts esline 报错问题解决

一. 环境 "unplugin-auto-import": "^0.17.6", "vue": "^3.3.8", "vite": "^5.0.0", "typescript": "^5.2.2",二. ElMessage样式缺失问题. 以下有两种解决方法 方法一: 配置了自动引用后…

【Java算法专场】二分查找(上)

目录 前言 什么是二分查找&#xff1f; 二段性 ​​​​​​​​​​​​​​​​​​​​​二分查找 算法分析 算法步骤 算法代码 算法示例 模板 在排序数组中查找元素的第一个和最后一个位置 算法分析 算法步骤 算法代码 算法示例 搜索插入位置 算法分析 算法步…

HTML常见标签——超链接a标签

一、a标签简介 二、a标签属性 href属性 target属性 三、a标签的作用 利用a标签进行页面跳转 利用a标签返回页面顶部以及跳转页面指定区域 利用a标签实现文件下载 一、a标签简介 <a>标签用于做跳转、导航&#xff0c;是双标签&#xff0c;记作<a></a>&#…

MFC开发,自定义消息

在MFC开发中&#xff0c;主要核心机制就是消息机制。QT与之类似的机制就是信号与槽。QT中的信号与槽是非常容易自定义的&#xff0c;MFC也是如此&#xff0c;自定义也是比较方便&#xff0c;况且自定义消息或者控件在整个GUI图形化界面开发中也是非常重要的部分&#xff0c;上篇…

项目都做完了,领导要求国际化????--JAVA后端篇

springboot项目国际化相信各位小伙伴都会&#xff0c;很简单&#xff0c;但是怎么项目都做完了&#xff0c;领导却要求国际化文件就很头疼了 国际化的SpringBoot代码&#xff1a; 第一步&#xff1a;创建工具类 /*** 获取i18n资源文件** author bims*/ public class Message…

Java Collections类

Collections是一个与有关集合的工具类&#xff0c;提供了很多对集合进行操作的方法。 常见方法 addAll&#xff1a;往集合中添加多个元素。 public static <T> boolean addAll(Collection<? super T> c, T... elements) {boolean result false;for (T element…

MongoDB教程(二十):MongoDB正则表达式

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、正则表…

Python3网络爬虫开发实战(3)网页数据的解析提取

文章目录 一、XPath1. 选取节点2. 查找某个特定的节点或者包含某个指定的值的节点3. XPath 运算符4. 节点轴5. 利用 lxml 使用 XPath 二、CSS三、Beautiful Soup1. 信息提取2. 嵌套选择3. 关联选择4. 方法选择器5. css 选择器 四、PyQuery1. 初始化2. css 选择器3. 信息提取4. …

程序的机器级表示(一)汇编,汇编格式和数据传输指令

系列文章 : 深入理解计算机系统笔记 文章目录 系列文章3 程序的机器级表示3.1 历史观点3.2 程序编码3.2.1 机器级代码3.2.2 代码示例3.2.3 关于格式的注解 3.3 数据格式3.4 访问信息3.4.1 操作数指示符3.4.2 数据传送指令3.4.3 数据传送示例3.4.4 压入和弹出栈数据 3 程序的机…

如何做校园圈子小程序,需要哪些功能?可打包APP小程序H5,源码交付,支持二开!

独立学校首页 支持每个学校独立首页!每个学校都可以拥有专属首页&#xff0c;打造不同风格的学校首页展示效果 多业务覆盖 可实现校园内外卖、跑腿、超市、药店水果、快餐店等业务全覆盖!所有配送业务平台都可开展 多站点运营 支持多学校多站点运营&#xff0c;各分站管理员可独…

【日记】办个护照不至于有这种刑事罪犯一样的待遇吧……(737 字)

正文 暴晒&#xff0c;中午出去骑共享单车&#xff0c;座垫都不敢坐。 至于为什么&#xff0c;中午觉都不睡跑出去&#xff0c;是因为今天他们办承兑汇票的业务&#xff0c;搞了一天&#xff0c;中午不休息&#xff0c;说可能还会用到我的指纹&#xff0c;让我 on call。我心想…

基础IO(文件系统)

一、块组的宏观理解 1、分区和分组 首先一台电脑就一个磁盘&#xff0c;一般800GB到1TB&#xff0c;为了管理这么大的内存数据&#xff0c;我们就对磁盘进行分区&#xff0c;分区之后才是我们看到的C盘&#xff0c;D盘等。 但是其实分区之后空间还是太大不好管理&#xff0c;…

习题2.23

不解释了&#xff0c;这么简单的题目。 (defn for-each[f item](if (not (empty? item));(println (f (first item)))(f (first item)))(if (not (empty? item))(for-each f (rest item)));(f (first item)))执行结果如下

FastGPT、Dify、Coze产品功能对比分析

在当前的人工智能领域&#xff0c;模型接入、应用发布、应用构建、知识库和工作流编排等功能是衡量一个AI平台综合能力的重要指标。本文将对FastGPT、Dify和Coze这三款产品的功能进行详细对比分析&#xff0c;以帮助用户更好地了解它。 订阅模式及市场概况 在订阅模式及市场概…

CSS常见属性详解——内边距与外边距

内边距与外边距 内边距 外边距 应用场景 在网页排版布局时&#xff0c;我们经常会希望元素与元素之间有一定的间距&#xff0c;此时我们可能会用到CSS的外边距或内边距属性&#xff0c;这两个属性都能让元素之间产生距离&#xff0c;那么他们之间有什么不同呢&#xff1f; …

【SpringBoot】1 Gitee

本项目 Gitee 地址&#xff1a;https://gitee.com/Lin_DH/system idea中可能装个gitee的插件&#xff0c;这样操作起来比较方便。 1&#xff09;登录 Gitee 官网&#xff08;https://gitee.com/&#xff09;&#xff0c;新建仓库。 2&#xff09;复制新建的 Gitee 仓库地址&am…

大麦抢票-狠货

大部分购买方式已迁移至手机端&#xff0c;专注研究移动端 小白操作–仅供学习 注意在帐号按权重的第三方账号设置解绑淘宝&#xff0c;否则有可能在抢票时候出现滑块&#xff0c;影响抢票,抢票优先选择大麦 ⚠️核心内容参考&#xff1a; 据悉&#xff0c;在购票环节&…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的朋友排队(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

深入分析 Android ContentProvider (五)

文章目录 深入分析 Android ContentProvider (五)ContentProvider 的性能优化和实践案例1. 性能优化技巧1.1. 数据库索引优化示例&#xff1a;添加索引 1.2. 批量操作与事务管理示例&#xff1a;批量插入操作 1.3. 使用异步操作示例&#xff1a;使用 AsyncTask 进行异步查询 1.…

FastAPI(七十八)实战开发《在线课程学习系统》接口开发-- 评论

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 梳理下思路 1.判断是否登录 2.课程是否存在 3.如果是回复&#xff0c;查看回复是否存在 4.是否有权限 5.发起评论 首先新增pydantic模型 class Cour…