代码之家  ›  专栏  ›  技术社区  ›  Ben_G

如何将信息从TFS 2017构建的一个步骤传递到以后的复制文件步骤

  •  0
  • Ben_G  · 技术社区  · 6 年前

    好的-我已经阅读了所有关于环境变量的内容,以及它们如何不能通过同一个过程进行设置和读取(即使在构建的后续步骤中也无法读取):

    Environment.SetEnvironmentVariable("Major_Build_Number", BaseReleaseNumber, EnvironmentVariableTarget.Machine)
    

    那么,有没有人想出一种简单的方法来将信息从一个构建步骤传递到另一个构建步骤?在我的第一步中,我确定构建编号(这是一个相当复杂的过程,信不信由你),我需要将该构建编号传递到最后一个构建步骤(复制文件步骤),以便它可以将构建复制到以构建编号命名的文件夹中。我尝试设置环境变量,但遗憾的是,无法在同一会话中设置和读取该变量。必须有一个简单的方法来做到这一点。是的,我可以编写PS或批处理脚本来执行此操作,并将值存储在文件或注册表中,但我更喜欢使用“复制文件”任务,我不知道如何传递该值。

    我尝试在构建定义中定义一个变量并将值存储在那里,但在构建定义中设置后,我似乎无法更改该值。

    顺便说一句,这是一个本地安装-不是VSTS。

    有人有什么想法吗?

    谢谢Andy 感谢您的回应。所以我在SetBuildNumberENVVar中尝试了这个。ps1

    param([Int32]$MajorBuildNumber=0,[Int32]$MinorBuildNumber=0)
    
    Write-Host "##vso[task.setvariable variable=MajorBuildNumber]$MajorBuildNumber"
    Write-Host "##vso[task.setvariable variable=MinorBuildNumber]$MinorBuildNumber"
    

    然后,我从命令行运行它:

    c:\powershell .\SetBuildNumberENVVar.ps1 23 45
    

    然后尝试回显变量:

    echo %MajorBuildNumber%
    %MajorBuildNumber%
    

    正如你所见,它似乎不起作用。我从C脚本中尝试了以下操作:

    int.TryParse("$(MajorBuildNumber)", out mbn);
    

    运行后,mbn=0。

    知道我做错了什么吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Andy Li-MSFT    6 年前

    通常,您可以使用预定义的变量 $(Build.BuildNumber) 要命名文件夹,可以在整个构建过程中直接使用它。看见 Predefined variables 有关详细信息。

    如果您按照您所说的自定义内部版本号变量: I determine the build number (this is a fairly complex process believe it or not) “。然后可以使用 Logging Command : ##vso[task.setvariable]value :

    1. 在构建定义中添加PowserShell任务
    2. 复制并粘贴下面的脚本,并将其另存为*。ps1文件

      $value= "The value of the build number here" Write-Host "##vso[task.setvariable variable=BuildNumber]$value"

    3. 签入PS文件,然后在PowerShell任务中运行PS文件

    之后,可以使用变量 $BuildNumber 直接在任何任务中 PowserShell任务背后

    您可以在另一个类似的帖子中引用我的答案: Custom TFS Enviroment Variable doesn't read $(Date)


    更新时间:

    您需要在TFS构建过程中运行PowerShell脚本。

    请参见以下示例:

    我创建了两个PS脚本,一个用于设置变量以传递值,另一个用于使用变量创建一个以传递值命名的文件夹:

    PS1:PassBuildNumber

    param([Int32]$MajorBuildNumber=0,[Int32]$MinorBuildNumber=0)
    
    Write-Host "##vso[task.setvariable variable=MajorBuildNumber]$MajorBuildNumber"
    Write-Host "##vso[task.setvariable variable=MinorBuildNumber]$MinorBuildNumber"
    

    PS2:使用变量

    Write-Host "The Major build number is:" $env:MajorBuildNumber
    Write-Host "The Minor build number is:" $env:MinorBuildNumber
    
    $foldername = $env:MajorBuildNumber + "." + $env:MinorBuildNumber
    Write-Host "foldername:" $foldername
    
    $path = "\\myshare\DirA\$foldername"
    Write-Host "path:" $path
    
    New-Item -Path $path -ItemType directory # Create a folder
    Write-Host "##vso[task.setvariable variable=path]$path"  # Set path as a variable to be used in Copy Task
    

    然后您可以使用 Copy Files 任务将文件复制到该文件夹。

    enter image description here