推送到特定目录时触发特定作业

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

这里:

  • apiobjects 是我要触发此作业的 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