web-dev-qa-db-fra.com

Exécution de commandes git dans un travail de construction dans Visual Studio Team Services (c'était VSO)

[Environnement: Team Services, GIT, agent de build hébergé]

J'aimerais créer une définition de génération Team Services capable d'effectuer les tâches suivantes:

  1. Exécution d'un script pour générer de nouveaux fichiers basés sur des fichiers existants dans le référentiel

  2. Commit/Push ces fichiers générés de nouveau à repo

Je peux faire le n ° 1 sans problème. Mais je ne suis pas sûr de savoir comment faire # 2.

J'ai découvert que j'étais capable d'exécuter git.exe à partir d'un travail de construction. Mais je ne sais pas comment je peux transmettre les informations d'identification à Git. Basé sur les journaux de construction, il échoue car il essaie d'obtenir le nom d'utilisateur à partir de stdin.

J'ai essayé d'ajouter une étape dans la définition de construction avec quelque chose comme "git config --global user.name xxxx" mais cela n'a toujours pas aidé.

Est-ce un scénario supporté? Aucune suggestion?

Merci!


Modifier

J'ai essayé l'approche suivante dans mon script de construction:

git -c http.extraheader="AUTHORIZATION: bearer %SYSTEM_ACCESSTOKEN%" pull ...

Cela semblait fonctionner pour des commandes telles que pull, etc. Mais quand j'essayais de pousser les changements, j'ai eu l'erreur ci-dessous:

fatal: unable to access 'https://example.visualstudio.com/SampleTeam/_git/SampleRepo/': SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054

Pensées?

21
Yutao Huang

Désolé de répondre à ma propre question ici ...

Je viens de recevoir un indice de la part d’un expert de TFS qui m’a signalé cet article: https://www.visualstudio.com/en-us/docs/build/scripts/git-commands , ce qui a parfaitement résolu mon problème .

Je pense que je devrais le partager pour aider quiconque pourrait se retrouver dans la même situation que moi.

Ici, je cite les étapes clés (reformatées un peu):

Accorder des autorisations de contrôle de version au service de génération

Accédez à l'onglet du panneau de contrôle de contrôle de version.

  • Services d'équipe: https: // {votre-compte} .visualstudio.com/DefaultCollection/{votre-projet-d'équipe}/_admin/_versioncontrol

  • Sur site: https: // {votre-serveur}: 8080/tfs/DefaultCollection/{votre-projet-d'équipe}/_admin/_versioncontrol

Dans l'onglet Version Control, sélectionnez le référentiel dans lequel vous souhaitez exécuter les commandes Git, puis sélectionnez Project Collection Build Service (nom du compte). Accordez les autorisations nécessaires pour les commandes Git que vous souhaitez exécuter. En règle générale, vous voudrez accorder:

  • Création de branche: Autoriser
  • Contribute: Autoriser
  • Read: autoriser hérité
  • Création de balise: autoriser hérité

Une fois les autorisations accordées, assurez-vous de cliquer sur Enregistrer les modifications.

Activer votre définition de construction pour exécuter Git.exe

  • Dans l'onglet variables, définissez cette variable: system.prefergit = true
  • Dans l'onglet options, sélectionnez Autoriser les scripts à accéder au jeton OAuth.

Avec ces paramètres, il n’est pas nécessaire d’installer l’extension Git Build Tools ou d’ajuster le gestionnaire d’informations d'identification. Vous n'avez pas non plus besoin de définir explicitement l'en-tête supplémentaire pour le jeton OAuth. Je pense que c'est en effet une solution très soignée. :)

Mais apprécions vraiment l'aide d'Eddie et de VonC!

34
Yutao Huang

Visual Studio Team Services (VSTS) dispose désormais d'une fonctionnalité intégrée permettant d'effectuer cette opération:

  1. Accordez au compte Project Collection Build Service (account_name) l'accès au référentiel approprié dans VSTS.
  2. Dans la phase Agent, cochez la case Autoriser les scripts à accéder au jeton OAuth.
  3. Maintenant, dans la tâche, vous pouvez référencer la variable SYSTEM_ACCESSTOKEN pour accéder au référentiel git: git clone https://randomusername:${SYSTEM_ACCESSTOKEN}@instance.visualstudio.com/proj1/_git/repo

Réf.: https://github.com/Microsoft/vsts-tasks/issues/962

4
PotatoFarmer

Vous pouvez installer Git Build Tools extension puis ajouter la tâche "Autoriser l'accès distant Git" dans votre définition de construction. Assurez-vous que la fonctionnalité "Autoriser les scripts à accéder au jeton OAuth" sous l'onglet "Options" est activée.

Activer l'accès à distance Git

Certaines opérations nécessitent un accès au référentiel distant à partir de pendant une construction. Cette tâche met à jour une distante du référentiel Git sur l'agent pour autoriser l'accès au référentiel en amont sur Visual Studio Team Prestations de service.

Exigences

Pour que cette tâche de construction fonctionne, il est nécessaire que l'option Autoriser les scripts à L'option Access OAuth Token est définie dans les options de définition de génération.

Paramètres

Activer l'accès à distance Git

Nom de la télécommande: Nom de la télécommande à mettre à jour. La valeur par défaut est Origine.

Tâches connexes

Restore Git Remote devrait être appelé à la fin de la définition de construction pour restaurer la télécommande à sa valeur d'origine.

Problèmes connus

Les opérations Git-Lfs, comme git lfs fetch, ne fonctionneront toujours pas avec cela. Voir ce numéro de Git-Lfs

Ajoutez les étapes pour utiliser le script powershell dans l'extension:

  1. Créez un script power-Shell avec le code du script "EnableGitRemoteAccess.ps1" et ajoutez-le au contrôle de code source.
  2. Activez l'option "Autoriser les scripts à accéder au jeton OAuth" dans la définition de construction.
  3. Ajoutez une tâche PowerShell dans la définition de construction et définissez le chemin du script afin qu'il active l'accès distant git .  enter image description here
  4. Ajoutez une autre tâche PowerShell dans la définition de construction pour valider et transmettre les modifications.

Le code que j'utilise pour valider et modifier les modifications:

git add .
git commit -m "changesinbuild"
git Push Origin master 2>&1 | Write-Host
3
Eddie Chen - MSFT

Tout fichier que vous pouvez générer à partir de la source est généralement considéré comme un artefact de construction, et not ajouté/commit/poussé vers un dépôt Git.

Cela étant dit, si vous le pouvez, vous devriez utiliser une URL ssh au lieu de https: ssh nécessiterait une clé ssh, et si votre clé ssh privée est sans phrase secrète, git n'aura à interroger rien sur stdin.

Une autre méthode consiste à utiliser Microsoft GCH (Git Credential Helper) , inclus dans Git pour Windows (depuis Git 2.7.3 , mars 2016).
Voir cette réponse pour un exemple. Cela mettrait en cache votre identifiant/mot de passe dans le magasin d'informations d'identification Windows.

1
VonC

J'avais le même problème. La solution consistait à placer les options de configuration de git dans la partie script de yaml. Voir ce numéro de GitHub pour des exemples:

https://github.com/Microsoft/Azure-pipelines-agent/issues/1925

0
mwilson