部署单仓库多目录项目
文章目录
部署单仓库多目录项目 1.部署单仓库多目录项目 2.Shell脚本进行部署单仓库多目录项目 2.1 编写Shell脚本 2.2 Demo推送代码及测试
3.小结
1.部署单仓库多目录项目
在开发过程中,研发团队往往会将一个大型项目拆分成几个子目录进行管理,使得研发- 人员可以更加方便快捷地进行代码组织和管理工作.然而,这种方式会给运维人员带来挑战,因为他们必须单独部署每一个子目录,而不能一键部署整个项目.这是因为Webhook之类的自动化工具无法识别多个目录的情况.
2.Shell脚本进行部署单仓库多目录项目
2.1 编写Shell脚本
#!/bin/bash
GITLAB_REPO = ""
BRANCH = ""
CLONE_DIR = ""
LATEST_COMMIT = $( git ls-remote --heads $GITLAB_REPO $BRANCH | awk '{print $1}' )
echo "最新提交的目录为:${LATEST_COMMIT} " && sleep 1
cd "$CLONE_DIR " && rm -rf * .git
if [ [ ! -d "$CLONE_DIR /$LATEST_COMMIT " ] ] ; then
git clone --branch $BRANCH $GITLAB_REPO "$CLONE_DIR /$LATEST_COMMIT " || exit 1
cd "$CLONE_DIR /$LATEST_COMMIT " || exit 1
else
cd "$CLONE_DIR /$LATEST_COMMIT " && git pull origin $BRANCH || exit 1
fi
LATEST_FILES = $( git diff-tree --no-commit-id --name-only -r $LATEST_COMMIT)
echo "最新提交的目录为:${LATEST_FILES} " && sleep 1
SPECIAL_DIRECTORIES = ( )
for dir in $( echo "$LATEST_FILES " | awk -F"/" '{print $1}' | sort -u ) ; do
echo "Processing directory: $dir "
case "$dir " in
"demo-0001" | "demo-0002" | "demo-0003" | "demo-0004" | "demo-0005" )
echo "程序目录 $dir 是特定目录."
if [ [ ! " ${SPECIAL_DIRECTORIES[ @] } " =~ " $dir " ] ] ; then
SPECIAL_DIRECTORIES += ( "$dir " )
fi
; ;
*)
echo "程序目录 $dir 不是特定目录。"
; ;
esac
done
echo "分支为: $BRANCH , 最新的特定目录为: ${SPECIAL_DIRECTORIES[ @] } " && sleep 1
for special_dir in "${SPECIAL_DIRECTORIES[ @] } " ; do
echo "处理特定目录:$special_dir "
done
2.2 Demo推送代码及测试
下图所示,最后过滤到了特定目录,非特定目录不会显示的.
3.小结
此脚本可以配合,Jenkins工具进行部署程序项目.