好的 - 我已经阅读了所有关于环境变量以及它们如何被同一个进程设置和读取的内容(即使这在构建的后续步骤中无法读取):
Environment.SetEnvironmentVariable("Major_Build_Number", BaseReleaseNumber, EnvironmentVariableTarget.Machine)
那么有没有人想出一个简单的方法将信息从一个构建步骤传递到另一个构建步骤?在我的第一步中,我确定了构建号(这是一个相当复杂的过程,不管你信不信)我需要将该构建号传递给最后一个构建步骤(这是一个“复制文件”步骤),以便它可以将构建复制到使用内部版本号命名的文件夹。我已经尝试设置环境变量,但不幸的是,无法从同一会话中设置和读取。必须有一个简单的方法来做到这一点。是的我可以编写PS或批处理脚本来执行此操作并将值存储在文件或注册表中,但我更喜欢使用“复制文件”任务,而我无法弄清楚如何传递该值。
我尝试在构建定义中定义一个变量并将值存储在那里但是在构建定义中设置之后我似乎无法更改该值。
BTW,这是一个本地安装 - 而不是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之后运行。
知道我做错了吗?
答案 0 :(得分:0)
通常,您可以使用预定义的变量$(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
:
复制并粘贴到脚本下方并将其另存为* .ps1文件
$value= "The value of the build number here"
Write-Host "##vso[task.setvariable variable=BuildNumber]$value"
之后,您可以在PowserShell任务后面的任何任务中直接使用变量$BuildNumber
。
您可以在另一个类似的帖子中引用我的答案: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任务将文件复制到该文件夹。