Ejecución de comandos Git en un script

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 - TFS 2015

Nota

En Microsoft Team Foundation Server (TFS) 2018 y versiones anteriores, las canalizaciones de compilación y versión se denominan definiciones, las ejecuciones se denominan compilaciones, las conexiones de servicio se denominan puntos de conexión de servicio, las fases se denominan entornos y los trabajos se denominan fases.

Para algunos flujos de trabajo, necesita la canalización de compilación para ejecutar comandos de Git. Por ejemplo, después de realizar una compilación de CI en una rama de características, es posible que el equipo quiera combinar la rama con main.

Git está disponible en agentes hospedados por Microsoft y en agentes locales.

Habilitación de scripts para ejecutar comandos de Git

Nota

Antes de comenzar, asegúrese de que la identidad predeterminada de la cuenta está establecida con:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

Conceder permisos de control de versiones al servicio de compilación

  1. Vaya a la página de configuración del proyecto de su organización en Organization ConfiguraciónGeneralProjects (Proyectos generales).

    Seleccione la configuración de la organización.

  2. Seleccione el proyecto que desea editar.

    Seleccione el proyecto.

  3. En Project Configuración, seleccione Repositorios. Seleccione el repositorio en el que desea ejecutar los comandos de Git.

  4. Seleccione Seguridad para editar la seguridad del repositorio.

    Elija Seguridad para editar la seguridad del repositorio.

  5. Busque el Project de compilación de colección. Elija la identidad Project servicio de compilación de recopilación ({su organización}). De forma predeterminada, esta identidad puede leerse desde el repositorio, pero no puede volver a insertar ningún cambio en él. Conceda los permisos necesarios para los comandos de Git que desea ejecutar. Normalmente, querrá conceder:

    • Crear rama: Conceder
    • Contribuir: Conceder
    • Leer: Conceder
    • Crear etiqueta: Conceder

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

  • Azure Repos:https://dev.azure.com/{your-organization}/{your-project}/_admin/_versioncontrol
  • Local: https://{your-server}:8080/tfs/DefaultCollection/{your-project}/_admin/_versioncontrol

administrar proyecto

Si ve esta página, seleccione el repositorio y, a continuación, haga clic en el vínculo:

panel de control de arriba a proyecto

Pestaña control de versiones del proyecto del panel de control

En la pestaña Control de versiones, seleccione el repositorio en el que desea ejecutar comandos de Git y, a continuación, seleccione Project Collection Build Service. De forma predeterminada, esta identidad puede leerse desde el repositorio, pero no puede volver a insertar ningún cambio en él.

Permisos

Conceda los permisos necesarios para los comandos de Git que desea ejecutar. Normalmente, querrá conceder:

  • Crear rama: Conceder
  • Contribuir: Conceder
  • Leer: Conceder
  • Crear etiqueta: Conceder

Cuando haya terminado de conceder los permisos, asegúrese de hacer clic en Guardar cambios.

Habilitación de la canalización para ejecutar Git de línea de comandos

En la pestaña Variables, establezca esta variable:

Nombre Valor
system.prefergit true

Permitir que los scripts accedan al token del sistema

Agregue una checkout sección con establecido en persistCredentialstrue .

steps:
- checkout: self
  persistCredentials: true

Más información sobre checkout.

En la pestaña opciones,seleccione Permitir que los scripts accedan al token de OAuth.

Asegúrese de limpiar el repositorio local.

La canalización de compilación no limpia automáticamente determinados tipos de cambios en el repositorio local. Por lo tanto, asegúrese de:

  • Elimine las ramas locales que cree.
  • Deshacer los cambios de configuración de Git.

Si tiene problemas al usar un agente local, asegúrese de que el repositorio está limpio:

Asegúrese de checkout que ha establecido en cleantrue .

steps:
- checkout: self
  clean: true

Ejemplos

Enumeración de los archivos del repositorio

Asegúrese de seguir los pasos anteriores para habilitar Git.

En la pestaña Compilación, agregue esta tarea:

Tarea Argumentos

Utilidad: Línea de comandos
Enumerar los archivos en el repositorio de Git.
Herramienta:

Argumentos:

Combinar una rama de características con main

Quiere que una compilación de CI se combine con main si la compilación se realiza correctamente.

Asegúrese de seguir los pasos anteriores para habilitar Git.

En la pestaña Desencadenadores,seleccione Integración continua (CI) e incluya las ramas que desea compilar.

Cree merge.bat en la raíz del repositorio:

@echo off
ECHO SOURCE BRANCH IS %BUILD_SOURCEBRANCH%
IF %BUILD_SOURCEBRANCH% == refs/heads/main (
   ECHO Building main branch so no merge is needed.
   EXIT
)
SET sourceBranch=origin/%BUILD_SOURCEBRANCH:refs/heads/=%
ECHO GIT CHECKOUT MAIN
git checkout main
ECHO GIT STATUS
git status
ECHO GIT MERGE
git merge %sourceBranch% -m "Merge to main"
ECHO GIT STATUS
git status
ECHO GIT PUSH
git push origin
ECHO GIT STATUS
git status

En la pestaña compilación, agregue esto como la última tarea:

Tarea Argumentos

Utilidad: Script por lotes
Ejecute merge.bat.
Ruta deacceso:

Preguntas más frecuentes

¿Puedo ejecutar comandos de Git si mi repositorio remoto está en GitHub u otro servicio de Git, como Bitbucket Cloud?

¿Qué tareas puedo usar para ejecutar comandos de Git?

Script por lotes

Línea de comandos

PowerShell

Shell Script

Cómo evitar desencadenar una compilación de CI cuando se inserta el script?

Agregue ***NO_CI*** al mensaje de confirmación. Estos son unos ejemplos:

  • git commit -m "This is a commit message ***NO_CI***"
  • git merge origin/features/hello-world -m "Merge to main ***NO_CI***"

Agregue [skip ci] a su mensaje o descripción de confirmación. Estos son unos ejemplos:

  • git commit -m "This is a commit message [skip ci]"
  • git merge origin/features/hello-world -m "Merge to main [skip ci]"

También puede usar cualquiera de las variaciones siguientes. Esto se admite para las confirmaciones en Azure Repos Git, Bitbucket Cloud, GitHub y GitHub Enterprise Server.

  • [skip ci] o [ci skip]
  • skip-checks: true o skip-checks:true
  • [skip azurepipelines] o [azurepipelines skip]
  • [skip azpipelines] o [azpipelines skip]
  • [skip azp] o [azp skip]
  • ***NO_CI***

¿Cómo afecta la habilitación de scripts para ejecutar comandos de Git cómo la canalización de compilación obtiene orígenes de compilación?

Cuando se establece en , la canalización de compilación usa Git de línea de comandos en lugar de system.prefergittrue LibGit2Sharp para clonar o capturar los archivos de origen.

¿Necesito un agente?

Necesita al menos un agente para ejecutar la compilación o versión.

Tengo problemas. ¿Cómo puedo solucionarlos?

Vea Solución de problemas de compilación y versión.

No se puede seleccionar un grupo de agentes predeterminado y no se puede poner en cola la compilación o versión. ¿Cómo puedo corregirlo?

Vea Grupos de agentes.

La tarea de envío de cambios de NuGet genera el error siguiente: "Error: no se puede obtener el certificado del emisor local". ¿Cómo lo puedo corregir?

Esto se puede corregir si se añade un certificado raíz de confianza. Puede agregar la variable de entorno NODE_EXTRA_CA_CERTS=file al agente de compilación, o bien la variable de tarea NODE.EXTRA.CA.CERTS=file en la canalización. Vea la documentación de Node.js para obtener más detalles sobre esta variable. Consulte Establecimiento de variables en una canalización para obtener instrucciones sobre cómo establecer una variable en la canalización.

Utilizo TFS en el entorno local y no veo algunas de estas características. ¿Por qué no?

Algunas de estas características solo están disponibles en Azure Pipelines y todavía no lo están en el entorno local. Algunas características están disponibles en el entorno local si ha actualizado a la versión más reciente de TFS.