[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:
Exécution d'un script pour générer de nouveaux fichiers basés sur des fichiers existants dans le référentiel
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?
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!
Visual Studio Team Services (VSTS) dispose désormais d'une fonctionnalité intégrée permettant d'effectuer cette opération:
SYSTEM_ACCESSTOKEN
pour accéder au référentiel git: git clone https://randomusername:${SYSTEM_ACCESSTOKEN}@instance.visualstudio.com/proj1/_git/repo
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:
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
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.
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