Ejecución de commands git dentro de un trabajo de compilation en Visual Studio Team Services (era VSO)

[Entorno: Team Services, GIT, agente de compilation alojado]

Me gustaría crear una definición de compilation de Team Services que sea capaz de hacer lo siguiente:

  1. Ejecutar un script para generar algunos files nuevos basados ​​en files existentes en el repository

  2. Confirmar / enviar los files generados de vuelta al repository

Puedo hacer # 1 sin ningún problema. Pero no estoy seguro de cómo puedo hacer # 2.

Descubrí que en realidad era capaz de ejecutar git.exe desde dentro de un trabajo de construcción. Pero no estoy seguro de cómo puedo pasar la cnetworkingencial a git. En function de los loggings de compilation, está fallando porque está tratando de get el nombre de usuario de stdin.

Traté de agregar un paso en la definición de compilation con algo como "git config –global user.name xxxx" pero aún así no me ayudó.

¿Es esto un escenario soportado? ¿Alguna sugerencia?

¡Gracias!


Editar

Probé el siguiente enfoque en mi script de compilation:

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

Parecía funcionar para commands como pull, etc. Pero cuando estaba tratando de impulsar los cambios, obtuve el siguiente error:

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

¿Pensamientos?

Perdón por responder mi propia pregunta aquí …

Acabo de recibir una pista de algún experto de TFS, que me señaló este artículo: https://www.visualstudio.com/en-us/docs/build/scripts/git-commands , que resolvió perfectamente mi problema.

Creo que debería compartirlo para ayudar a quienquiera que se encuentre en la misma situación que yo.

Aquí estoy citando los pasos key (formateados un poco):

Conceder permissions de control de versión para el service de compilation

Vaya a la pestaña del panel de control de Control de versiones

  • Team Services: https: // {su-count} .visualstudio.com / DefaultCollection / {your-team-project} / _admin / _versioncontrol

  • En las instalaciones: https: // {your-server}: 8080 / tfs / DefaultCollection / {your-team-project} / _admin / _versioncontrol

En la pestaña Control de versiones , select el repository en el que desea ejecutar los commands de Git, y luego select el Servicio de compilation de collections de proyectos (nombre de la count) . Otorgue permissions necesarios para los commands de Git que desea ejecutar. Por lo general, querrás otorgar:

  • Creación de twigs: Permitir
  • Contribuir : Permitir
  • Leer : Permiso henetworkingado
  • Creación de label : permiso henetworkingado

Cuando termine de otorgar los permissions, asegúrese de hacer clic en Guardar cambios .

Habilite su definición de compilation para ejecutar Git.exe

  • En la pestaña de variables, establezca esta variable: system.prefergit = true
  • En la pestaña de opciones, select Permitir scripts para acceder al token de OAuth .

Con estas configuraciones, no hay necesidad de instalar la extensión de Git Build Tools o ajustar el Cnetworkingential Manager. No es necesario configurar explícitamente el encabezado adicional para el token de OAuth. Siento que de hecho es una solución muy clara. 🙂

¡Pero realmente agradezco la ayuda de Eddie y VonC!

Puede instalar la extensión de Git Build Tools y luego agregar la tarea "Permitir el acceso remoto de Git" en su definición de compilation. Asegúrese de que la característica "Permitir que los scripts accedan al token OAuth" en la pestaña "Opciones" esté habilitada.

Habilitar el acceso remoto de Git

Ciertas operaciones requieren acceso al repository remoto durante una compilation. Esta tarea actualiza un control remoto del repository de Git en el agente para permitir el acceso al repository en sentido ascendente en Visual Studio Team Services.

Requisitos

Para que esta tarea de compilation funcione, se requiere que la opción Permitir que los scripts accedan al token de OAuth esté configurada en las opciones de definición de compilation.

Parámetros

Habilitar el acceso remoto de Git

Nombre remoto: nombre del control remoto que debe actualizarse. El valor pnetworkingeterminado es origen.

Tareas relacionadas

Se debe llamar a Restore Git Remote al final de la definición de compilation para restaurar el control remoto a su valor original.

Problemas conocidos

Las operaciones de Git-Lfs, como la recuperación de git lfs todavía no funcionará con esto. Mira este problema de Git-Lfs

Agregue los pasos para usar el script de powershell en la extensión:

  1. Cree un script de power-shell con el código en el script "EnableGitRemoteAccess.ps1" y agregue el script al control de código fuente.
  2. Habilite la opción "Permitir que los scripts accedan al token OAuth" en la definición de compilation.
  3. Agregue una tarea de PowerShell en la definición de compilation y establezca la ruta del script en la secuencia de commands para habilitar el acceso remoto de git. enter image description here
  4. Agregue otra tarea de PowerShell en la definición de compilation para confirmar y enviar los cambios.

El código que uso para confirmar y presionar cambios:

 git add . git commit -m "changesinbuild" git push origin master 2>&1 | Write-Host 

Cualquier file que pueda generar desde la fuente generalmente se considera como artefacto de construcción y no se agrega / confirma / presiona a un repository de git.

Dicho esto, si puede, debe usar una url ssh en lugar de una https one: ssh requeriría una key ssh, y si su key ssh privada está sin contraseña, git no tendrá que consultar nada en stdin.

Otra forma es utilizar Microsoft GCH (Git Cnetworkingential Helper) , que se incluye en Git para Windows (desde Git 2.7.3 , marzo de 2016).
Vea esta respuesta para un ejemplo. Eso almacenaría en caching su nombre de usuario / contraseña dentro de la tienda de cnetworkingenciales de Windows.

Esto es solo un seguimiento de la respuesta de Tony's Blues.

Lo siento, no puedo publicar enlaces ya que mi reputación está por debajo de 10, pero todos se colocan en el website de visualstudio, así que estoy seguro de que puede resolverlo usted mismo.

Para permitir las contribuciones de GIT dentro de un script, necesita

  1. Asegúrate de tener todo lo mencionado en los requisitos previos del Agente VSTS.

  2. Asegúrate de haber seguido las instrucciones en / en-us / docs / build / scripts / git-commands

    • Especialmente agregue permissions requeridos a la count del Servicio de Project Build en su repository; al less Contribute (no dude en considerar otros permissions de acuerdo con sus necesidades): esta es la verdadera causa del "error de lectura de SSL".

Lo que es diferente entre esta publicación y la de Tony es que en nuestra configuration (TFS 2015; VSTS Agent instalado en Mac OS Sierra) hemos tenido que agregar el permiso "Contribuir" para la count " Project Build Service ", no la count con la palabra "colección" mencionada en el nombre. También tenga cuidado y no lo mezcle con el grupo denominado Project Collection Build Service Accounts : creo que se puede usar bajo ciertas condiciones, pero no funciona de manera pnetworkingeterminada. Estoy señalando esto, ya que esto es lo que accidentalmente hice, así que he pasado más time depurando lo que está mal.

Verifique la siguiente image. Puede encontrarla en su proyecto -> Panel de control -> Control de versiones -> Repositorio GIT

También tenga cuidado con los requisitos del sistema ya que en mi caso (en MacOS Sierra) la parte con enlaces simbólicos para dos directorys específicos se volvió crítica. Los requisitos específicos del sistema para OSX se colocan en [github] /Microsoft/vsts-agent/blob/master/docs/start/envosx.md y los estados

Instalar openssl

 $ brew update $ brew install openssl 

Crear enlaces simbólicos a openssl libs : esto es necesario en MacOS (Sierra)

 $ mkdir -p /usr/local/lib/ $ ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/ $ ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/ 

Descubre tu versión de GIT

 $ git --version 

Actualiza GIT en caso de que tengas less de 2.9.0

 $ brew update $ brew install git