推送到特定目录时触发特定作业
Trigger specific job on push to specific directory
我们在同一个存储库中有 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
。然后,在 all 中,我执行以下构建步骤:
#!/bin/bash
# Exit on any error
set -euo pipefail
. "$WORKSPACE/RUN_TEST"
# Rest of build step
我们在同一个存储库中有 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
。然后,在 all 中,我执行以下构建步骤:
#!/bin/bash
# Exit on any error
set -euo pipefail
. "$WORKSPACE/RUN_TEST"
# Rest of build step