Ну, у меня есть взломанное решение, которое работает для нас.
Сначала добавьте 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