部署单仓库多目录项目
文章目录
- 部署单仓库多目录项目
- 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" ]]; thengit clone --branch $BRANCH $GITLAB_REPO "$CLONE_DIR/$LATEST_COMMIT" || exit 1cd "$CLONE_DIR/$LATEST_COMMIT" || exit 1
elsecd "$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); doecho "Processing directory: $dir"case "$dir" in"demo-0001" | "demo-0002" | "demo-0003" | "demo-0004" | "demo-0005")echo "程序目录 $dir 是特定目录."if [[ ! " ${SPECIAL_DIRECTORIES[@]} " =~ " $dir " ]]; thenSPECIAL_DIRECTORIES+=("$dir")fi;;*)echo "程序目录 $dir 不是特定目录。";;esac
done
echo "分支为: $BRANCH, 最新的特定目录为: ${SPECIAL_DIRECTORIES[@]}" && sleep 1
for special_dir in "${SPECIAL_DIRECTORIES[@]}"; doecho "处理特定目录:$special_dir"
done
2.2 Demo推送代码及测试
下图所示,最后过滤到了特定目录,非特定目录不会显示的.

3.小结
此脚本可以配合,Jenkins工具进行部署程序项目.