DevOps Azure создает переменные для действий в встроенных скриптах bash - PullRequest
0 голосов
/ 17 октября 2018

При создании встроенной команды bash, подобной этой, в DevOps Azure:

checksum="$(cksum file.txt)"

В конечном итоге cksum file.txt станет обязательным параметром.По какой-то причине это поведение не согласовано, поэтому иногда я настраиваю конвейеры сборки, которые хорошо работают со встроенными сценариями Bash, но неизбежно я столкнусь с этой проблемой и не смогу ее исправить.

Iдаже попытался установить параметр cksum file.txt на cksum file.txt, но заменил пробел закодированной строкой: %20.Это становится cksum%20file.txt, что не является допустимой командой в bash.

Вот полный сценарий:

yarnCacheFilename="$(cksum yarn.lock).yarnCache.docker.tgz"

wget "https://example.azureedge.net/yarn-cache/$yarnCacheFilename"

if [ -f "$yarnCacheFilename" ]; then
    mkdir node_modules
    tar -xzvf "$yarnCacheFilename"
else
    yarn install --production
fi

Достаточно просто.Это код, который я могу запустить в любом терминале bash.К сожалению, Azure DevOps добавляет параметр в группу задач:

imagebash command">

Тот факт, что этот параметр существует, означает, что Azure DevOps препятствует выполнению моего файла bashправильно и строковая замена самой важной части.

Как мне обойти эту проблему?

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Вы можете использовать подстановку команд, поэтому замените $ () на обратную галочку `с обеих сторон.

https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html для получения дополнительной информации о подстановке команд.

checksum="`cksum file.txt`"

Пример полного сценария

yarnCacheFilename="`cksum yarn.lock`.yarnCache.docker.tgz"

wget "https://example.azureedge.net/yarn-cache/$yarnCacheFilename"

if [ -f "$yarnCacheFilename" ]; then
    mkdir node_modules
    tar -xzvf "$yarnCacheFilename"
else
    yarn install --production
fi
0 голосов
/ 18 октября 2018

Если вы хотите передать строку "cksum file.txt" в качестве параметра в встроенном скрипте bash, вы можете установить переменную и использовать ее в последующих задачах / скриптах.

Например:

  1. Установить переменную checksum:

    echo "##vso[task.setvariable variable=checksum]cksum file.txt"
    
  2. Считать переменные

    echo "No problem reading $CHECKSUM"
    

Подробнее см. Определение и изменение переменных в скрипте .

Если вы запустите скрипт, указанный с путем, например, $/project/script/Test0427/bash.sh, вы можете напрямую передать строку какпараметр:

  1. Аргументы:

    "cksum file.txt" "Test Arguments 1018"

  2. Чтение переменных

    echo "No problem reading $1 and $2"
    

enter image description here

...