jenkins 自由风格项目

创建项目

丢弃旧的构建

参数化构建过程

添加代码库

构建

 

 

 部署脚本

[root@node2 jenkins]# cat deploy_web.sh 
#!/bin/sh 

# 工作目录
CODE_DIR=$WORKSPACE
# 压缩目录
TAR_DIR="/data/jenkins/${JOB_NAME}/"
# 文件夹及文件名
FILE_DIR="${TAG_VERSION}_${JOB_BASE_NAME}"
# 压缩文件全称
PACKAGE="${FILE_DIR}.tar.gz"

# 远程部署的服务器列表
REMOTE_IP='172.16.0.64'
# 远程部署服务器账号
REMOTE_USER=root
# 远程端口
REMOTE_PORT=22
# 远程部署目录
REMOTE_DIR='/usr/share/nginx/'


if [ ! -d ${TAR_DIR} ];then
    mkdir ${TAR_DIR} -p
    echo "创建文件夹: ${TAR_DIR}"
fi

builder_package() { 
    echo "--------------------------[ compress PACKAGE ]---------------------------"
    cd ${CODE_DIR} && tar zcf ${TAR_DIR}${PACKAGE} ./*
    if [ $? -eq 0 ]; then
        echo "打包成功: ${TAR_DIR}${PACKAGE}"
    else
        echo "打包失败: ${TAR_DIR}${PACKAGE}"
        exit 1
   fi                            
}

scp_package() {
    echo "--------------------------[ remote rsync  ]---------------------------"
    for IP in ${REMOTE_IP};do
        rsync -arq --port=${REMOTE_PORT} ${TAR_DIR}${PACKAGE} ${REMOTE_USER}@${IP}:${REMOTE_DIR}
        if [ $? -eq 0 ]; then
            echo "远程拷贝成功: $IP - ${TAR_DIR}${PACKAGE}"
        else
            echo "远程拷贝失败: $IP - ${TAR_DIR}${PACKAGE}"
            exit 1
        fi
    done
}

remote_untar() {
    echo "--------------------------[ remote untar  ]---------------------------"
    for IP in ${REMOTE_IP};do
        ssh $IP "mkdir ${REMOTE_DIR}${FILE_DIR}"
        ssh $IP "cd $REMOTE_DIR && tar xf  ${PACKAGE} -C ${REMOTE_DIR}${FILE_DIR}"
        ssh $IP "cd $REMOTE_DIR && rm -rf ${PACKAGE}"
        if [ $? -eq 0 ]; then
            echo "解压成功: $IP - ${PACKAGE}"
        else
            echo "解压失败: $IP - ${PACKAGE}"
            exit 1
        fi
    done
}

remote_ln() {
    # 确保软件连目录原本就是软连接目录
    # ssh $REMOTE_IP "cd $REMOTE_DIR && ln -snf  ${REMOTE_DIR}/${TAR_NAME} html"
    echo "--------------------------[ remote ln  ]---------------------------"
    for IP in ${REMOTE_IP};do
        ssh $IP "cd $REMOTE_DIR && rm -rf html  && ln -s ${REMOTE_DIR}${FILE_DIR} html"
        if [ $? -eq 0 ]; then
            echo "软连接成功: $IP - ${FILE_DIR}"
        else
            echo "软连接失败: $IP - ${FILE_DIR}"
            exit 1
        fi
    done

}

 
main() {
    builder_package;
    scp_package;
    remote_untar;
    remote_ln;
}
case $pattern in
    deploy)
        if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
            echo "构建失败该 ${TAG_VERSION} 版本号已部署"
            exit 1
        else
            echo "----------    开始发布 版本:${TAG_VERSION} --------"
            main
            echo "----------    完成发布 版本:${TAG_VERSION} --------"
        fi
        ;;
    rollback)
        echo "----------    开始回滚 版本:${TAG_VERSION} --------"
        remote_ln;
        echo "----------    完成回滚 版本:${TAG_VERSION} --------"
        ;;
    *)
      echo "Usage: $0 {deploy | rollback }"
      exit 1
      ;;
esac

  

原文地址:https://www.cnblogs.com/yanshicheng/p/13412971.html