我们在同一个存储库中有 12 个不同的项目,并且为每个项目运行不同的工作。
我想知道如何仅在特定文件夹中发生更改时触发作业,因为每次推送都运行所有 12 个需要很长时间才能完成。
我们在同一个存储库中有 12 个不同的项目,并且为每个项目运行不同的工作。
我想知道如何仅在特定文件夹中发生更改时触发作业,因为每次推送都运行所有 12 个需要很长时间才能完成。
好吧,我已经破解了一个适合我们的解决方案。
首先,添加一个Execute Shell
构建步骤:
#!/bin/bash
export DIRS="api objects"
DIFF=`git diff --name-only develop`
echo "export RUN_TEST=0" > "$WORKSPACE/RUN_TEST"
for DIR in $DIRS; do
for LINE in $DIFF; do
# Is this file inside an interesting directory?
echo $LINE | grep -e "^$DIR/"
# Checking if it is inside
if [ $? -eq 0 ]; then
echo "export RUN_TEST=1" > "$WORKSPACE/RUN_TEST"
fi
done
done
这里:
api
并且objects
是我要触发此作业的 2 个目录develop
是我们使用的主要分支,所以我特别想知道我的目录与该分支相比如何$WORKSPACE/RUN_TEST
来设置变量然后在耗时的构建步骤中添加:
#!/bin/sh
. "$WORKSPACE/RUN_TEST"
if [ $RUN_TEST -eq 1 ]; then
# Time consuming code here
fi
这样,作业被触发,但运行速度与未触发一样快。
现在我将其修改为:
#!/bin/bash
export DIRS="api objects"
DIFF=`git diff --name-only origin/develop`
RUN_TEST=111
for DIR in $DIRS; do
for LINE in $DIFF; do
# Is this file inside an interesting directory?
echo $LINE | grep -e "^$DIR/"
# Checking if it is inside
if [ $? -eq 0 ]; then
RUN_TEST=0
fi
done
done
echo "RUN_TEST=$RUN_TEST"
echo "return $RUN_TEST" > "$WORKSPACE/RUN_TEST"
exit $RUN_TEST
并设置Exit code to set build unstable
为111
所有构建步骤。然后,在我执行的所有以下构建步骤中:
#!/bin/bash
# Exit on any error
set -euo pipefail
. "$WORKSPACE/RUN_TEST"
# Rest of build step