Как передать возможности как переменную среды в пакетный скрипт при выполнении определения сборки VSTS? - PullRequest
0 голосов
/ 01 июня 2018

Я запускаю один пакетный скрипт при выполнении определения сборки VSTS.В этом пакетном скрипте у меня есть Maven путь, который взят из раздела возможностей размещенного агента.Я не хочу, чтобы этот путь был жестко запрограммирован в этом пакетном файле.Вместо этого я хочу вызвать этот путь, используя переменную окружения в скрипте при запуске определения сборки.Путь, который я взял из раздела возможностей размещенного агента.Ниже приведен пакетный сценарий.

Использование задачи пакетного сценария в VSTS Я вызываю приведенный ниже файл abc.bat в определении сборки VSTS.

Пакетный сценарий:

abc.bat:

call C:\java\maven\apache-maven-3.2.2\bin\mvn.bat install:install-file -Dfile=DevOps/proj_Dep_libs/application-agent-1.0.3.jar -DgroupId=application-agent -DpomFile=DevOps/Pss_Dep_libs/application-agent-1.0.3.pom -DartifactId=application-agent -Dversion=1.0.3 -Dpackaging=jar

Пожалуйста, помогите мне, как передать путь в качестве переменной в пакетном скрипте при запуске определения сборки VSTS.

1 Ответ

0 голосов
/ 04 июня 2018

Вы можете получить путь maven из раздела возможностей размещенного агента, а затем создать переменную, используя Logging Commands .Затем вы можете использовать переменную в пакетном сценарии вместо вызова maven path.

  1. Создайте сценарий PowerShell для установки переменных (см. Пример ниже, вы также можете использовать маркер OAuth дляполучите доступ к REST API ), затем зарегистрируйте сценарий в VSTS.

  2. Добавьте задачу PowerShell в свое определение для запуска сценария PS

3. Пошагово используйте переменную, которая за заданной переменной step

$collectionurl = "https://xxx.visualstudio.com"
$user = "username"
$token = "password"

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

$baseUrl = "$collectionurl/_apis/distributedtask/pools/2/agents/1?includeCapabilities=true"          
$response = (Invoke-RestMethod -Uri $baseUrl -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})

#Retrieve values 
$maven = $response.systemCapabilities.maven

#Set variable
Write-Host "##vso[task.setvariable variable=maven]$maven"

#Then you can use the variable in the next step: $(maven) in TFS, $env:maven in PowerShell, %maven% in batch script.

UPDATE:

Ну, вы можете использовать PAT безимя пользователя со скриптом ниже ( Если вы не хотите жестко кодировать токен в скрипте, вы можете создать секретную переменную и установить токен в качестве значения переменной, а затем использовать переменную в скрипте ):

$PAT = "nvkoa6qrdrtrxweruiodfiamwd3ya2dkt7r6cx3xxxxw5pyxxxxq" 

# Base64-encodes the Personal Access Token (PAT) appropriately 
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "",$PAT))) 
$baseUrl = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)_apis/distributedtask/pools/2/agents/1?includeCapabilities=true"
$response = (Invoke-RestMethod -Uri $baseUrl -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}) 

#Retrieve values 
$maven = $response.systemCapabilities.maven 
Write-Host "##vso[task.setvariable variable=maven]$maven"

enter image description here

...