当前位置: 首页 > news >正文

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

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/.sshscp -p ~/.ssh/id_rsa.pub root@应用服务器的IP地址:/root/.ssh/authorized_keys

6.2 用于远程复制的脚本

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

在这里插入图片描述

脚本

#!/bin/bashecho "部署的目录和项目名称"
DIR="/data/app"
projectName="my-boot"echo "待部署的应用服务器,可多台"
# 部署项目的ip 
server_ips="172.16.7.112"
for server_ip in ${server_ips[@]}
doecho "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
mkdir -p $DIR/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];thenmv $DIR/${projectName}/${projectName}.jar  $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar 
fi
EOFecho "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jarecho "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jarEOFdoneecho "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 ]];thensleep 3tail -n 10 release_out.logsleep 5tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];thenecho "Application started ok"exit 0
elseecho "Application started error"exit 1
fi

6.4 用于关闭的脚本

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

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

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

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 重塑生态体系 深挖应用场景 萤石诠释AI时代智慧生活新图景
  • 前端练习<HtmlCSS>——照片墙(附完整代码及实现效果)
  • 嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议数据可视化:智能物流管理系统设计思路流程(附代码示例)
  • hamcrest 断言框架使用示例和优势分析
  • 与Bug较量:Codigger之软件项目体检Software Project HealthCheck来帮忙
  • 【ffmpeg命令入门】视频的旋转与翻转
  • 搭建本地私有知识问答系统:MaxKB + Ollama + Llama3 (wsl网络代理配置、MaxKB-API访问配置)
  • MongoDB多数据源配置与切换
  • Flink 技术与应用(一)
  • 推荐3款将相片变为动漫风格的免费AI工具推荐
  • 设计模式-创建型模式
  • JAVA笔记十六
  • CAS的三大问题和解决方案
  • Unity UGUI 之 坐标转换
  • C++20之设计模式:状态模式
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • ES6核心特性
  • laravel with 查询列表限制条数
  • Tornado学习笔记(1)
  • vue学习系列(二)vue-cli
  • Web标准制定过程
  • 记录一下第一次使用npm
  • 日剧·日综资源集合(建议收藏)
  • 如何进阶一名有竞争力的程序员?
  • 三分钟教你同步 Visual Studio Code 设置
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 数组大概知多少
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 无服务器化是企业 IT 架构的未来吗?
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • #前后端分离# 头条发布系统
  • (1)(1.11) SiK Radio v2(一)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)pulsar安装在独立的docker中,python测试
  • (二)PySpark3:SparkSQL编程
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (实战篇)如何缓存数据
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (五)Python 垃圾回收机制
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • **PHP二维数组遍历时同时赋值
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET MVC 验证码
  • .NET 中什么样的类是可使用 await 异步等待的?
  • @Bean, @Component, @Configuration简析
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • []error LNK2001: unresolved external symbol _m
  • [1525]字符统计2 (哈希)SDUT
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]