12 votes

Y a-t-il une version courte à 7 chiffres de $(SourceVersion) dans Azure Devops ?

Je cherche à définir les noms de nos constructions dans un format de...

$(BuildDefinitionName)_$(versionMajor).$(versionMinor).$(versionPatch)+$(SourceBranchName).$(SourceVersion) par exemple OurBigLibraryCI_1.2.3+master.10bbc577

Cependant, je n'ai pas trouvé de variable prédéfinie contenant le hash de commit "court" (7 chiffres). $(SourceVersion) contient le hash complet SHA-1.

Comment raccourcir cela dans un pipeline basé sur yaml?

5voto

Johan Points 133

Vous pouvez utiliser la substitution de commande traditionnelle via les backticks pour obtenir le court hash git (SHA-1), en supposant que le code est en cours de vérification dans $(Build.SourcesDirectory):

  - bash: |
      short_hash=`git rev-parse --short=7 HEAD`  ## Au moins 7 chiffres, plus si nécessaire pour l'unicité
      echo ""
      echo "Full git hash:  $(Build.SourceVersion)"
      echo "Short git hash: $short_hash"
      echo "##vso[task.setvariable variable=short_hash]$short_hash"  ## Stocker la variable pour les étapes ultérieures
    workingDirectory: $(Build.SourcesDirectory)
    displayName: Obtenir le court hash git

Sortie:

Full git hash:  f8d63b1aaa20cf348a9b5fc6477ac80ed23d5ca0
Short git hash: f8d63b1

Les étapes suivantes dans le pipeline peuvent ensuite utiliser le court hash via la variable $(short_hash).

(Ceci est mieux que de réduire manuellement le full hash git à sept caractères, car cela ajoutera des chiffres supplémentaires si nécessaire pour identifier de manière unique le commit, voir https://stackoverflow.com/a/21015031/1447415.)

Mise à jour: Version améliorée

La version améliorée suivante vérifie que les hashs git correspondent (que le hash complet commence par le hash court) et échoue l'étape sinon:

  - bash: |
      short_hash=`git rev-parse --short=7 HEAD`
      echo ""
      echo "Full git hash:  $(Build.SourceVersion)"
      echo "Short git hash: $short_hash"
      echo ""
      ## Echouer l'étape si le hash complet ne commence pas par le hash court
      if [[ $(Build.SourceVersion) != $short_hash* ]]; then
        echo "--> Les hashs ne correspondent pas ! Abandon."
        exit 1
      fi
      echo "--> Les hashs correspondent. Stockage du hash court pour les étapes ultérieures."
      ## Stocker la variable pour les étapes ultérieures
      echo "##vso[task.setvariable variable=short_hash]$short_hash"
    workingDirectory: $(Build.SourcesDirectory)
    displayName: Obtenir le court hash git

4voto

Leo Liu-MSFT Points 21360

Comment raccourcir cela dans un pipeline yaml?

Il n'existe pas de variable prédéfinie pour obtenir la version à 7 chiffres de $(SourceVersion) dans Azure DevOps. Car le ShortSha est en version à 8 chiffres.

Donc, pour résoudre ce problème, comme l'a dit @4c74356b41, nous devons utiliser un script bash\powershell pour diviser le long sha en un sha court.

Vous pouvez vérifier mon exemple suivant pour plus de détails:

étapes:

- script: |
   echo $(Build.SourceVersion)

   set  TestVar=$(Build.SourceVersion)

   set MyCustomVar= %TestVar:~0,7%

   echo %MyCustomVar%

  displayName: 'Script de ligne de commande'

Le résultat:

========================== Démarrage de la sortie de commande ===========================
##[command]"C:\WINDOWS\system32\cmd.exe" /D /E:ON /V:OFF /S /C "CALL "C:\VS2017Agent\_work\_temp\be5f6293-77d8-41b7-a537-49e3b2e7bc6c.cmd""
cb124539c4cb7f19dc8e50e1b021f93c5ffaf226
cb12453
##[section]Fin: Script de ligne de commande

Ainsi, nous avons pu obtenir la version à 7 chiffres de $(SourceVersion) qui est cb12453.

J'espère que cela vous aidera.

3voto

Khoa Points 96
- script: |
    echo $sourceVersion
    commitHash=${sourceVersion:0:7}
    echo $commitHash
    echo "##vso[task.setvariable variable=commitHash]$commitHash" ## Définit une variable à utiliser dans d'autres tâches.
  env: { sourceVersion: $(Build.SourceVersion) }
  displayName: Git Hash 7 chiffres
  workingDirectory: #workingDirectory

- task: Docker@2
  displayName: Build & Push image
  inputs:
    command: 'buildAndPush'
    containerRegistry: '$(myRegistry)'
    repository: $(myContainerRepository)
    Dockerfile: $(myDockerfile)
    buildContext: '$(myBuildContext)'
    tags: $(commitHash) ## La variable a été définie ci-dessus.

Voici un exemple pour vmImage: "ubuntu-latest". Étape :

  1. Séparez les 7 caractères de GitHash prédéfini
  2. Attribuez-le à la variable Pipeline. Ne confondez pas $(azure_pipeline_variable) avec ${bash_shell_variable} ou $bash_shell_variable.
  3. Utilisez-la avec $(commitHash)

En savoir plus:

  1. Attribuer une variable dans le pipeline Azure
  2. Utilisation de script dans le pipeline Azure

1voto

4c74356b41 Points 23968

Vous pourriez utiliser gitversion pour cela, cela exposera shortsha sous la variable $(GitVersion.ShortSha) après avoir exécuté la tâche gitversion.

d'autre part, shortsha n'est que les 7 premiers caractères d'un vrai sha, vous pouvez donc simplement utiliser une sorte de script bash\powershell pour diviser le sha long en sha court

Dans Git, quelle est la différence entre les hachages longs et courts?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X