文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Jenkins将构建生成的程序包部署到服务器(一)

2023-09-01 08:00

关注
Jenkins将构建生成的程序包部署到服务器的常用方法有:1. Rsync over SSH使用rsync命令通过SSH把程序包复制到服务器上。在Jenkins的“执行shell脚本”构建后操作中执行rsync命令,指定本地和远程服务器的程序包目录即可。2. SFTP使用SFTP客户端(Jenkins自带的内置SFTP服务或第三方插件提供的服务)上传程序包到服务器。在构建后操作的“Send files or execute commands over SSH”中填写远程服务器信息和程序包目录,上传文件即可。3. SSH 执行命令直接在“执行shell脚本”中使用scp或sftp命令上传程序包。或者使用ssh登录到服务器,并使用tar/unzip解压命令部署程序包。4.FTP 上传如果服务器支持FTP服务,可以使用Jenkins自带的FTP功能上传程序包。在“Send files or execute commands over FTP”构建后操作中指定服务器信息,上传文件。5. API 部署如果有发布程序包的API,可以在构建后调用API将程序包部署到服务器。通过“Invoke Webhook”或“Invoke REST API”等插件来调用部署API完成上传。除此之外,更高级的方法还有:使用Ansible、SaltStack等编排工具自动化部署程序包。 使用容器(Docker等)来打包应用和环境,然后在另一个Jenkins流水线中拉取并启动容器。 使用懒加载的中间件、CDN来部署程序包。服务启动时才会将程序包拉取运行。所以,综上Jenkins主要通过以下方式将构建的程序包部署到服务器:- rsync+SSH- SFTP上传 - SSH执行命令- FTP上传- 调用部署API- 使用自动化运维工具来部署- 构建Docker镜像,并在其他流水线中运行根据自己的实际情况选择最适合的方案,可以实现Jenkins的CI与CD,完成从代码到部署上线的全流程自动化

目前在用的是rsync+ssh 组合构建cicd:
jenkins把程序包推送到服务器的几种方法
rsync+jenkins在同一台部署
/bin/sh /usr/local/deploy/rsync.sh $JOB_NAME $WORKSPACE
/bin/sh /srv/salt/script/tomcat_restart.sh $JOB_NAME

rsync.sh $JOB_NAME $WORKSPACEbash#!/bin/bash# 设置echo的颜色 COLOR_WHITE="\033[1;37m"  # 部署目录dir="/usr/local/deploy/program_new"   # 获取所有项目名称  project=$(ls /usr/local/deploy/program_new)   # 获取当前时间time=$(date "+%m-%d-%H:%M:%S")  # 从第一个参数获取项目名称 p=$(echo "$1" |awk -F-- '{print $2}')  # 循环项目名称  for i in "$p"; do    # 检查项目是否存在     echo "${project[@]}" |grep -wq "$1"       if [ $? == 0 ];then         # 获取项目的IP地址          cat $dir/$1 | grep -v "^#" | grep "IP" | awk -F= '{print $2}' |               # 部署到IP           while read ip             do                       # 部署静态资源                                 if [ "$i" = html_static ];then                           rsync -av --password-file=/usr/local/deploy/pwd.conf --exclude .svn $2data/app/tomcat_war/bin/startup.sh

这里是启动脚本带详细中文注释:

bashBUILD_ID=DONTKILLME#发布  echo "--------->开始启动:"$JARFILE"<-----------"  source /etc/profile  # 重新加载环境变量pkill java   # 杀掉存在的java进程nohup java -XX:+UseG1GC -XX:ParallelGCThreads=2 -XX:MaxGCPauseMillis=200 -Dfile.encoding=UTF-8 -Dhudson.util.ProcessTree.disable=true  -jar /data/app/java.jar --spring.profiles.active=test  # 后台启动Java应用,并传递必要的参数:# -XX:+UseG1GC 使用G1垃圾收集器# -XX:ParallelGCThreads=2  使用2个线程并行执行垃圾回收# -XX:MaxGCPauseMillis=200 垃圾收集过程中停顿不超过200ms# -Dfile.encoding=UTF-8   设置默认编码为UTF-8# -Dhudson.util.ProcessTree.disable=true  禁用进程树跟踪# --spring.profiles.active=test              使用test配置文件  > /dev/null 2>&1 &   # 重定向stdout和stderr到/dev/null,并在后台运行echo "start begin"  # 打印启动日志#nohup java -Xms128m -Xmx128m -jar $JARFILE >/dev/null 2>&1 &echo "start begin"    # 备选方案,限制java内存并启动jar包

这个脚本的作用是:

  1. 定义BUILD_ID环境变量
  2. 打印发布日志
  3. 重新加载环境变量
  4. 杀掉存在的java进程
  5. 使用nohup在后台启动Java应用,并传递必要的参数
  6. 重定向stdout和stderr到/dev/null,并在后台运行
  7. 打印启动日志
  8. 提供备选方案,限制内存并运行jar包
    该脚本使用nohup后台运行Java应用,并传递垃圾收集、编码、配置文件等必要参数。同时提供备选方案限制内存运行。

jar程序部署脚本

source /etc/profilecd /data/apprm -rf testjarunzip testjar-bin.zipcd testjarchmod u+x restart.sh/data/app/testjar/restart.sh这个脚本将:1. source /etc/profile   - 重新加载环境变量2. cd /data/app  - 切换到/data/app目录3. rm -rf testjar   - 删除testjar目录(如果存在)4. unzip testjar-bin.zip  - 解压testjar-bin.zip压缩包5. cd testjar  - 进入testjar目录6. chmod u+x restart.sh  - 给restart.sh文件添加可执行权限7. /data/app/testjar/restart.sh    - 执行restart.sh脚本这个脚本的作用是:1. 准备环境 - 重新加载环境变量,切换目录2. 删除现有的testjar目录(如果存在)3. 解压testjar-bin.zip压缩包4. 进入testjar目录并给restart.sh文件添加可执行权限5. 执行restart.sh脚本该脚本一步步进行目录清理、文件解压和授权,最终执行restart.sh脚本。restart.sh脚本很可能负责启动或重启testjar应用。整个脚本实现了对testjar应用的部署流程 - 清理现有安装 -> 解压安装包 -> 启动应用。
这里是脚本带详细注释:bash#!/bin/bashBASE_DIR=/data/app/testjar  # 定义应用基础目录CNF_DIR=$BASE_DIR/config# 定义配置文件目录LOG_DIR=/data/log/testjar   # 定义日志目录JAR_DIR=$BASE_DIR/lib# 定义jar包目录MAIN_CLASS="com.testjar.testApplication"  # 定义主类名if [ ! -x $LOG_DIR ]  # 如果日志目录不存在 then    `mkdir -p $LOG_DIR`  # 创建日志目录fi   proc_pid=`ps -ef | grep -i $MAIN_CLASS|grep -v "grep"|awk '{print $2}'` # 获取应用主类的进程idif [[ -z $proc_pid ]]  # 如果进程id为空then     echo "not exists proc"  # 打印日志,进程不存在 else     echo "stop process " $proc_pid     # 打印日志,停止进程   kill -9 $proc_pid     # 杀掉进程    sleep 5s     # 等待5秒   echo "kill successful " $proc_pid  # 打印日志,进程停止成功fi#nohup java -Xms2048M -Xmx2048M -Dfile.encoding=UTF-8 -classpath $CNF_DIR -Djava.ext.dirs=$JAR_DIR $MAIN_CLASS --spring.profiles.active=aliyunprd >> $BASE_DIR/shell.log &  # 备选方案1,重定向日志并后台运行nohup java -Xms2048M -Xmx2048M -Dfile.encoding=UTF-8 -classpath $CNF_DIR -Djava.ext.dirs=$JAR_DIR $MAIN_CLASS --spring.profiles.active=aliyunprd >/dev/null 2>&1 &  # 后台运行应用,重定向日志到/dev/nullnew_proc_pid=`ps -ef | grep -i $MAIN_CLASS|grep -v "grep"|awk '{print $2}'`   # 获取新启动应用主类进程id这个脚本的作用是:1. 定义应用必要的目录2. 获取应用主类的进程id3. 如果进程id为空,打印日志进程不存在4. 否则,停止进程并打印日志 5. 后台启动应用,重定向日志到/dev/null6. 获取新启动应用主类进程id该脚本首先判断应用是否已启动,如果启动则停止应用。然后使用nohup后台启动应用,并重定向日志输出。最后获取新启动应用的进程id。实现了应用的停止与启动。

来源地址:https://blog.csdn.net/weixin_54104864/article/details/130928187

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯