Как установить переменную сборки в DevOps Azure с помощью Bash?
Я использую ниже, чтобы извлечь версию из моего файла package.json и установить его в одну из моих переменных сборки, Version
,
# successfully retrieves and prints the version to console
ver=$(node -e "console.log(require('./package.json').version)")
echo "Version: $ver"
# does jack squat
# even trying to hard-code something in place of $ver doesn't set the variable
echo "##vso[task.setvariable variable=Version]$ver"
echo "Version: $(Version)"
Я пытался использовать ver
а также $(ver)
вместо $ver
, никто не работает, как консоль печатает пробел для $(Version)
во всех случаях (пусто для начала). Если я хард-код Version
, он печатает нормально, поэтому проблема не в печати или получении, а в настройках. Я основал свой сценарий на примере MS,
echo "##vso[task.setvariable variable=sauce]crushed tomatoes"
Наш сервер сборки находится в среде Windows.
3 ответа
Придя к этому через некоторое время после публикации, но подумал, что поделюсь этим на случай, если другие наткнутся на это.
Из документации видно, что переменная конвейера не расширяется до тех пор, пока задача не будет завершена. Microsoft улучшила свою документацию, чтобы лучше проиллюстрировать это
steps:
# Create a variable
- script: |
echo '##vso[task.setvariable variable=sauce]crushed tomatoes'
# Use the variable
# "$(sauce)" is replaced by the contents of the `sauce` variable by Azure Pipelines
# before handing the body of the script to the shell.
- script: |
echo my pipeline variable is $(sauce)
Я подозреваю, что именно поэтому, даже когда вы жестко кодируете значение, вы все равно ничего не видите.
После этой строки
echo "##vso[task.setvariable variable=Version]$ver"
значение сохраняется в переменной среды VERSION.
Вы можете получить к нему доступ на следующем этапе сценария, используя:
- bash: |
echo "my environment variable is $VERSION"
- pwsh: |
Write-Host "my environment variable is $env:VERSION"
- script: |
echo "my environment variable is %VERSION%"
Затем вы можете использовать PowerShell, чтобы превратить его в переменную конвейера:
- pwsh: |
Write-Host "Setting version to: $env:VERSION"
Write-Host "##vso[task.setvariable variable=version;isOutput=true]$env:VERSION"
displayName: 'Set version'
name: set_version
После этого вы можете использовать
$(set_version.version)
в других задачах или параметрах.
Если вам нужна секретная переменная, Microsoft также подготовила для этого руководство , по сути:
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
echo $(mySecretVal)