Ошибка: использование Bash-скрипта внутри декларативного Jenkinsfile

#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 помогает мне здесь, но теперь это решено.