version courte
Quelqu'un peut-il me dire comment configurer une tâche "Script de ligne de commande" dans un pipeline de génération Azure DevOps qui pousse les modifications vers un référentiel Git local (en fait, le référentiel Git sur lequel le pipeline est basé)?
Peu importe ce que j'essaie, mon script expire toujours après l'impression Pushing commits to git
.
version plus longue
Nous migrons des projets Java/Maven existants d'un serveur de génération Jenkins vers un environnement de génération Azure DevOps, et j'essaie de configurer un pipeline de génération qui imite la fonctionnalité "Release Staging" de Jenkins.
Ma première tentative a été d'appeler le plugin de sortie Maven directement sur les sources extraites. Cela a impliqué plusieurs obstacles, dont la plupart ont pu être surmontés d'une manière ou d'une autre:
git config
dans une tâche "Script de ligne de commande" distincte avant de pousser.git checkout master
.Une fois que cela est configuré, mon script d'appel Maven s'exécute au point où le plug-in de publication tente de pousser vers Git; les lignes correspondantes dans le fichier journal lues
[INFO] Executing: cmd.exe /X /C "git Push https://xxx.visualstudio.com/YYY/_git/zzz refs/heads/master:refs/heads/master"
[INFO] Working directory: D:\a\1\s</code>
Après cela, rien ne se passe (au moins, rien n'est enregistré) jusqu'à ce que le délai expire:
##[error]The operation was canceled.
##[section]Finishing: Maven pom.xml
Afin de découvrir les causes de ce problème, j'ai essayé plusieurs choses, entre autres,
git Push
directement depuis le script,mais sans succès. Je suis maintenant à court d'idées sur la façon dont je pourrais obtenir le git Push
appel au travail - y a-t-il quelqu'un ici qui peut m'aider?
P.S .: Comme vous pouvez le dire, je suis plutôt un débutant en ce qui concerne Azure DevOps, donc je ne connais sûrement pas toutes les astuces et fonctionnalités de ce système. En particulier, je ne sais pas s'il existe quelque chose qui offre les mêmes fonctionnalités que le plugin de sortie Maven. Nous utilisons la gestion des packages Azure DevOps, mais nous voulons conserver des flux séparés pour les instantanés et les versions (comme le font les outils comme Nexus), nous devons donc disposer d'un mécanisme pour faire avancer automatiquement les numéros de version, les extraire et les récupérer. la création et la publication du module intégré dans le flux de publication.
Si quelqu'un peut suggérer un autre moyen d'y parvenir, je suis également ouvert aux suggestions.
Pour pousser le changement vers Azure DevOps, vous devez intégrer vos informations d'identification dans l'URL du référentiel Git :
Utilisez ensuite la commande ci-dessous pour pousser:
git Push https://Personal%20Access%20Token:[email protected]/YYY/_git/zzz master
Vous ne devriez pas avoir à suivre la route PAT pour l'authentification - selon this , si votre dépôt fait partie du même projet Azure DevOps que le pipeline de génération, les informations d'identification devraient simplement circuler. Est-il possible que vous n'ayez pas autorisé l'agent de build à écrire dans vos dépôts? Deux choses sont nécessaires:
Sous Paramètres du projet -> Référentiels pour votre projet Azure DevOps, autorisez le Service de création de collection de projets entité Contributeur droits sur le référentiel approprié (ou tous les référentiels de projet).
Autorisez les scripts à accéder au jeton OAuth sous les paramètres "Travail de l'agent":
Notez également un mauvais gotcha: cela ne fonctionnera pas pour les opérations de sous-module, car DevOps ne transmet pas automatiquement les informations d'identification aux instances de sous-module, et le seul symptôme est un blocage silencieux. Une solution de contournement pour transférer les informations d'identification manuellement est trouvée ici .
J'ai rencontré le même problème (git Push se bloque jusqu'à expiration) dans DevOps Server sur site même si Autoriser les scripts à accéder au jeton OAuth ainsi que les autorisations Repo ont été correctement définis.
Dans mon cas, le problème était que Build Agent ajoute un chemin au début de la variable d'environnement PATH - pour moi, c'était 'C:\ins\agent\externals\git\cmd \'. Ici, une ancienne version git (version git 2.18.0.windows.1) résidait et a été lancée dans le contexte du pipeline de l'agent de build. Vous pouvez le vérifier en ajoutant l'appel "git --version" à votre tâche de génération.
Je n'ai pas cherché à savoir pourquoi l'ancienne version de git ne fonctionnait pas et j'ai simplement utilisé la qualification de chemin d'accès complète pour mon git.exe mis à jour dans la tâche de pipeline
"C:\Program Files\Git\bin\git.exe" Push Origin master
et avec cette version git - actuellement "git version 2.24.0.windows.2" tout fonctionne bien. La mise à jour de votre agent de build vers une version avec git.exe plus récent devrait également résoudre ce problème, bien sûr.