Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede integrar plantillas de Azure Resource Manager (plantillas de ARM) con Azure Pipelines para la integración continua y la implementación continua (CI/CD). En este artículo, aprenderá dos formas más avanzadas de implementar plantillas con Azure Pipelines.
Selección de la opción
Antes de continuar con este artículo, consideremos las distintas opciones para implementar una plantilla de ARM desde una canalización.
Utilice la tarea de implementación de plantillas de ARM. Esta opción es la opción más sencilla. Este enfoque funciona cuando desea implementar una plantilla directamente desde un repositorio. Esta opción no se trata en este artículo, sino que se trata en el tutorial Integración continua de plantillas de ARM con Azure Pipelines. Muestra cómo usar la tarea de implementación de plantillas de ARM para implementar una plantilla desde el repositorio de GitHub.
Agregue una tarea que ejecute un script de Azure PowerShell. Esta opción tiene la ventaja de proporcionar coherencia durante el ciclo de vida de desarrollo, ya que puede usar el mismo script que usó al ejecutar pruebas locales. El script implementa la plantilla, pero también puede realizar otras operaciones, como obtener valores para usarlos como parámetros. Esta opción se muestra en este artículo. Consulte tarea de Azure PowerShell.
Visual Studio proporciona el proyecto de grupo de recursos de Azure que incluye un script de PowerShell. El script almacena provisionalmente los artefactos del proyecto en una cuenta de almacenamiento a la que puede acceder Resource Manager. Los artefactos son elementos del proyecto, como plantillas vinculadas, scripts y archivos binarios de aplicación. Si desea seguir usando el script del proyecto, use la tarea script de PowerShell que se muestra en este artículo.
Agregue tareas para copiar e implementar tareas. Esta opción ofrece una alternativa cómoda al script del proyecto. Configure dos tareas en la canalización. Una tarea coloca los artefactos en una ubicación accesible. La otra tarea implementa la plantilla desde esa ubicación. Esta opción se muestra en este artículo. Consulte Copia e implementación de tareas.
Preparación del proyecto
En este artículo se da por supuesto que la plantilla de ARM y la organización de Azure DevOps están listas para crear la canalización. Los pasos siguientes muestran cómo asegurarse de que está listo:
Tiene una organización de Azure DevOps. Si no tiene ninguna, cree una gratis. Si el equipo ya tiene una organización de Azure DevOps, asegúrese de que es administrador del proyecto de Azure DevOps que desea usar.
Ha configurado una conexión de servicio a la suscripción de Azure. Las tareas en la canalización se ejecutan con la identidad de la entidad de servicio. Para ver los pasos para crear la conexión, consulte Creación de un proyecto de DevOps.
Tienes una plantilla de ARM que define la infraestructura para tu proyecto.
Creación de una canalización
Si no ha agregado una canalización anteriormente, debe crear una nueva canalización. En la organización de Azure DevOps, seleccione Canalizaciones y Nueva canalización.
Especifique dónde se almacena el código. En la imagen siguiente se muestra seleccionar Azure Repos Git.
En ese origen, seleccione el repositorio que tiene el código del proyecto.
Seleccione el tipo de canalización que se va a crear. Puede seleccionar Canalización inicial.
Está listo para agregar una tarea de Azure PowerShell o las tareas de copia de archivos y de implementación.
Tarea de Azure PowerShell
En esta sección se muestra cómo configurar la implementación continua mediante una sola tarea que ejecuta el script de PowerShell en el proyecto. Si necesita un script de PowerShell que implemente una plantilla, consulte Deploy-AzTemplate.ps1 o Deploy-AzureResourceGroup.ps1.
El siguiente archivo YAML crea una tarea de Azure PowerShell:
trigger:
- master
pool:
vmImage: 'ubuntu-latest'
steps:
- task: AzurePowerShell@5
inputs:
azureSubscription: 'script-connection'
ScriptType: 'FilePath'
ScriptPath: './Deploy-AzTemplate.ps1'
ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json
azurePowerShellVersion: 'LatestVersion'
Al establecer la tarea en AzurePowerShell@5
, la canalización usa el módulo Az. Si usa el módulo AzureRM en el script, establezca la tarea en AzurePowerShell@3
.
steps:
- task: AzurePowerShell@3
En azureSubscription
, proporcione el nombre de la conexión de servicio que creó.
inputs:
azureSubscription: '<your-connection-name>'
Para scriptPath
, proporcione la ruta de acceso relativa desde el archivo de canalización hasta el script. Puede buscar la ruta de acceso en el repositorio.
ScriptPath: '<your-relative-path>/<script-file-name>.ps1'
En ScriptArguments
, proporcione los parámetros necesarios para el script. En el ejemplo siguiente se muestran algunos parámetros para un script, pero deberá personalizar los parámetros del script.
ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json
Al seleccionar Guardar, la canalización de compilación se ejecuta automáticamente. Vuelva al resumen de la canalización de compilación y vea el estado.
Puede seleccionar la canalización que se está ejecutando actualmente para ver detalles sobre las tareas. Cuando termine, verá los resultados de cada paso.
Copiar e implementar tareas
En esta sección se muestra cómo configurar la implementación continua mediante dos tareas. La primera tarea almacena provisionalmente los artefactos en una cuenta de almacenamiento y la segunda tarea implementa la plantilla.
Para copiar archivos en una cuenta de almacenamiento, a la entidad de servicio de la conexión de servicio se le debe asignar el rol Colaborador de datos de Storage Blob o Propietario de datos de Storage Blob. Para más información, consulte Introducción a AzCopy.
En el siguiente código YAML se muestra la tarea de copia de archivos de Azure.
trigger:
- master
pool:
vmImage: 'windows-latest'
steps:
- task: AzureFileCopy@4
inputs:
SourcePath: 'templates'
azureSubscription: 'copy-connection'
Destination: 'AzureBlob'
storage: 'demostorage'
ContainerName: 'projecttemplates'
name: AzureFileCopy
Hay varias partes de esta tarea que deben adaptarse a su entorno. El SourcePath
indica la ubicación de los artefactos en relación con el archivo de canalización.
SourcePath: '<path-to-artifacts>'
En azureSubscription
, proporcione el nombre de la conexión de servicio que creó.
azureSubscription: '<your-connection-name>'
Para el almacenamiento y el nombre del contenedor, proporcione los nombres de la cuenta de almacenamiento y del contenedor que desea usar para almacenar los artefactos. La cuenta de almacenamiento debe existir.
storage: '<your-storage-account-name>'
ContainerName: '<container-name>'
Después de crear la tarea de copia de archivos, estará listo para agregar la tarea a fin de implementar la plantilla preconfigurada.
El siguiente CÓDIGO YAML muestra la tarea de implementación de plantillas de Azure Resource Manager:
- task: AzureResourceManagerTemplateDeployment@3
inputs:
deploymentScope: 'Resource Group'
azureResourceManagerConnection: 'copy-connection'
subscriptionId: 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e'
action: 'Create Or Update Resource Group'
resourceGroupName: 'demogroup'
location: 'West US'
templateLocation: 'URL of the file'
csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
deploymentMode: 'Incremental'
deploymentName: 'deploy1'
Hay varias partes de esta tarea para revisar con mayor detalle.
deploymentScope
: seleccione el ámbito de implementación en las opciones:Management Group
,Subscription
yResource Group
. Para más información sobre los ámbitos, consulte Ámbitos de implementación.azureResourceManagerConnection
: proporcione el nombre de la conexión de servicio que creó.subscriptionId
: proporcione el identificador de suscripción de destino. Esta propiedad solo se aplica al ámbito de implementación del grupo de recursos y al ámbito de implementación de la suscripción.resourceGroupName
ylocation
: proporcione el nombre y la ubicación del grupo de recursos en el que desea implementar. La tarea crea el grupo de recursos si no existe.resourceGroupName: '<resource-group-name>' location: '<location>'
csmFileLink
: proporcione el vínculo para la plantilla preconfigurada. Al establecer el valor, use variables devueltas desde la tarea de copia de archivos. En el ejemplo siguiente se vincula a una plantilla denominada mainTemplate.json. La carpeta denominada templates se incluye porque es donde la tarea de copia de archivos copió el archivo. En la canalización, proporcione la ruta de acceso a la plantilla y el nombre de la plantilla.csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
La canalización tiene el siguiente aspecto:
trigger:
- master
pool:
vmImage: 'windows-latest'
steps:
- task: AzureFileCopy@4
inputs:
SourcePath: 'templates'
azureSubscription: 'copy-connection'
Destination: 'AzureBlob'
storage: 'demostorage'
ContainerName: 'projecttemplates'
name: AzureFileCopy
- task: AzureResourceManagerTemplateDeployment@3
inputs:
deploymentScope: 'Resource Group'
azureResourceManagerConnection: 'copy-connection'
subscriptionId: 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e'
action: 'Create Or Update Resource Group'
resourceGroupName: 'demogroup'
location: 'West US'
templateLocation: 'URL of the file'
csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
deploymentMode: 'Incremental'
deploymentName: 'deploy1'
Al seleccionar Guardar, la canalización de compilación se ejecuta automáticamente. En el marco Trabajos , seleccione Trabajo para ver el estado del trabajo.
Pasos siguientes
- Para usar la operación what-if en una canalización, consulte Prueba de plantillas de Resouce Manager con What-If en una canalización.
- Para más información sobre el uso de plantillas de ARM con Acciones de GitHub, consulte Implementación de plantillas de Azure Resource Manager mediante Acciones de GitHub.