#bash #jenkins-pipeline #dash-shell #jenkins-groovy #groovyshell
#bash #конвейер дженкинса #dash-оболочка #дженкинс-заводной #groovyshell
Вопрос:
Я сталкиваюсь с некоторыми трудностями при написании кода моего bash-скрипта внутри Jenkinsfile. Регистр пользователя: я сохраняю код нескольких инструментов в структуре папок в одном репозитории GIT. Я хочу, чтобы всякий раз, когда какой-либо разработчик вносит изменения в отдельную папку, запускалась сборка для кода, связанного с конкретной папкой.
Моя логика: выберите два последних коммита, найдите разницу. Исходя из различий, выполните сборку в соответствии с измененными файлами. Я написал bash-скрипт, и он отлично работает на компьютере с Linux. После перемещения его внутри Jenkinsfile я сталкиваюсь с некоторой ошибкой. Это может быть специфично для groovy. Нужна помощь в этих
#!/bin/bash
git log -2 --no-merges | grep commit > git_commit.txt
cat git_commit.txt
echo 'hi'
i=0;
while read -r line;
do
commit[$i]=`echo "$line" | awk '{print $2}'`
i=$((i 1))
done < git_commit.txt
Это не полный код. Я получаю ошибку при присвоении значения:
commit[$i]=`echo "$line" | awk '{print $2}'`
Дайте мне знать, если вы знаете дополнительные пояснения, которые помогут.
Комментарии:
1. Привет @jvipul разве вы не должны просто сохранить это как файл .sh и выполнить это из jenkins? Как выглядит ваш конвейерный код jenkins?
2. @Jvipul: «получение ошибки» — не очень полезное описание проблемы. Дженкинс говорит «Я тебя больше не люблю», или как выглядит ошибка? Кроме того, вы уверены, что Jenkins действительно запускает ваш код в bash?
Ответ №1:
Я только что поймал это. Это была глупая ошибка при назначении var в bash. Я добавляю eval при назначении выходных данных команды awk. Итак, мое изменение кода:
eval commit[$i]=`echo "$line" | awk '{print $2}'`
Не уверен, как eval помогает мне здесь, но теперь это решено.