创建项目
丢弃旧的构建
参数化构建过程
添加代码库
构建
部署脚本
[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