4
votes

Azure Devops - Définition de la variable dans le script YAML sur datetime

J'essaie de générer un nom pour un package NuGet dans un pipeline Azure DevOps YAML.

Le contexte crée des packages sur chaque build automatisé avec le nom du package, le nom de la branche, la date et le numéro de révision incrémentielle.

packageName-branchName-year-month-day-revision

De cette façon, lorsqu'une nouvelle branche de fonctionnalité est créée, elle générera un package unique qui peut être utilisé pour des tests dans des projets nécessitant il.

J'ai du mal à définir une variable dans le fichier YAML à partir de variables environnementales telles que la date ou le numéro de révision.

En utilisant la commande ## vso, je suis capable de définir 'myVariable' pour bonjour et de l'imprimer.

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

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

Lorsque j'essaie de définir la variable de PowerShell comme ci-dessous, j'obtiens l'erreur suivante '# $ dateStr' n'est pas reconnu comme une commande interne ou externe '.

# 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) 

Lorsque j'essaie de définir une variable dans la section des variables du fichier YAML comme tel.

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

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

La variable n'est pas interpolée et elle s'affiche sous la forme.

'ma variable est $ (Date: aaaaMMjj)'

Comment créer des variables basées sur des variables environnementales telles que $ (rev) et $ (Date)?


0 commentaires

3 Réponses :


4
votes

Je ne pense pas qu'il existe une variable date intégrée, mais pour le cas PowerShell, il vous suffit de déposer # avant la variable et elle doit être entourée de " sinon powershell ne développera pas votre variable

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


0 commentaires

2
votes

Merci pour l'aide.

C'est ainsi que j'ai finalement résolu le problème. Avec les branches sans version, j'utilise le nom de la branche build # + beta + pour générer un nom unique pour les packages nuget que je crée. Avec les branches de version, j'utilise simplement le build #.

# 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'     


0 commentaires

1
votes

l'utilisation du -script est idéale pour exécuter des commandes qui peuvent être exécutées sur plusieurs plates-formes telles que npm i

Comme la date n'est pas une variable globale, vous aurez besoin pour le créer. Le problème est que, en fonction de l'agent de build sur lequel vous exécutez ( window | mac | linx ), vous aurez différentes façons de définir cette variable , consultez le documentation ...

Ce qui suit vous permettra d'utiliser une variable $ d comme les autres variables

 steps:
    - bash: |
        export d=$(date +%F)
        echo "The Date is $d"
        echo "##vso[task.setvariable variable=fileName]$d"
      condition: eq( variables['Agent.OS'], 'Linux' )
    - powershell: |
        Set-Variable -Name d -Value (Get-Date).ToString('yyyy-MM-dd')
        Write-Host "##vso[task.setvariable variable=fileName]$d"
      condition: eq( variables['Agent.OS'], 'Windows_NT' )


0 commentaires