Azure Devops-将YAML脚本中的变量设置为datetime

时间:2019-01-22 18:10:16

标签: azure-devops yaml devops

我正在尝试在Azure DevOps YAML管道中为NuGet包生成一个名称。

上下文将在每个自动构建中使用软件包名称,分支名称,日期和递增的修订号创建软件包。

packageName-branchName-年-月-日-修订版

这样,当创建一个新的功能分支时,它将生成一个唯一的程序包,可用于在需要它的项目中进行测试。

我正在努力根据环境变量(例如日期或修订号)在YAML文件中设置变量。

使用## vso命令,我可以将'myVariable'设置为hello并打印出来。

- script: |
    echo '##vso[task.setvariable variable=myVariable]hello'

- script: |
    echo my variable is $(myVariable)

当我尝试按以下方式从PowerShell设置变量时,出现以下错误“#$ dateStr”未被识别为内部或外部命令”。

# Create a variable
- script: |
    #$dateStr = (Get-Date).ToString('yyyy-MM-dd') 
    echo '##vso[task.setvariable variable=myVariable]#$dateStr'

# Print the variable
- script: |
    echo my variable is $(myVariable) 

当我尝试这样在YAML文件的变量部分中设置变量时。

variables:
  solution: '**/*.sln'
  foo: $(Date:yyyyMMdd)

- script: |
    echo my variable is $(foo)

该变量未插值,并输出为。

'我的变量是$(Date:yyyyMMdd)'

如何基于环境变量(例如$(rev)和$(Date))创建变量?

3 个答案:

答案 0 :(得分:2)

我不认为有内置的date变量,但是对于powershell情况,您只需要在变量前删除#即可,并且必须将其用"括起来,否则powershell不会扩展您的变量

echo "##vso[task.setvariable variable=myVariable]$dateStr"

答案 1 :(得分:2)

感谢您的帮助。

这就是我最终解决问题的方式。对于非发行版分支,我使用build#+ beta +分支名称为正在创建的nuget包生成唯一的名称。对于发布分支,我只使用构建号。

# Create version number for non release package(s) - 1.0.xxx-beta-develop for example
- powershell: |
    [String]$buildNumber = $Env:BUILD_BUILDNUMBER.Substring($Env:BUILD_BUILDNUMBER.LastIndexOf('.') + 1)
    [String]$branchName = $Env:BUILD_BUILDNUMBER.Substring(0, $Env:BUILD_BUILDNUMBER.LastIndexOf('.'))
    Write-Host "##vso[task.setvariable variable=nugetVersion]1.0.$($buildNumber)-beta-$($branchName)"
  displayName: 'Create beta version number for production nuget packages - run when in non release branch' 
  condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'release/'))

# Create version number for release package(s) - 1.0.xxx for example
- powershell: |
    [String]$buildNumber = $Env:BUILD_BUILDNUMBER.Substring($Env:BUILD_BUILDNUMBER.LastIndexOf('.') + 1)
    Write-Host "##vso[task.setvariable variable=nugetVersion]1.0.' + $($buildNumber)
  displayName: 'Create version number for production nuget packages - run when in release branch' 
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'release/'))


- task: NuGetCommand@2
  inputs:
    command: 'pack' # Options: restore, pack, push, custom
    versioningScheme: byEnvVar
    versionEnvVar: nugetVersion
    packDestination: '$(Build.ArtifactStagingDirectory)\nuget'
    packagesToPack: '**/Floww.*.nuspec'     

答案 2 :(得分:0)

使用<div class="contact"> <form action="" class="form"> <p class="full"> <label for="">Contact to</label> <select class="contact-to" name="request-type"> <option value="candidates">Looking for candidates</option> <option value="job">Looking for a job</option> <option value="collaboration">Working with Asia-HR</option> <option value="other">Other</option> </select> </p> <p> <label for="">Company</label> <input type="text" name="company" placeholder="enter the name of your company"> </p> <p> <label for="">Name*</label> <input type="text" name="name" placeholder="enter your name"> </p> <p> <label for="">Email*</label> <input type="email" name="name" placeholder="enter your email"> </p> <p> <Label>Phone</Label> <input type="phone" name="name" placeholder="enter your phone number"> </p> <p class="full"> <label for="Your message">Your message*</label> <textarea name="message" id="" cols="30" rows="10"></textarea> </p> <p class="full"> <input type="file" name="document"> </p> <p class="full"> <button>Submit</button> </p> </form> </div>非常适合运行可以跨平台执行的命令,例如-script

由于日期不是全局变量,因此需要创建日期。问题是,根据您正在运行的构建代理(npm i | window | mac),您将有不同的方法来设置该变量,请参见documentation。 ..

以下内容将使您可以像其他变量一样使用linx变量

$d