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

azure devops-将yaml脚本中的变量设置为datetime

  •  1
  • CountZero  · 技术社区  · 6 年前

    我正在尝试在一个AzureDevOpsYaml管道中为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部分中设置变量时。

    variables:
      solution: '**/*.sln'
      foo: $(Date:yyyyMMdd)
    
    - script: |
        echo my variable is $(foo)
    

    变量不是内插的,它输出为。

    '我的变量是$(日期:YYYYMMDD)'

    如何根据环境变量创建变量,如$(rev)和$(date)?

    2 回复  |  直到 6 年前
        1
  •  2
  •   4c74356b41    6 年前

    我不认为有内置的 date 变量,但对于PowerShell情况,只需删除 # 变量之前,必须用 " 否则PowerShell将无法扩展您的变量

    echo "##vso[task.setvariable variable=myVariable]$dateStr"
    
        2
  •  1
  •   CountZero    6 年前

    谢谢你的帮助。

    这就是我最终解决问题的方法。对于非发布分支,我使用build+beta+branch name为我正在创建的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'