帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
Jenkins将构建生成的程序包部署到服务器(一)
发布时间:2024-03-06 08:08:10   分类:帮助文档
Jenkins将构建生成的程序包部署到服务器(一) 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 $WORKSPACE bash #!/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 $2/* ruser@$ip::static elif [ "$i" = static ];then rsync -av --password-file=/usr/local/deploy/pwd.conf --exclude .svn $2/* ruser@$ip::html_static elif [ "$i" = web_static ];then rsync -av --password-file=/usr/local/deploy/pwd.conf --exclude .svn $2/* ruser@$ip::web_static # 部署WAR包 elif [ "$i" = id ];then rsync -av --password-file=/etc/pwd.conf $2/id/target/$i.war ruser@$ip::webapps/tomcat/webapps/ # ... fi if [ $? -ne 0 ];then exit 1 fi done else echo "$COLOR_WHITE 用法: $0 {项目名称}" fi done 这个脚本将: 从第一个参数获取项目名称检查项目是否存在如果存在,获取项目的IP地址根据项目名称部署静态资源或WAR包到IP如果发生任何错误,退出否则,如果项目不存在,打印用法 该脚本使用rsync通过SSH部署到服务器,密码存储在密码文件中。它可以部署静态内容和Java WAR包。 tomcat_restart.sh $JOB_NAME #!/bin/bash echo $1 # $p 正则出 项目名 p=$(echo "$1" |awk -F-- '{print $2}') dir="/usr/local/deploy/program_new" cat $dir/$1 | grep -v "^#" | grep "PORT" | awk -F= '{print $2}' | while read port do cat $dir/$1 | grep -v "^#" | grep "IP" | awk -F= '{print $2}' | while read ip do echo $ip #改了加 grep $p 精确筛选出 saltid 解决了 发布重启时候出了一堆saltid saltid=$(salt-key |grep -w $ip) #salt $ip cmd.script salt://script/service_restart_temp.sh "$1 $port" salt $saltid cmd.script salt://script/service_restart_temp.sh "$1 $port" sleep 5 done done 这个脚本将: 获取第一个参数的项目名称从部署目录获取项目的端口和IP循环IP获取精确匹配的salt id,避免重启时返回多余的salt id调用saltstack在IP上重启tomcat,并传递项目名称和端口作为参数等待5秒 该脚本使用Saltstack在远程服务器上重启Tomcat,以完成部署后的服务重启。 通过匹配项目名称来过滤IP和salt id,实现了精确重启相关服务。 #!/bin/bash p=$(echo "$1" |awk -F-- '{print $2}') tomcat_path=/data/app/tomcat 关闭tomcat #${tomcat_path}/bin/shutdown.sh #echo "关闭tomcat成功:${tomcat_path}/bin/shutdown.sh" #ps -ef | grep ${tomcat_path} | awk '{print $2}' | xargs kill -9 netstat -antup |grep $2 |awk '{print $7}' | awk -F/ '{print $1}' | xargs kill -9 echo "关闭tomcat成功" sleep 5 删除temp文件夹下所有文件 rm -rf ${tomcat_path}/temp/* rm -rf ${tomcat_path}/logs/* echo "删除temp文件夹下所有文件 : rm -rf ${tomcat_path}/temp/*" 删除work目录下所有缓存 rm -rf ${tomcat_path}/work/* echo "删除work目录下所有缓存 : rm -rf ${tomcat_path}/work/*" 删除webapps下所有文件 rm -rf ${tomcat_path}/webapps/$p if [ "$p" = "archives" ];then rm -rf ${tomcat_path}/webapps_1/ROOT fi if [ "$p" = "report" ];then rm -rf ${tomcat_path}/webapps/ROOT rm -rf ${tomcat_path}/webapps/ROOT.war mv ${tomcat_path}/webapps/$p.war ${tomcat_path}/webapps/ROOT.war fi if [ "$p" = "oct" ];then rm -rf ${tomcat_path}/webapps/ROOT rm -rf ${tomcat_path}/webapps/ROOT.war mv ${tomcat_path}/webapps/$p.war ${tomcat_path}/webapps/ROOT.war fi echo "删除原始war包:rm -rf ${tomcat_path}/webapps/$p" su - deploy -c ${tomcat_path}/bin/startup.sh echo "启动tomcat : ${tomcat_path}/bin/startup.sh" 这个脚本将: 从第一个参数获取项目名称根据端口号杀掉Tomcat进程等待5秒删除Tomcat temp和logs目录下的文件删除Tomcat work目录下的缓存根据项目名称删除webapps目录下的文件处理archives, report和oct项目的特殊情况启动Tomcat 该脚本首先正确关闭Tomcat,清除缓存和临时文件,删除部署后的webapps,处理任何特殊情况,然后重新启动Tomcat 使用步骤,通过saltstack来匹配jobname,然后调用脚本,来推送,和执行一下命令, 当然也可以通过推送到程序包之后直接调用服务器脚本来更新, /usr/sbin/lsof -i:8080 |grep java |awk '{print $2}' |xargs -i kill -9 {} sleep 5 rm -rf /data/app/tomcat_war/logs/* rm -rf /data/app/tomcat_war/my_logs/* rm -rf /data/app/tomcat_war/webapps/war rm -rf /data/app/tomcat_war/temp/* rm -rf /data/app/tomcat_war/work/* /data/app/tomcat_war/bin/startup.sh 这里是启动脚本带详细中文注释: bash BUILD_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包 这个脚本的作用是: 定义BUILD_ID环境变量打印发布日志重新加载环境变量杀掉存在的java进程使用nohup在后台启动Java应用,并传递必要的参数重定向stdout和stderr到/dev/null,并在后台运行打印启动日志提供备选方案,限制内存并运行jar包 该脚本使用nohup后台运行Java应用,并传递垃圾收集、编码、配置文件等必要参数。同时提供备选方案限制内存运行。 jar程序部署脚本 source /etc/profile cd /data/app rm -rf testjar unzip testjar-bin.zip cd testjar chmod 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/bash BASE_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}'` # 获取应用主类的进程id if [[ -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/null new_proc_pid=`ps -ef | grep -i $MAIN_CLASS|grep -v "grep"|awk '{print $2}'` # 获取新启动应用主类进程id 这个脚本的作用是: 1. 定义应用必要的目录 2. 获取应用主类的进程id 3. 如果进程id为空,打印日志进程不存在 4. 否则,停止进程并打印日志 5. 后台启动应用,重定向日志到/dev/null 6. 获取新启动应用主类进程id 该脚本首先判断应用是否已启动,如果启动则停止应用。然后使用nohup后台启动应用,并重定向日志输出。 最后获取新启动应用的进程id。 实现了应用的停止与启动。
香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价