zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    Kill Processes in Linux
    How to Setup Chroot SFTP in Linux (Allow Only SFTP, not SSH)
    156 Useful Run Commands
    6
    pandas groupby合并列字符串
    一个ROS配置的脚本
    Mybatis 学习记录
    Android搭建code server
    CF 1616D. Keep the Average High
    第七章:(1)Redis 的发布订阅
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/13412971.html
Copyright © 2011-2022 走看看