Consulte varios repositorios en la canalización.


  • Azure DevOps Server 2020 (limitado a repositorios de la misma organización)
  • Azure DevOps Services

GitHub ( )

  • Azure DevOps Services

  • Azure DevOps Services

  • Azure DevOps Services

Importante

Solo Azure Repos repositorios git ( ) de la misma organización que la canalización se admiten para la desprotección de varios repositorios Azure DevOps Server 2020.

Nota

Azure Pipelines limita la configuración del ámbito de trabajo para Azure Repos repositorios de Git. Para consultar los Azure Repos git hospedados en otro proyecto, se debe configurar Limitar ámbito de trabajo para permitir el acceso. Para más información, consulte Limitación del ámbito de autorización de trabajos.

Se admiten las siguientes checkout combinaciones de pasos.


Sin checkout pasos

El comportamiento predeterminado es como si fuera el primer paso y se desprotee el repositorio checkout: self actual.


Un solo checkout: none paso

No hay repositorios sincronizados ni desproteados.


Un solo checkout: self paso

Se desprotee el repositorio actual.


Un solo checkout paso que no es self o none

El repositorio designado se desprotee en lugar de self .


Varios checkout pasos

Cada repositorio designado se desprotee en una carpeta denominada después del repositorio, a menos que se especifique path otro en el checkout paso. Para comprobarlo self como uno de los repositorios, use como uno de los checkout: selfcheckout pasos.


Nota

Al consultar Azure Repos repositorios de Git distintos del que contiene la canalización, es posible que se le pida que autorice el acceso a ese recurso antes de que la canalización se ejecute por primera vez. Para obtener más información, consulte ¿Por qué se me pide que autorice los recursos la primera vez que intento consultar un repositorio diferente? en la sección de preguntas más frecuentes.

Definición de recursos del repositorio

Debe usar un recurso de repositorio si el tipo de repositorio requiere una conexión de servicio u otros recursos extendidos. Los siguientes tipos de repositorio requieren una conexión de servicio.

Tipo de repositorio Conexión de servicio
BitBucket Cloud BitBucket Cloud
GitHub GitHub
Servidor de GitHub Enterprise Servidor de GitHub Enterprise
Azure Repos repositorios de Git en una organización diferente de la canalización Azure Repos/Team Foundation Server

Puede usar un recurso de repositorio incluso si el tipo de repositorio no requiere una conexión de servicio, por ejemplo, si tiene un recurso de repositorio definido ya para las plantillas de un repositorio diferente.

En el ejemplo siguiente, tres repositorios se declaran como recursos de repositorio. El Azure Repos de Gitde otra organización, GitHuby los recursos del repositorio en la nube de Bitbucket requieren conexiones de servicio ,que se especifican como para esos recursos de repositorio. Este ejemplo tiene cuatro pasos, que comprueban los tres repositorios declarados como recursos de repositorio junto con el repositorio actual que contiene la checkoutself canalización YAML.

resources:
  repositories:
  - repository: MyGitHubRepo # The name used to reference this repository in the checkout step
    type: github
    endpoint: MyGitHubServiceConnection
    name: MyGitHubOrgOrUser/MyGitHubRepo
  - repository: MyBitbucketRepo
    type: bitbucket
    endpoint: MyBitbucketServiceConnection
    name: MyBitbucketOrgOrUser/MyBitbucketRepo
  - repository: MyAzureReposGitRepository # In a different organization
    endpoint: MyAzureReposGitServiceConnection
    type: git
    name: OtherProject/MyAzureReposGitRepo

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

steps:
- checkout: self
- checkout: MyGitHubRepo
- checkout: MyBitbucketRepo
- checkout: MyAzureReposGitRepository

- script: dir $(Build.SourcesDirectory)

Si el self repositorio se denomina , el comando genera la siguiente CurrentReposcript salida: CurrentRepo MyAzureReposGitRepo MyBitbucketRepo MyGitHubRepo . En este ejemplo, los nombres de los repositorios se usan para las carpetas, porque no se especifica ningún path en el paso de desprotección. Para más información sobre los nombres y ubicaciones de las carpetas del repositorio, consulte la siguiente sección Ruta de acceso de finalización de la compra.

Desprotección de sintaxis inserta

Si el repositorio no requiere una conexión de servicio, puede declararlo en línea con el checkout paso.

Nota

Solo Azure Repos repositorios git de la misma organización pueden usar la sintaxis insertda. Azure Repos repositorios de Git de una organización diferente y otros tipos de repositorio admitidos requieren una conexión de servicio y deben declararse como un recurso de repositorio.

steps:
- checkout: git://MyProject/MyRepo # Azure Repos Git repository in the same organization

Nota

En el ejemplo anterior, self no se desprotee el repositorio. Si especifica algún checkout paso, debe incluir checkout: self para que self se desproteba.

Ruta de finalización de la compra

A menos path que se especifique un en el checkout paso, el código fuente se coloca en un directorio predeterminado. Este directorio es diferente en función de si está des check out a single repository or multiple repositories.

  • Repositorio único:si tiene un solo paso en el trabajo o no tiene ningún paso de desprotección equivalente a , el código fuente se desproteme en un directorio denominado ubicado como una subcarpeta de checkout: selfs(Agent.BuildDirectory) . Si (Agent.BuildDirectory) es , el código se C:\agent\_work\1 desprotetee en C:\agent\_work\1\s .

  • Varios repositorios:si tiene varios pasos en el trabajo, el código fuente se desprotee en directorios denominados después de los repositorios como una subcarpeta de en s(Agent.BuildDirectory) . Si (Agent.BuildDirectory) es y los C:\agent\_work\1 repositorios se denominan tools y , el código se code desprotee y C:\agent\_work\1\s\toolsC:\agent\_work\1\s\code .

    Nota

    Si no se especifica ningún en el paso, se usa el nombre del repositorio para la carpeta, no el valor que se usa para hacer referencia al repositorio pathcheckout en el repositorycheckout paso.

Si se path especifica para un checkout paso, se usa esa ruta de acceso, en relación con (Agent.BuildDirectory) .

Nota

Si usa rutas de acceso predeterminadas, al agregar un segundo paso del repositorio se cambia la ruta de acceso predeterminada del código checkout para el primer repositorio. Por ejemplo, el código de un repositorio denominado se desproteiría cuando es el único repositorio, pero si se agrega un segundo repositorio, se desprotería en toolsC:\agent\_work\1\stoolstoolsC:\agent\_work\1\s\tools . Si tiene algún paso que dependa de que el código fuente esté en la ubicación original, esos pasos deben actualizarse.

Comprobación de una referencia específica

La rama predeterminada se desprotee, a menos que designe una referencia específica.

Si usa la sintaxis insertada, designe la referencia anexando @<ref> . Por ejemplo:

- checkout: git://MyProject/MyRepo@features/tools # checks out the features/tools branch
- checkout: git://MyProject/MyRepo@refs/heads/features/tools # also checks out the features/tools branch
- checkout: git://MyProject/MyRepo@refs/tags/MyTag # checks out the commit referenced by MyTag.

Cuando use un recurso de repositorio, especifique la referencia mediante la ref propiedad . En el ejemplo siguiente se comprueba features/tools/ la rama del repositorio designado.

resources:
  repositories:
  - repository: MyGitHubRepo
    type: github
    endpoint: MyGitHubServiceConnection
    name: MyGitHubOrgOrUser/MyGitHubRepo
    ref: features/tools

steps:
- checkout: MyGitHubRepo

Desencadenadores

Puede desencadenar una canalización cuando se inserta una actualización en el repositorio o en cualquiera de los self repositorios declarados como recursos. Esto es útil, por ejemplo, en los escenarios siguientes:

  • Se consume una herramienta o una biblioteca de un repositorio diferente. Quiere ejecutar pruebas para la aplicación cada vez que se actualice la herramienta o la biblioteca.
  • Mantenga el archivo YAML en un repositorio independiente del código de la aplicación. Quiere desencadenar la canalización cada vez que se inserta una actualización en el repositorio de aplicaciones.

Importante

Los desencadenadores de recursos de repositorio solo funcionan Azure Repos repositorios de Git de la misma organización en la actualidad. No funcionan para los recursos GitHub o bitbucket.

Si no especifica una sección en un recurso de repositorio, los cambios en ese repositorio no desencadenarán trigger la canalización. Si especifica una sección, el comportamiento para desencadenar es similar a cómo funcionan los desencadenadores trigger de CI para el repositorio propio.

Si especifica una sección para varios recursos de repositorio, un cambio en cualquiera de ellos trigger iniciará una nueva ejecución.

El desencadenador del repositorio se puede definir en una sección en la raíz del archivo YAML o en un recurso selftrigger de repositorio para self . Por ejemplo, los dos siguientes son equivalentes.

trigger:
- main

steps:
...
resources:
  repositories:
  - repository: self
    type: git
    name: MyProject/MyGitRepo
    trigger:
    - main

steps:
...

Nota

Es un error definir el desencadenador para self el repositorio dos veces. No lo defina tanto en la raíz del archivo YAML como en la resources sección .

Cuando se desencadena una canalización, Azure Pipelines debe determinar la versión del archivo YAML que se debe usar y una versión para cada repositorio que se debe desprotegiendo. Si un cambio en el repositorio desencadena una canalización, la confirmación que desencadenó la canalización se usa para determinar la versión self del archivo YAML. Si un cambio en cualquier otro recurso de repositorio desencadena la canalización, se usa la versión más reciente de YAML de la rama predeterminada del repositorio.

Cuando una actualización de uno de los repositorios desencadena una canalización, se establecen las siguientes variables en función del repositorio de desencadenamiento:

  • Build.Repository.ID
  • Build.Repository.Name
  • Build.Repository.Provider
  • Build.Repository.Uri
  • Build.SourceBranch
  • Build.SourceBranchName
  • Build.SourceVersion
  • Build.SourceVersionMessage

Para el repositorio de desencadenamiento, la confirmación que desencadenó la canalización determina la versión del código que se ha desproteado. Para otros repositorios, el definido en EL ARCHIVO YAML para ese recurso de repositorio determina la versión predeterminada que ref se ha desproteido.

Considere el ejemplo siguiente, donde el repositorio contiene el archivo YAML y los self repositorios A y contiene código B fuente adicional.

trigger:
- main
- feature

resources:
  repositories:
  - repository: A
    type: git
    name: MyProject/A
    ref: main
    trigger:
    - main

  - repository: B
    type: git
    name: MyProject/B
    ref: release
    trigger:
    - main
    - release

En la tabla siguiente se muestran las versiones que una canalización desprotegía para cada repositorio mediante el archivo YAML anterior, a menos que invalide explícitamente el comportamiento durante checkout .

Cambio realizado en Canalización desencadenada Versión de YAML Versión de self Versión de A Versión de B
main en self confirmar desde main que desencadenó la canalización confirmar desde main que desencadenó la canalización más reciente de main más reciente de release
feature en self confirmar desde feature que desencadenó la canalización confirmar desde feature que desencadenó la canalización más reciente de main más reciente de release
main en A más reciente de main más reciente de main confirmar desde main que desencadenó la canalización más reciente de release
main en B más reciente de main más reciente de main más reciente de main confirmar desde main que desencadenó la canalización
release en B más reciente de main más reciente de main más reciente de main confirmar desde release que desencadenó la canalización

También puede desencadenar la canalización al crear o actualizar una solicitud de extracción en cualquiera de los repositorios. Para ello, declare los recursos del repositorio en los archivos YAML como en los ejemplos anteriores y configure una directiva de rama en el repositorio (solo Azure Repos).

Detalles del repositorio

Al consultar varios repositorios, algunos detalles sobre self el repositorio están disponibles como self. Cuando se usan desencadenadores de varios repositorios, algunas de esas variables tienen información sobre el repositorio de desencadenadores en su lugar. Los detalles sobre todos los repositorios consumidos por el trabajo están disponibles como un objeto de contexto de plantilla denominado .

Por ejemplo, para obtener la referencia de un repositorio que no es self de , podría escribir una canalización como esta:

resources:
  repositories:
  - repository: other
    type: git
    name: MyProject/OtherTools

variables:
  tools.ref: $[ resources.repositories['other'].ref ]

steps:
- checkout: self
- checkout: other
- bash: |
    echo "Tools version: $TOOLS_REF"

Preguntas más frecuentes

¿Por qué no puedo consultar un repositorio de otro proyecto? Se utiliza para trabajar.

Azure Pipelines proporciona una configuración Limitar el ámbito de autorización del trabajo al proyecto actual, que cuando está habilitada, no permite que la canalización acceda a recursos fuera del proyecto que contiene la canalización. Esta configuración se puede establecer en el nivel de organización o de proyecto. Si esta configuración está habilitada, no podrá consultar un repositorio en otro proyecto a menos que conceda acceso explícitamente. Para obtener más información, vea Ámbito de autorización de trabajos.

¿Por qué se me pide que autorice los recursos la primera vez que intento consultar un repositorio diferente?

Al consultar Azure Repos repositorios de Git distintos del que contiene la canalización, es posible que se le pida que autorice el acceso a ese recurso antes de que la canalización se ejecute por primera vez. Estos avisos se muestran en la página de resumen de ejecución de canalización.

Esta canalización necesita permiso para acceder a un recurso

Autorización del recurso

Elija Ver o Autorizar recursosy siga las indicaciones para autorizar los recursos.

En espera de revisión

Permitir acceso

Para obtener más información, vea Solución de problemas de autorización para una canalización de YAML.

Azure Pipelines | Azure DevOps Server 2020

Pipelines a menudo se basan en varios repositorios que contienen código fuente, herramientas, scripts u otros elementos que necesita para compilar el código. Mediante el uso de varios pasos en la canalización, puede capturar y consultar otros repositorios además del que checkout se usa para almacenar la canalización de YAML.

Especificar varios repositorios

Los repositorios se pueden especificar como un recurso de repositorioo en línea con el paso .

Se admiten los siguientes tipos de repositorio.