Jenkins 自动化部署上线

python:jenkins部署及自动化上线 Jenkins概述 • Jenkins是由java编写的一款开源软件 • 作为一款非常流行的CI(持续集成)工作,用于构建和测试各种项目 • Jenkins 的主要功能是监视重复工作的执行,例如软件工程的构建或在 cron下设置的 jobs 持续集成 • 持续集成(CI)是当下最为流行的应用程序开发实践方式 • 程序员在代码仓库中集成了修复bug、新特性开发或是功能革新 • CI工具通过自动构建和... 阅读详情

Jenkins 自动化部署上线

标签(空格分隔): Jenkins

更多好文章请访问我博客 https://www.abcdocker.com


一、Jenkins是什么

Jenkins是一款自包含的开源自动化服务,可用于自动执行与构建,测试和交付或部署软件有关的各种任务。
Jenkins目前可以通过本地系统软件包Docker进行安装,甚至可以通过任何安装了Java运行环境的计算机独立运行

二、上线流程图

既然我们说到自动化上线,我们就不得不说说一个项目上线的流程.只有规范起来才可以做到不出事故!

上线流程图如下图所示
image_1ch5i8umo201i1011vh11jaogd.png-168.4kB

三、Jenkins安装配置

Jenkins依赖Java环境,我们需要安装Java环境以及相关的环境准备

###关闭防火墙
$ iptables -F
$ iptables -X
$ systemctl stop firewalld
$ systemctl disable firewalld

###安装yum源
$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
$ yum clean all && yum makecache   

1.下载Jdk包
image_1ch2lpjhd1of5d9hvpj1rnqbjam.png-277.1kB
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

上传jdk包到服务器

###解压拷贝jdk
$ tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local/
$ ln -s /usr/local/jdk1.8.0_171/ /usr/local/jdk
$ ln -s /usr/local/jdk/bin/java /usr/bin/java

###设置环境变量
$ vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

$ source  /etc/profile

2.安装Jenkins

$ wget  -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
$ rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
$ yum install jenkins -y

$ systemctl start jenkins
##如果我们启动Jenkins出现错误可以直接使用systemctl status jenkins查看错误

jenkins相关目录释义:

(1)/usr/lib/jenkins/:jenkins安装目录,war包会放在这里。
(2)/etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置。
(3)/var/lib/jenkins/:默认的JENKINS_HOME。
(4)/var/log/jenkins/jenkins.log:jenkins日志文件。

检查端口是否存在
image_1ch2n40p91muo1t57j5b1tm85bl1j.png-230.9kB

3.配置Jenkins
image_1ch2q7pj31se6u37rpj8bok176b.png-106kB

Jenkins有安全策略,我们按照提示拷贝验证码即可
image_1ch2ni2601kq018ge1tkfvjl160q20.png-113.7kB

将验证码复制到Web框里
image_1ch2nkdo0t0f17ekhi1vmmo7u2t.png-55.4kB

我们这里使用推荐就可以了,因为后期我们都可以在安装
image_1ch2nnk5no9f6ce1qe0ffl1nck3a.png-155.8kB

安装插件中,有的插件会因为网络问题无法安装成功

image_1ch2nudu5hbo53qes84409r147.png-164.5kB

我们这里可以创建一个管理员,或者直接使用admin

我们最好不要直接使用admin

image_1ch2o3sji13s01ahi1t7l1d45u7o4k.png-56.8kB

image_1ch2o5cqu2g3ds610ikjecmc351.png-63.3kB

安装完成访问地址:iP:8080
image_1ch2oae2qfi91ppegakidiq3k5u.png-112.6kB

到这里我们Jenkins已经安装成功,剩下的就是配置插件和配置环境

image_1ch2qgfhj577pru1sf3p3f2lc78.png-183.2kB

因为我们目前什么都没有需要安装插件,点击下步安装插件
image_1ch2qi0tfjfe1etl10d41g0rlth7l.png-188.4kB

为了模拟环境我们需要安装Jenkins一些相关插件
下面2个maven 插件都需要勾选
插件名称:maven lntergration

image_1ch2qscc99jb1uf31gk8kctd7r82.png-183.3kB

我们勾选安装重启
image_1ch2r4r0vna81okq1mi2m9113hp8s.png-172.6kB
image_1ch2qu1a5im5dc1m001nln6q58f.png-127kB

安装完成后如下图所示
默认是没有下面的maven项目的
image_1ch2rbd4o130l8ir1it3ofa137v9p.png-356.4kB

4.Jenkins配置项目

配置SVN地址
因为我是新建的Jenkins目录,没有权限,所以需要创建一个用于认证.
image_1ch2rq133kcmcuc80q1tbb19sa6.png-104.6kB

填写SVN地址,因为我这里的svn已经链接到ldap,所以不需要输入svn的密码,默认这里是svn的用户和密码

具体文章可以参考 VisualSVN 迁移至Linux SVN+Apache+ssl集成LDAP

image_1ch2s4h57jh3jng184u1508fgeaj.png-395kB

认证成功之后
image_1ch2s9cqqg4v1g2r1oaf17ms1rnhb0.png-141.9kB

了解maven 配置
首先我们的svn分支下面需要有pom.xml
image_1ch2t381b1cui2ovsmb1m2817id7.png-283.2kB

继续往下
↓
↓
↓
↓
因为我们只安装maven的插件,并没有安装maven服务,所以这里需要我们配置
image_1ch2sdufi1n38104b1g6av4n1vcbd.png-131.4kB

我们就在这里添加一个名字,maven就自动安装了
image_1ch2sis6h1ibrh4smjmdck15jqbq.png-179.3kB

Maven安装完成了,需要依赖吧都是从maven.apache.org下载会比较慢,所以我们指定私服的地址,因为在实际生产中也都是使用私服的。

在maven的配置文件里面也需要配置 配置文件conf/settings.xml 因为我们所使用的是Jenkins的自动安装,而不是指定路径所以我们要查到这个配置文件

maven 自动安装的配置路径
image_1ch2u85t61gu61j65lnfcrlu4vhi.png-76.7kB

配置Maven仓库地址

这里配置的都是私服地址
相关文章 Jenkins+Maven+SVN+Nexus 搭建持续集成环境

image_1ch2triup1f4jim166els3sosfr.png-331.3kB
配置Maven 镜像地址
image_1ch2u3h8sphp1jc2f391ot71kmdgl.png-323.2kB

配置Maven 编译参数 [研发都会]

相关文章:maven 编译命令
image_1ch2ssmlfdha2eq1pkihuv6q1ca.png-74kB

这个pom.xml里面配置是私服的地址
因为代码里面有很多东西是需要拉去依赖包,这些依赖包就存放在本地的私有仓库里(Nexus)

代码中pom.xml配置如下
私有仓库的地址
image_1ch2t4und125pmdh5dbah71j5odk.png-400.7kB

5.构建测试
image_1ch2t9pqrus91mni1a35v0f1n9jee.png-96.6kB

控制台输出说明

image_1ch35he289os1698430sr21aobhv.png-385.2kB

image_1ch35l1sl4kg12l4rsjiad1shlic.png-681.9kB

image_1ch35pomf1p4pnduuk81s1qdl1ip.png-526.3kB

6.Jenkins 工程目录

image_1ch56eo7f1jdh61n1aho1g961lsl19.png-301.5kB

可以通过修改Jenkins主目录

image_1ch56lkd0g1q13ac142i1n49o4h33.png-132.1kB

Jenkins打包好后的目录,这个war包就是我们需要拷贝的tomcat下面的
image_1ch56vm9tthi1ehs1l5ptp8ndl3g.png-382.6kB




四、Jenkins 自动化部署项目案例

因为目前环境原因,我这里只是截图Jenkins发布的流程(本次演示只是针对测试环境日常发布版本)

(1) Java 环境演示 [Jenkins和Tomcat在一台服务器上]

1.Jenkins 配置
a.jpg-612.2kB

SVN部分配置
image_1ch5af0th1gfqljk28bte9mq5i.png-204.9kB

maven及脚本设置
image_1ch5ahb88fgspno7t66d81vn45v.png-142.8kB

2.不发脚本配置如下:
相关参考:Jenkins可用环境变量列表
脚本的存放路径可以在系统管理->全局配置->Jenkins路径

Last login: Thu Jun 28 18:01:59 2018 from 172.16.29.39
[root@tomcat ~]# cat /jenkins/deploy.sh
#!/bin/bash

#
# Jenkins工程构建通用TOMCAT部署脚本
# @author abcdocker
# @create_time 2017-08-19
#
# 在Jenkins内配置部署单元参数
#      参数格式:MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATH  MAVEN模块名称:需要部署的目标TOMCAT绝对路径
#      只有单个部署单元且没有Maven子模块时,模块名称参数可以没有,参数格式为:TOMCAT_ABSOLUTE_PATH
#
# 注意:
#      在本部署脚本内会执行TOMCAT启动脚本,为避免Jenkins在构建成功以后杀掉所有衍生的后台进程,需要在Jenkins内配置全局环境变量 BUILD_ID 值为 allow_to_run_as_daemon
#
#

DEPLOY_TARGET_TOMCAT=$TOMCAT

#校验部署参数,不能为空
if [ -z "$DEPLOY_TARGET_TOMCAT" ]
then
    echo
    echo 部署参数为空,部署失败!
    echo "#####################################################################"
    echo
    echo 单个部署单元参数格式:
    echo          MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATH MAVEN模块名称:需要部署的目标TOMCAT绝对路径
    echo
    echo 多个部署单元参数格式:(多个部署单元使用空格分割)
    echo          MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATH MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATH
    echo
    echo "#####################################################################"
    exit 1
fi

echo
echo 部署参数:${DEPLOY_TARGET_TOMCAT}

TOMCAT_ARR=${DEPLOY_TARGET_TOMCAT//;/ }
ARR=($TOMCAT_ARR)
ARR_LEN=${#ARR[*]}
echo 共 ${ARR_LEN} 个部署单元

i=1
#获取Jenkins传入的目标TOMCAT组
for T in $TOMCAT_ARR
do
    echo
    echo 开始 处理第 ${i} 个部署单元
    echo 第一个部署单元:$T

    #获取目标TOMCAT的WAR路径和TOMCATA的绝对路径
    TOMCAT_PARAM=(${T//:/ })
    MODULE_NAME=${TOMCAT_PARAM[0]}
    TARGET_TOMCAT_PATH=${TOMCAT_PARAM[1]}
    WAR_PATH="$WORKSPACE/$MODULE_NAME/target/*.war"

    echo 部署单元模块名称:"${MODULE_NAME}"
    echo 部署WAR包路径:"${WAR_PATH}"
    echo 部署TOMCAT路径:"${TARGET_TOMCAT_PATH}"

    #需要考虑MAVEN单模块下的部署问题
    #if [ "${#ARR[*]}" -eq 1 -a -z "$TARGET_TOMCAT_PATH" ]
    if [ "$ARR_LEN" -eq 1 -a -z "$TARGET_TOMCAT_PATH" ]
    then
        #MAVEN过程没有子模块,单个部署单元
        TARGET_TOMCAT_PATH=$MODULE_NAME
    MODULE_NAME="NULL"
    fi

    #校验参数,WORKSPACE变量来自于Jenkins环境变量
    if [ -z "$MODULE_NAME" -o ! -f $WAR_PATH ]
    then
        echo 错误:MAVEN部署模块名称 参数为空 或 找不到WAR包!
        echo 部署失败!
        exit 1
    fi

    if [ -z "$TARGET_TOMCAT_PATH" -o ! -d "$TARGET_TOMCAT_PATH" ]
    then
        echo 错误:目标TOMCAT绝对路径 参数为空 或 该TOMCAT目录不存在!
        echo 部署失败!
        exit 1
    fi

    echo 开始清理目标TOMCAT启动进程...
    TOMCAT_PID=`ps -ef |grep "$TARGET_TOMCAT_PATH" |grep  "start" |awk '{print $2}'`
    if [ -n "$TOMCAT_PID" ]
    then
        echo TOMCAT_${i},PID${TOMCAT_PID},正在结束该进程...
        kill -9 $TOMCAT_PID && echo PID${TOMCAT_PID} 已被干掉!
    else
        echo TOMCAT_${i} 进程未启动!
    fi

    echo 开始清理目标TOMCAT缓存...
    rm -rf $TARGET_TOMCAT_PATH/webapps/*
    rm -rf $TARGET_TOMCAT_PATH/logs/*
    rm -rf $TARGET_TOMCAT_PATH/work/*

    echo 开始部署WAR包...
    cp -a $WAR_PATH $TARGET_TOMCAT_PATH/webapps/ROOT.war && echo WAR包部署完毕。

    echo 开始启动目标TOMCAT服务...
    sleep 10
    /bin/bash $TARGET_TOMCAT_PATH/bin/startup.sh

    echo 开始配置web目录的FTP权限...
    #启动过程会自动解压WAR包,所以在这里需要等待WAR包解压完成再调整目录权限
    sleep 30
    chown -R vftpuser.vftpuser ${TARGET_TOMCAT_PATH}/webapps/ && echo 目录权限配置完毕。

    echo 部署成功
    echo 完成 第 ${i} 个部署单元处理。
    echo

    ((i++))
done

3.构建效果如下图所示:
new_jenkins.gif-1968.9kB




(2) Java 环境演示 [Jenkins和Tomcat不在一台服务器上]

上面的脚本是针对Jenkins和Tomcat都在相同的目录,有的时候我们测试环境会存在不在一台服务器的情况,脚本如下

只是脚本简单的修改
[root@tomcat ~]# cat /jenkins/ysc.sh
#!/bin/bash

#
# Jenkins工程构建通用TOMCAT部署脚本
# @author 刘曙
# @create_time 2017-08-19
#
# 在Jenkins内配置部署单元参数
#      参数格式:MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATH  MAVEN模块名称:需要部署的目标TOMCAT绝对路径
#      只有单个部署单元且没有Maven子模块时,模块名称参数可以没有,参数格式为:TOMCAT_ABSOLUTE_PATH
#
# 注意:
#      在本部署脚本内会执行TOMCAT启动脚本,为避免Jenkins在构建成功以后杀掉所有衍生的后台进程,需要在Jenkins内配置全局环境变量 BUILD_ID 值为 allow_to_run_as_daemon
#
#

DEPLOY_TARGET_TOMCAT=$YSC
HOST=root@172.16.1.35
#校验部署参数,不能为空
if [ -z "$DEPLOY_TARGET_TOMCAT" ]
then
    echo
    echo 部署参数为空,部署失败!
    echo "#####################################################################"
    exit 1
fi

echo
echo 部署参数:${DEPLOY_TARGET_TOMCAT}

TOMCAT_ARR=${DEPLOY_TARGET_TOMCAT//;/ }
ARR=($TOMCAT_ARR)
ARR_LEN=${#ARR[*]}
echo 共 ${ARR_LEN} 个部署单元

i=1
#获取Jenkins传入的目标TOMCAT组
for T in $TOMCAT_ARR
do
    echo
    echo 开始 处理第 ${i} 个部署单元
    echo 第一个部署单元:$T

    #获取目标TOMCAT的WAR路径和TOMCATA的绝对路径
    TOMCAT_PARAM=(${T//:/ })
    MODULE_NAME=${TOMCAT_PARAM[0]}
    TARGET_TOMCAT_PATH=${TOMCAT_PARAM[1]}
    #WAR_PATH="/jenkins/workspace/ysc-all/${MODULE_NAME}/target/*.war"
    WAR_PATH="${WORKSPACE}/${MODULE_NAME}/target/*.war"

    echo 部署单元模块名称:"${MODULE_NAME}"
    echo 部署WAR包路径:"${WAR_PATH}"
    echo 部署TOMCAT路径:"${TARGET_TOMCAT_PATH}"


    #判断IP是否有相关目录
    ssh 172.16.1.35 "[ -d $TARGET_TOMCAT_PATH ]" >/dev/null 2>&1
    if [ $? != 0 ];then
       echo 错误
    else
       echo  正确
    fi


    #校验参数,WORKSPACE变量来自于Jenkins环境变量
    if [ -z "$MODULE_NAME" -o ! -f $WAR_PATH ]
    then
        echo 错误:MAVEN部署模块名称 参数为空 或 找不到WAR包!
        echo 部署失败!
        exit 1
    fi

    #scp 软件包
   ssh $HOST /etc/init.d/${MODULE_NAME} stop
   ssh 172.16.1.35 "[ -d $TARGET_TOMCAT_PATH/webapps/ROOT/ ]" >/dev/null 2>&1
   if [ $? = 0 ];then
      ssh 172.16.1.35 rm -rf $TARGET_TOMCAT_PATH/webapps/ROOT
        if [ $? = 0 ];then
           scp  $WAR_PATH root@172.16.1.35:$TARGET_TOMCAT_PATH/webapps/ROOT.war && echo WAR包部署完毕。
           echo $TARGET_TOMCAT_PATH is OK
        else
           echo 删除$TARGET_TOMCAT_PATH is error
        fi
   else
           echo "not found $TARGET_TOMCAT_PATH/webapps/ROOT"
           scp  $WAR_PATH root@172.16.1.35:$TARGET_TOMCAT_PATH/webapps/ROOT.war && echo WAR包部署完毕。
           ssh $HOST /etc/init.d/${MODULE_NAME} restart
   fi

####################启动文件

done
  #scp /home/config.properties/ysc/${MODULE_NAME}.js root@172.16.1.35:$TARGET_TOMCAT_PATH/webapps/ROOT/web/js/basePath.js
  ssh $HOST /etc/init.d/${MODULE_NAME} restart

Jenkins配置如下修改
b.jpg-221.2kB

image_1ch5dcoad126r201g961a6ised9q.png-148.7kB

修改完成后我们构建演示
new_jenkins2.gif-879.3kB

提示:这种环境下配置文件都是通过maven build进行控制,也就是通过研发控制配置文件

+
+
+
+




(3) Java 环境演示 [上线脚本]

线上环境演示
我们的上线流程如下:
image_1ch5foh2q1th6ulu1tar1dqb1jh7bt.png-45.1kB

Jenkins配置如下:
image_1ch5fsvoi1q5l1d9g108j1mg218mcca.png-123.7kB
image_1ch5fut497s13dofdr1b0v1hlqcn.png-168.4kB
image_1ch5g3h5ssmc15sr1r4s1gpa1nshd4.png-160kB

+
+
+
+
+
1.首先测试环境脚本:

[root@tomcat ~]# cat /server/scripts/.upgrade-smscenter.sh
#!/bin/bash
WAR="/jenkins/workspace/portal-smscenter/bxg-sms-center-web/target/*.war"
Path="/data/hub/bxg-smscenter/`date +%Y%m%d`/"

scp_war(){

if [ ! -d $Path ];then
    ssh root@file-server mkdir -p $Path
    scp $WAR root@file-server:$Path
else
    scp $WAR root@file-server:$Path
fi
}
ssh_file(){
  ssh root@file-server "/bin/bash /server/script/bxg/bxg-smscenter.sh"
}
scp_war
ssh_file

2.跳板机脚本修改

[root@File-server1 ~]# cat /server/script/bxg/bxg-smscenter.sh
#!/bin/bash
HOST=online-server2
WAR="/data/hub/bxg-smscenter/`date +%Y%m%d`"
DIR="/application/smscenter/webapps/ROOT/"
function scp_file {
    if `ssh root@$HOST "[ ! -d $WAR ]"`;then
            ssh root@$HOST "mkdir -p $WAR"
    fi
            scp $WAR/*.war root@$HOST:$WAR/
            echo "scp $WAR/*.war root@$HOST:$WAR/"
}
ssh_deploy(){
    ssh root@$HOST "/bin/bash /server/scripts/deploy_smscenter.sh"
}
scp_file
ssh_deploy

3.web 服务器脚本

[root@online-server2 ~]# cat /server/scripts/deploy_smscenter.sh
#!/bin/bash
WAR="/data/hub/bxg-smscenter/`date +%Y%m%d`"
OBJECT="/application/smscenter/webapps/ROOT/"
Backup="/data/tomcat/bxg-smscenter-`date +%Y%m%d`"
SCR_D="/application/smscenter/webapps/ROOT"
#config="/data/bak"


backup_tar(){
    tar zcvf $Backup.tar.gz $SCR_D/
    echo "为了防止意外cp整个项目目录存放"
    cp -a $SCR_D/ $Backup
    rm -rf $OBJECT/*
}




cp_war(){
    unzip $WAR/*.war -d $SCR_D/
}

cp_config(){
    cat $Backup/WEB-INF/classes/application-prod.properties >$SCR_D/WEB-INF/classes/application-prod.properties
    /etc/init.d/smscenter restart
}
backup_tar
cp_war
cp_config
[root@online-server2 ~]#

相关文章 企业必会技能 tomcat

+
+
+
+




(4) NodeJs 环境演示 [上线脚本]

node 环境上线流程
Jenkins配置如下 [node项目不适用maven,所以可以不用创建maven项目,直接在Jenkins创建普通项目就可以]
image_1ch5h3tugmu110pr1p85c5e1fe5dh.png-122.6kB
image_1ch5hdkn1mlv17vj12ue1m7i1k6veu.png-261.6kB

1.测试环境脚本

[root@tomcat ~]# cat /server/scripts/mobile/mobile.sh
#!/bin/bash
source /etc/profile

HOST=file-server
BASE_DIR=/server/scripts/mobile/m
url=$1
server=$2
DATE=`date +%Y%m%d`


tar(){
rm -rf $BASE_DIR

    [ -d $BASE_DIR ] || mkdir $BASE_DIR
    cd $BASE_DIR
    echo "##########################################################"
    echo "代码拉取中!!!"
    svn co -q $url/ .
    echo "##########################################################"

}

cp(){

    cd ${BASE_DIR}
    /bin/tar -zcvf m_${DATE}.tar.gz ./*
    echo "##########################################################"
    echo "文件已经打包完成! 正在拷贝中!!!"
    echo "##########################################################"
    sleep 5
    scp  m_${DATE}.tar.gz root@$HOST:/data/hub/bxg-mobile/
    echo "##########################################################"
    echo "文件已经拷贝完成! 正在上传服务器中!!!"
    echo "##########################################################"
        ssh root@file-server "/bin/bash /server/script/bxg/bxg-mobile.sh $server"

}

tar
cp
[root@tomcat ~]#

2.跳板机脚本

[root@File-server1 ~]# cat /server/script/bxg/bxg-mobile.sh
#!/bin/bash
HOST=$1
Mobile_tar="/data/hub/bxg-mobile"
DIR="/application/node"
DATE=`date +%Y%m%d`




scp_file(){
    if `ssh root@$HOST "[ ! -d $Mobile_tar ]"`;then
            ssh root@$HOST "mkdir -p $Mobile_tar"
    fi
            scp $Mobile_tar/m_${DATE}.tar.gz root@$HOST:$DIR/
        sleep 3
        echo "   "
        echo "##########################################################"
        echo "File-server 正在拷贝 ${HOST}!!!"
        sleep 3
        echo "##########################################################"
}


ssh_deploy(){
           echo "Hi"
    ssh root@$HOST "/bin/bash /server/scripts/bxg/bxg-mobile.sh"
}

scp_file
ssh_deploy

3.web 发布脚本

[root@iZbp11tefvghtcfn5mudgdZ ~]# cat /server/scripts/bxg/bxg-mobile.sh
#!/bin/bash
source /etc/profile
DIR="/application/node"
DATE=`date +%Y%m%d`

Backup="/application/node/m/"
BAK="/data/hub/bxg-mobile"



backup_tar(){
    echo "为了防止意外cp整个项目目录存放"
    cp -ar $Backup ${BAK}/mobile_$DATE
    echo "online-server 原目录拷贝备份完成!"
}



cp_war(){
    /etc/init.d/mobile stop
    #mv $Backup /tmp/m_${DATE} && rm -rf /tmp/m_${DATE}
    rm -rf $Backup
    mkdir $Backup && cd /application/node/
    tar xf m_${DATE}.tar.gz -C $Backup


}
npm_config(){
    cd $Backup
    cnpm install
    npm run build-prod
    npm run start-prod &>/var/log/mobile_${DATE}.log &

}

C(){
    echo "++++++++++++++++++++++++++++++++++++++++++++++++++++"
    curl  -I 127.0.0.1:3000
    echo "###################################################"
    echo "若是200 服务启动正常! 可以启动另一台!"
    echo "###################################################"
}







backup_tar
cp_war
npm_config
C

+
+
+
+
Jenkins 构建结果如下:
node.gif-12308.2kB

相关文章 Node.js 环境搭建

总结:Jenkins自动化不是运维一个人就可以完成的,需要研发的参与,本文只是给大家展示一下我公司的自动化,我眼里所谓的自动化. 希望大家不喜勿喷,对文章有意见或建议请在评论留言哦~

QQ图片20180629203904.gif-3502.9kB

在Unity3d使用yolov8的onnx模型 输出OUTPUTS是float32[1,35,8400],表示它会输出一个大小为[1, 35, 8400]的浮点数张量。这个输出张量的维度表示了检测到的目标的数量、每个目标的预测参数以及网格单元的数量。输出张量的第一个维度1表示检测到的目标数量。每个目标由35个值组成,表示目标的类别、置信度、边界框的坐标及10个特定点的位置。要取得8400个数据中置信度最高的数据,然后获取该数据其他channel的数据。运行结果:(蓝色是检测手的边框,红点是自定义的点),其中的四个数字分别表示不同的维度。 阅读详情

相关推荐

PID不够用?试试用ADRC改造你的ArduCopter:从Simulink仿真到SITL测试全记录

本文详细介绍了如何将ADRC(自抗扰控制)算法集成到ArduPilot飞控中,以替代传统PID控制器。通过Simulink建模、参数整定和SITL仿真测试,展示了ADRC在抗扰动能力、响应速度和参数调节复杂度上的优势,特别适合无人机在强风扰动下的稳定控制。

weixin_32349093的博客 273

Jenkins+tomcat+maven+git搭建自动化部署环境

Jenkins+tomcat+maven+git 远程自动化部署 【真实环境需要4台机器,3台服务器,一台模拟开发开发代码的主机】 Jenkins服务器IP:10.132.20.10 Git服务器IP:10.132.20.104 远程tomcat服务器IP:10.132.20.15 【我这里是桥接的自己的真机,所以都在一个网段】 开始吧! 一、准备工作 需要的包有哪些,先看看 ...

我不想秃头的博客 2019

从零到一:基于PX4+Gazebo+ROS2的无人机轨迹跟踪仿真环境全栈搭建

本文详细介绍了在Ubuntu 22.04系统上,从零开始搭建基于PX4、Gazebo Garden和ROS2 Humble的无人机轨迹跟踪仿真环境的完整流程。内容涵盖PX4 SITL编译、Gazebo安装、ROS2配置、Micro XRCE-DDS Agent通信桥接以及QGroundControl地面站部署,并提供了创建自定义ROS2节点实现圆形轨迹跟踪的实战代码与关键调试技巧,帮助开发者快速构建全栈仿真开发环境。

swift5iosmith的博客 911

很细的项目部署上线流程(一)服务器搭建环境从0开始,Linux安装JDK安装nginx部署ssl证书安装git安装node安装pm2安装maven

本文整个流程是在博主完成一次项目上线全过程后复盘的记录,有没有写到的细节不清楚的可以私聊提问。准备选购服务器又有疑问的可以参考一、服务器选购,跳过可以直接点击目录 从环境搭建到前后端项目部署,证书部署,Springboot 打包 Java + next 脚手架运行 recat 项目上线部署一、服务器选购阿里云服务器选购教程二、服务器配置及证书部署1.JDK安装2.nginx安装配置3.证书部署4.Git安装、关联仓库5.node安装6.cnpm及pm2安装7.Maven安装 一、服务器选购 https://

阿韩的经验分享博客 5754

MacOS蓝牙连接疑难杂症:从基础排查到高级修复全攻略

本文提供了一份全面的MacOS蓝牙故障排查与修复指南。从基础的菜单栏检查、终端命令诊断,到软/硬重启蓝牙服务、删除配置文件,再到使用blueutil工具、重置NVRAM等高级方法,系统性地解决了蓝牙无法连接、连接不稳定等常见问题。最后还分享了环境干扰排查、预防措施及硬件故障自检方法,帮助用户彻底解决Mac蓝牙连接难题。

weixin_29271263的博客 449

RML2018.01a数据集的读取与使用

基于深度学习的自动调制识别

QAQIknow的博客 1万+

网站部署详细流程(包括域名,服务器的配置等)

有很多做网页的前端后端小白都想把自己辛辛苦苦做出来的网站放到网上,让别人观摩观摩。可无奈技术有限,对于网站部署流程有些迷茫。在这里,我会告诉大家,如何将自己做出来的网站放到网上。 首先,我们需要知道,应该准备什么东西:网站源代码(这个就不细说了),服务器,域名。 一丶服务器 服务器是提供计算服务器、网络服务的一种设备。当我们访问一个网站时,点击这个网站会发出访问请求,服务器会响应服务请求,并相对应...

Jekin_KE的博客 6万+

极验点选click3.1.0所对应fullpage.js的逆向分析

极验3代点选验证,本文适用于使用click.3.1.0.js和fullpage919-eyz9lh.js版本的web验证码,没有细节内容,适合有基础的开发者阅读。

shanf7921的博客 647

高效使用Jenkins:同时上线多个项目的实践

前言 如果是初学者或公司上线的项目少节奏慢时,大多数的工作人员都是部署和使用一个jenkins,满足要求即可。但是当你所在的公司有很多的上线服务(例如springboot等微服务架构的服务)或者很多的分站,短时间内要求进行大量上线,如果你要是还简单的使用一个jenkins,就会出现忙不过来的问题.同一台jenkins上进行的服务过多,还会导致服务器负载过高,拖慢上线速度或超时导致上线失败。于是,我们要想办法加大jenkins的并发工作。 下面介绍一些很实用的操作,Jenkins怎么加快工作/发布效率?

漠效的博客 5023

效果炸裂_安装midscene_copw基于midscene操作电脑_基于视觉的软件测试执行_MIDSCENE的安装和使用---AI大模型应用探索0012

摘要:本文介绍了如何通过安装MidSceneJS来增强Copaw的屏幕操作能力。首先需要安装Node.js和npm,并配置淘宝镜像源加速安装。然后全局安装MidScene CLI工具(npm install @midscene/cli -g)。接着配置视觉大模型服务,通过设置环境变量指定模型API密钥、名称、基础URL和家族类型(如qwen3.5-27b),配置文件需存放在C:\Users\Administrator.copaw目录。安装成功后,MidScene已能成功识别并操作屏幕,使用效果良好。文中还提

添柴程序猿的专栏 638

基于YOLOv8深度学习架构的智能农业巡检小车系统—面向农作物与杂草实时精准识别的创新实践

本研究设计并实现了一套基于YOLOv8的智能农业巡检小车系统,解决农田中农作物与杂草的精准识别与追踪问题。系统采用改进YOLOv8-RGCSPELAN-ECA-AFPN模型,融合ECA注意力机制与AFPN多尺度特征融合结构,提升复杂环境下的检测精度。硬件以树莓派4B为核心,集成摄像头、传感器与电机模块,具备避障、循迹与自主导航功能。移动端基于Android部署NCNN推理引擎,实现模型高效移植与实时检测。

Stara-AI的博客 1423

jenkins部署流程图_Jenkins 自动化部署上线

jenkins自动化部署项目,通过jenkins 部署来节省运维时间,不需要手动cp上线及版本发布Jenkins 自动化部署上线Jenkins一、Jenkins是什么Jenkins是一款自包含的开源自动化服务,可用于自动执行与构建,测试和交付或部署软件有关的各种任务。Jenkins目前可以通过本地系统软件包Docker进行安装,甚至可以通过任何安装了Java运行环境的计算机独立运行二、上线流程图既...

weixin_39774905的博客 934

14、多层螺旋 CT 技术详解

本文详细解析了多层螺旋CT(MSCT)技术的原理与应用,涵盖其相对于单层螺旋CT的优势,包括图像采集速度提升、分辨率提高和噪声降低。文章深入探讨了扫描仪的几何结构、离散投影模型以及关键参数如切片宽度和螺距的影响,并重点介绍了z-滤波重建算法及其离散实现流程。通过流程图和公式推导,系统梳理了从投影获取到图像重建的全过程。同时分析了MSCT在临床中的实际应用案例及未来发展趋势,如更高分辨率、更低辐射剂量和智能化算法等方向,全面展示了MSCT在现代医学影像中的核心价值。

f0g1h2的博客 193

python自动化部署脚本_python脚本实现Jenkins自动上线部署

需求说明Git+Jenkins方式的版本上线部署是当前较为热门的版本上线方式,程序员通过Git客户端将下好的代码上传至Git版本服务器后,运维人员通过Jenkis服务器即可非常方便的完成对应用服务器的版本服务器的版本升级工作源代码#导入模块import wgetimport osimport requestsimport hashlibimport tarfile#定义判断是否有新版本的函数def...

weixin_39796363的博客 499

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

go-humanize 库实践指南:在 Go 项目中格式化时间、容量与数字

go-humanize 是 Go 生态中一个轻量但极其实用的工具库,核心目标是把"枯燥的数字"转换成人类易读的字符串:例如把 `82854982` 字节显示为 `83 MB`、把时间戳显示为 `7 hours ago`、给大数字补上千分位逗号。本文基于 Harvester 仓库中 vendor 的 [vendor/github.com/dustin/go-humanize](https://lin

gitblog_00964的博客 806

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Jenkins+Docker+Gitee自动化项目部署上线

主要介绍了docker、jenkins的主要用途,然后结合springboot和vue的前后端项目进行自动化部署案例,通过docker安装jenkins 验证gitee的地址代码地址进行容器化结合shell脚本的方式对项目进行打包部署构建更新

m0_64371025的博客 2872

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Jenkins 自动化部署:从代码提交到上线一条龙

本文系统介绍Jenkins自动化部署从代码提交到上线的完整流程。文章从CI/CD核心理念入手,解析Jenkins Master-Agent分布式架构与Pipeline as Code的设计思想,详细阐述代码检出、构建编译、自动测试、制品归档、部署验证等流水线各阶段。同时探讨凭据管理、性能优化、高可用架构与质量门禁等生产环境最佳实践,为读者提供构建标准化、自动化、可重复的CI/CD流水线的完整指南,助力团队提升软件交付效率与质量。

macowl的博客 477

掌握Jenkins自动化部署:从代码提交到自动上线的全流程揭秘

是现代软件开发中不可或缺的一部分,它不仅简化了代码的发布过程,还为整个团队带来了无与伦比的效率和协作力。想象一下,开发者们可以专注于编写高质量的代码,而不是为繁琐的手动部署所烦恼;测试人员能在每次提交代码后立即看到测试结果,确保软件质量;运营团队不再需要熬夜加班来手动发布新版本,而是可以安心地看到系统自动完成一切。Jenkins自动化部署的意义在于它赋予了开发团队一种近乎魔法般的力量,将复杂、易出错的手动操作变为简单、高效的流水线流程。通过。

nihao2q的博客 540

Jenkins 自动化部署上线 ​

Jenkins 自动化部署上线Jenkins 自动化部署上线由于51cto格式问题,可以直接访问https://www.abcdocker.com/abcdocker/3174 查看原文[TOC]##一、Jenkins是什么Jenkins是一款自包含的开源自动化服务,可用于自动执行与构建,测试和交付或部署软件有关的各种任务。 Jenkins目前可以通过本地系统软件包Docke...

weixin_38920945的博客 127

docker部署Jenkins自动化打包部署vue、java项目上线

前后端部署完毕,小编踩了很多坑,有不懂的可以后台私信,我会的我就告诉你,至于为什么没有数据库,数据库一般都是提前部署好的,开发跟前端代码里就已经指定好数据库的IP等信息了,如果你是一个人,那你可以这样部署MySQL。location /api/ {###这里的/api/指的是前端只要有xxxx.api的时候匹配到/api/就转发到后端。/你创建Jenkins时候映射的目录/jenkins_home/workspace/你刚才起的项目名称/build/libs/gitlab是代码仓库。

m0_73210955的博客 2417

Docker + Jenkins 自动化部署实战:一行命令,告别凌晨上线

"content": "🎉 **部署成功**\\n\\n> 项目:my-springboot-app\\n> 版本:${IMAGE_TAG}\\n> 时间:${env.BUILD_TIME}\\n> 提交:${env.GIT_SHORT_SHA}"│ │ Docker容器 │ │ Docker容器 │ │ Docker容器 │ │。│ │ 拉代码 │ │ Maven编译 │ │Docker构建 │ │ SSH远程部署 │ │。

332
上一篇: nginx proxy_pass后的url加不加/的区别
下一篇: Jenkins+Maven+SVN+Nexus 搭建持续集成环境
abcdocker
博客等级 码龄10年 173粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值