Consulte varios repositorios en la canalización.
Azure Repos Git ( )
- Azure DevOps Server 2020 (limitado a repositorios de la misma organización)
- Azure DevOps Services
GitHub ( )
- Azure DevOps Services
GitHubEnterprise ( )
- Azure DevOps Services
Bitbucket Cloud ( )
- 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 seC:\agent\_work\1desprotetee enC:\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 losC:\agent\_work\1repositorios se denominantoolsy , el código secodedesprotee yC:\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
pathcheckouten elrepositorycheckoutpaso.
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.IDBuild.Repository.NameBuild.Repository.ProviderBuild.Repository.UriBuild.SourceBranchBuild.SourceBranchNameBuild.SourceVersionBuild.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 |
Sí | 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 |
Sí | 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 |
Sí | 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 |
Sí | 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 |
Sí | 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.
- ¿Por qué se me pide que autorice los recursos la primera vez que intento consultar un repositorio diferente?
¿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.
Elija Ver o Autorizar recursosy siga las indicaciones para autorizar los recursos.
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.