Инициировать конкретную работу при нажатии на конкретный каталог - PullRequest
0 голосов
/ 23 мая 2018

У нас есть 12 разных проектов в одном и том же репозитории, и для каждого из них есть разные задания.

Я хочу знать, как я могу запустить задание, только если в определенной папке произошли изменения, поскольку выполнение всех 12 на каждом толчке занимает слишком много времени для завершения.

1 Ответ

0 голосов
/ 23 мая 2018

Ну, у меня есть взломанное решение, которое работает для нас.

Сначала добавьте 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
...