jenkins 通过nginx 热部署 web应用

bash 复制代码
log_format webapp_log '[$time_local] $remote_addr - from $server_addr:$server_port to $upstream_addr - $remote_user \n'
'"$request" $status $body_bytes_sent '
'"$http_user_agent" "$http_x_forwarded_for"';

upstream  webapp {
    server    10.190.27.110 backup;
    server    10.190.27.111 backup;
    server    127.0.0.1 down;
}

server{
    listen 8081;
    listen 10.27.190.109:8081;
    listen [::]:8081;
    server_name localhost;
	
    location / {
       proxy_pass http://webapp;
    }
}

server {
    listen 8001;
    listen 10.27.190.109:8001;
    listen [::]:8001;
    server_name  localhost;
    #log data format
    if ($time_iso8601 ~ '(\d{4})-(\d{2})-(\d{2})') {
        set $year $1;
        set $month $2;
        set $day $3;
    }
    #É趨±¾ÐéÄâÖ÷>>úµÄ·ÃÎÊÈÕÖ¾
    access_log /var/log/nginx/webapp/access_$year$month$day.log  webapp_log;
    error_log /var/log/nginx/webapp/error.log;
    location / {
        proxy_set_header Host  $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://webapp;
    }
    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page  502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

jenkins 通过nginx 热部署 应用

1.Git-分支 参数化

2.编译环境 参数化

3.大版本 参数化

git地址配置,并使用 分支参数

创建SSH-Server步骤

第一个应用:

bash 复制代码
分2步处理,也可直接 脚本
1.创建目录 按日期建 BUILD_YM是 build-timestamper 全局变量
if [ ! -d "~/srv/webapp/PublishHistory/${BUILD_YM}" ]; then
    mkdir -p ~/srv/webapp/PublishHistory/${BUILD_YM}
fi
if [ ! -d "/srv/webapp/PublishHistory/${BUILD_YM}/${VersionMajor}.${BUILD_VERSION}" ]; then
    mkdir -p /srv/webapp/PublishHistory/${BUILD_YM}/${VersionMajor}.${BUILD_VERSION}
fi
if [ ! -d "/srv/webapp/backup" ]; then
    mkdir -p /srv/webapp/backup
fi
if [ ! -d "/srv/webapp/api/publish" ]; then
    mkdir -p /srv/webapp/api/publish
fi

2.ssh 传输文件完毕后 备份旧代码、更新代码(一定要是 服务否则 ssh停止后所有相关进程都会被停止)
mv ~/srv/webapp/PublishHistory/${BUILD_YM}/webapp.WebApi.zip /srv/webapp/PublishHistory/${BUILD_YM}/webapp.WebApi.${VersionMajor}.${BUILD_VERSION}.zip

zip -qr /srv/webapp/backup/webappaip.${VersionMajor}.${BUILD_VERSION}.${BUILD_YM}.bak.zip  /srv/webapp/api/publish -x "/srv/webapp/api/publish/Logs/*"


unzip /srv/webapp/PublishHistory/${BUILD_YM}/webapp.WebApi.${VersionMajor}.${BUILD_VERSION}.zip -d /srv/webapp/PublishHistory/${BUILD_YM}/${VersionMajor}.${BUILD_VERSION}

systemctl stop webapp.api

rm -rf /srv/webapp/api/publish/wwwroot

mv -bf /srv/webapp/PublishHistory/${BUILD_YM}/${VersionMajor}.${BUILD_VERSION}/*  /srv/webapp/api/publish
chmod u+rwx /srv/webapp/api/publish/webapp.WebApi

rmdir /srv/webapp/PublishHistory/${BUILD_YM}/${VersionMajor}.${BUILD_VERSION}
rm -rf /srv/webapp/api/publish/*~

systemctl start webapp.api

第二个应用(正式应用)

先停止 应用,让 nginx 使用 backup 的webapi

bash 复制代码
looptimes=3
result_code=0
ok_status=0
for((i=0;i<=looptimes;i++))
do
    result_code=`curl -I -m 10 -o /dev/null -s -w %{http_code} 10.190.27.111`   
    if [ $result_code -eq 200 ]; then
        echo "webapp backup api deploment ok"
        sed -i "10c     server    127.0.0.1  down;" /etc/nginx/conf.d/webapp.conf
        nginx -s reload
        ok_status=1
        break
    else
        sleep 3s
    fi
done

if [$ok_status -eq 0]; then
    echo "webapp api is not alive(wait 4 $[3*looptimes]s times already down)"
fi

if [ ! -d "~/srv/webapp/PublishHistory/${BUILD_YM}" ]; then
    mkdir -p ~/srv/webapp/PublishHistory/${BUILD_YM}
fi

if [ ! -d "/srv/webapp/PublishHistory/${BUILD_YM}/${VersionMajor}.${BUILD_VERSION}" ]; then
    mkdir -p /srv/webapp/PublishHistory/${BUILD_YM}/${VersionMajor}.${BUILD_VERSION}
fi

if [ ! -d "/srv/webapp/backup" ]; then
    mkdir -p /srv/webapp/backup
fi

if [ ! -d "/srv/webapp/api/publish" ]; then
    mkdir -p /srv/webapp/api/publish
fi
bash 复制代码
mv ~/srv/webiapp/PublishHistory/${BUILD_YM}/webiapp.WebApi.zip /srv/webiapp/PublishHistory/${BUILD_YM}/webiapp.WebApi.${VersionMajor}.${BUILD_VERSION}.zip

zip -qr /srv/webiapp/backup/webiappaip.${VersionMajor}.${BUILD_VERSION}.${BUILD_YM}.bak.zip  /srv/webiapp/api/publish -x "/srv/webiapp/api/publish/Logs/*"


unzip /srv/webiapp/PublishHistory/${BUILD_YM}/webiapp.WebApi.${VersionMajor}.${BUILD_VERSION}.zip -d /srv/webiapp/PublishHistory/${BUILD_YM}/${VersionMajor}.${BUILD_VERSION}

systemctl stop webiapp.api

rm -rf /srv/webiapp/api/publish/wwwroot

mv -bf /srv/webiapp/PublishHistory/${BUILD_YM}/${VersionMajor}.${BUILD_VERSION}/*  /srv/webiapp/api/publish
chmod u+rwx /srv/webiapp/api/publish/webiapp.WebApi

rmdir /srv/webiapp/PublishHistory/${BUILD_YM}/${VersionMajor}.${BUILD_VERSION}
rm -rf /srv/webiapp/api/publish/*~

systemctl start webiapp.api

looptimes=3
result_code=0
ok_status=0
for((i=0;i<=looptimes;i++))
do
    result_code=`curl -I -m 10 -o /dev/null -s -w %{http_code} localhost`   
    if [ $result_code -eq 200 ]; then
        echo "webiapp api deploment ok"
        sed -i "10c     server    127.0.0.1;" /etc/nginx/conf.d/webiapp.conf
        nginx -s reload
        ok_status=1
        break
    else
        sleep 3s
    fi
done

if [$ok_status -eq 0]; then
    echo "webiapp api is not alive(wait 4 $[3*looptimes]s and already down)"
fi

nginx 配置

相关推荐
小小管写大大码1 小时前
如何让vscode变得更智能?vscode接入claude实现自动编程
运维·ide·vscode·自动化·编辑器·ai编程·腾讯云ai代码助手
zhang133830890752 小时前
CG-09H 超声波风速风向传感器 加热型 ABS材质 重量轻 没有机械部件
大数据·运维·网络·人工智能·自动化
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.3 小时前
Keepalived VIP迁移邮件告警配置指南
运维·服务器·笔记
物联网软硬件开发-轨物科技3 小时前
【轨物洞见】告别“被动维修”!预测性运维如何重塑老旧电站的资产价值?
运维·人工智能
程序员允诺3 小时前
[DevOps实战] 彻底解决依赖地狱:如何编译全静态、可移植的 Xorriso 工具
运维·devops
酣大智3 小时前
接口模式参数
运维·网络·网络协议·tcp/ip
一只自律的鸡4 小时前
【Linux驱动】bug处理 ens33找不到IP
linux·运维·bug
!chen4 小时前
linux服务器静默安装Oracle26ai
linux·运维·服务器
莫大3304 小时前
2核2G云服务器PHP8.5+MySQL9.0+Nginx(LNMP)安装WordPress网站详细教程
运维·服务器·nginx
刚刚入门的菜鸟4 小时前
php-curl
运维·web安全·php