如何在运行VSTS构建定义时将功能作为环境变量传递给批处理脚本?

时间:2018-06-01 07:19:56

标签: batch-file azure-devops azure-pipelines

我在运行VSTS构建定义时运行一个批处理脚本。在该批处理脚本中,我有maven路径,它取自托管代理程序功能部分。我不希望在该批处理文件中对该路径进行硬编码。我想在运行构建定义时使用脚本中的环境变量来调用该路径。我从托管代理功能部分获取的路径。以下是批处理脚本。

在VSTS中使用批处理脚本任务我在VSTS构建定义中调用下面的abc.bat文件。

批处理脚本:

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 :(得分:0)

您可以从托管代理功能部分检索maven路径,然后使用Logging Commands创建变量。然后,您可以在批处理脚本中使用该变量,而不是调用maven路径。

  1. 创建PowerShell脚本以设置可变量(参考下文 示例,您也可以Use the OAuth token to access the REST API),然后将脚本签入VSTS。

  2. 在定义中添加PowerShell任务以运行PS脚本

  3. 3.在设置变量步骤

    后面的步骤中使用变量
    $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.
    

    <强>更新

    好吧,你可以在没有下面脚本的用户名的情况下使用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