Ejecutar comandos de Git en scripts de canalización

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Los comandos de Git están disponibles para los flujos de trabajo de compilación en agentes hospedados por Microsoft y agentes autohospedados. Por ejemplo, después de que una compilación de integración continua (CI) se complete en una rama de características, puedes fusionar la rama con la principal. En este artículo se explica cómo ejecutar comandos de Git en scripts de compilación de Azure Pipelines.

Habilitación de scripts para ejecutar comandos de Git

Asegúrese de que Git usa la identidad predeterminada de la cuenta de Azure DevOps. Si es necesario, establezca el usuario de Git como primer paso después de la finalización de la compra.

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

Conceder permisos al servicio de compilación

El servicio de compilación del proyecto debe tener permisos para escribir en el repositorio de origen. Establezca los permisos necesarios de la siguiente manera:

  1. En la Configuración del Proyecto para su proyecto, seleccione Repositorios en Repos.

  2. En la página Todos los repositorios , seleccione Seguridad para establecer permisos para todos los repositorios del proyecto. O bien, seleccione el repositorio en el que desea ejecutar comandos de Git y, a continuación, seleccione Seguridad en la página del repositorio.

    Captura de pantalla que muestra la selección de Seguridad para repositorios.

  3. En la página Permisos de usuario, seleccione la identidad del Servicio de Compilación. Asegúrate de seleccionar <el nombre> del proyecto Servicio de Construcción (<organización>) en Usuarios, no Cuentasde Servicio de Construcción de Colección de Proyectos. De forma predeterminada, esta identidad puede leer desde el repositorio, pero no puede insertar ningún cambio en él.

  4. En la lista desplegable, seleccione Permitir junto a cada permiso necesario para los comandos de Git que quiera ejecutar, normalmente Crear rama, Contribuir, Leer y Crear etiqueta.

    Captura de pantalla que muestra la concesión de permisos de identidad a los repositorios.

Permitir que los scripts accedan al token del sistema

Para permitir que los scripts accedan al token de OAuth de GitHub:

Agregue un paso checkout a la canalización de YAML con persistCredentials establecido en true.

steps:
- checkout: self
  persistCredentials: true

Para obtener más información sobre el checkout paso, consulte la steps.checkout definición.

Limpieza del repositorio local

La pipeline de compilación no limpia automáticamente ciertos cambios en el repositorio local, como eliminar ramas locales o deshacer cambios locales git config . Si tiene problemas con un agente autohospedado, puede limpiar el repositorio antes de ejecutar la compilación.

En general, para un rendimiento más rápido de los agentes autoalojados, no limpies el repositorio. La limpieza no es eficaz para los agentes hospedados por Microsoft, porque utilizan un nuevo agente cada vez. Para obtener más información, consulte Limpieza del repositorio local en el agente.

Para limpiar el repositorio antes de ejecutar la compilación:

Configura clean en true el checkout paso. Esta opción se ejecuta git clean -ffdx seguida de git reset --hard HEAD antes de recoger.

steps:
- checkout: self
  clean: true

Seleccione Variables en el editor de canalización, cree o modifique la Build.Clean variable y establezca su valor sourceen .

Ejemplos de comandos de Git

Los siguientes ejemplos ejecutan comandos Git en una tarea de línea de comandos y en una tarea de scripts por lotes.

Enumerar los archivos del repositorio

Para enumerar los archivos en el repositorio de Git, use la tarea Línea de comandos en una canalización YAML de la siguiente manera:

- task: CmdLine@2
  inputs:
    script: 'git ls-files'

Combinación de una rama de características con la principal

El siguiente ejemplo de pipeline Classic fusiona una compilación de CI a main si la compilación tiene éxito.

  1. Cree un archivo denominado merge.bat en la raíz del repositorio con el siguiente contenido:

    @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
    
  2. En la pestaña Desencadenadores de la canalización clásica, active la casilla Habilitar la integración continua.

  3. En Filtros de rama y Filtros de ruta, seleccione ramas y rutas para Incluir o Excluir de la compilación.

  4. Agregue un script de Batch como la última tarea del flujo de trabajo.

  5. En la configuración de la tarea, en la Ruta, escriba la ubicación y el nombre del archivo merge.bat.

Preguntas más frecuentes

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

Sí, puede ejecutar comandos de Git si el repositorio remoto está en GitHub u otro servicio de Git, como Bitbucket Cloud.

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

Puede usar las siguientes tareas de Azure Pipelines para ejecutar comandos de Git:

¿Cómo puedo evitar activar una compilación de CI cuando el script se lanza?

Para evitar activar una compilación de CI cuando el script se envíe, añade [skip ci] a tu mensaje o descripción de commit. Por ejemplo:

  • 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 siguientes variaciones para las confirmaciones en Azure Repos Git, Bitbucket Cloud, GitHub o 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***

¿Necesito un agente para ejecutar canalizaciones?

Sí, necesita al menos un agente para ejecutar el flujo de trabajo de compilación o despliegue.

¿Cómo puedo solucionar problemas?

Consulta Solucionar problemas de ejecucionesde pipeline.

¿Cómo puedo solucionar que no puedo seleccionar un pool de agentes por defecto o poner en cola la ejecución de mi pipeline?

Consulte Creación y administración de grupos de agentes.

¿Cómo puedo corregir el problema de mi tarea de envió de NuGet que falla con el "Error: no se puede obtener el certificado del emisor local"?

Para corregir este problema, agregue un certificado raíz de confianza. Agregue la variable de entorno NODE_EXTRA_CA_CERTS=file al agente de compilación o agregue la variable de tarea NODE.EXTRA.CA.CERTS=file en la canalización.

Para obtener más información sobre esta variable, consulte NODE_EXTRA_CA_CERTS=file en la documentación de Node.js. Para obtener instrucciones sobre cómo establecer una variable en la canalización, consulte Establecimiento de variables en una canalización.

¿Por qué no veo algunas de estas características en mi Azure DevOps Server local?

Algunas de estas características solo están disponibles en Azure DevOps Services y no están disponibles para Azure DevOps Server. Algunas características solo están disponibles en la versión más reciente de Azure DevOps Server.