创建项目
丢弃旧的构建
参数化构建过程
添加代码库
构建
部署脚本
[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
作者:闫世成
出处:http://cnblogs.com/yanshicheng
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题或建议,请联系上述邮箱,非常感谢。