Implementación de archivos de Bicep mediante un flujo de trabajo
Ahora que ha creado un flujo de trabajo básico, está preparado para configurarlo con el fin de implementar los archivos de Bicep. En esta unidad, aprenderá a implementar código de Bicep desde un flujo de trabajo y a configurar los pasos de la implementación.
Nota:
Los comandos de esta unidad se muestran para ilustrar conceptos. No los ejecute todavía. Pronto va a practicar lo que aprenderá aquí.
Extracción del código del repositorio
Sus archivos de Bicep están almacenados en su repositorio de Git. En Acciones de GitHub, debe indicarle explícitamente al flujo de trabajo que extraiga los archivos del repositorio de Git. De lo contrario, el flujo de trabajo no tendrá acceso a los archivos. Este paso suele ser lo primero que hace el trabajo.
Para extraer el código del repositorio, puede usar la acción actions/checkout@v3
:
name: MyWorkflow
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
path: repo
Observe que el flujo de trabajo incluye la palabra clave uses
. La palabra clave indica que quiere usar una acción predefinida denominada actions/checkout
.
Al igual que los recursos de Bicep, las acciones siempre tienen versiones. En este caso, el flujo de trabajo utiliza la versión 3, por tanto, se anexa @v3
al nombre de la acción.
Cuando el flujo de trabajo incluye esta acción, el código se extrae del repositorio y se pone en el sistema de archivos del ejecutor. Para especificar la ruta de acceso donde deben almacenarse los archivos, utilice el parámetro path
.
Autentíquese en Azure
Al implementar un archivo de Bicep desde su propio equipo, se usa la CLI de Azure o Azure PowerShell. Para poder implementar el código, debe iniciar sesión en Azure. Normalmente, las herramientas le piden que escriba sus credenciales en un explorador. Una vez comprobadas las credenciales, se confirman los permisos para implementar recursos y ya puede usar las herramientas para implementar el archivo de Bicep.
Sugerencia
En este módulo, creará una entidad de identidad de carga de trabajo para que la use el flujo de trabajo. El módulo Autenticación del flujo de trabajo de implementación de Azure mediante identidades de carga de trabajo proporciona una explicación más detallada de las identidades de carga de trabajo, incluido cómo funcionan, así como cómo crearlas, asignarles roles y administrarlas.
La implementación con el flujo de trabajo también requiere autenticación. Dado que los flujos de trabajo se ejecutan sin intervención del usuario, deben autenticarse en Azure mediante una identidad de carga de trabajo. GitHub y Microsoft Entra ID funcionan conjuntamente para autenticar de forma segura el flujo de trabajo sin necesidad de credenciales.
Cuando el flujo de trabajo necesita comunicarse con Azure, un paso del flujo de trabajo inicia sesión en Azure mediante una identidad de carga de trabajo. Después, los pasos definidos en el flujo de trabajo utilizan la identidad del flujo de trabajo.
Debe asegurarse de que la identidad de carga de trabajo tenga los permisos necesarios para poder ejecutar los pasos de la implementación. Por ejemplo, es posible que tenga que asignar a la identidad de carga de trabajo el rol Colaborador para el grupo de recursos donde implementa los recursos.
Advertencia
Puede parecer más sencillo almacenar las credenciales del usuario en el archivo de YAML e iniciar sesión con el comando az login
. No debe usar nunca este método para autenticar el flujo de trabajo. Las credenciales de un archivo YAML se almacenan en texto sin formato. Cualquier persona que tenga acceso al repositorio puede ver y usar las credenciales. Aunque restrinja el acceso al repositorio de GitHub, cada vez que alguien clone el repositorio, el archivo de YAML que contiene las credenciales estará en el equipo de esa persona.
Inicio de sesión en Azure
Para que el flujo de trabajo pueda ejecutar comandos en el entorno de Azure, primero debe iniciar sesión. Hay una acción denominada azure/login
que controla el proceso de inicio de sesión. También debe conceder permiso para que el flujo de trabajo funcione con tokens de autenticación.
name: MyWorkflow
on: [workflow_dispatch]
permissions:
id-token: write
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
path: repo
- uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
La acción azure/login
requiere que proporcione tres fragmentos de información para usar una identidad de carga de trabajo: un identificador de aplicación de Microsoft Entra, el identificador de inquilino (directorio) de Microsoft Entra y el identificador de suscripción de Azure con el que desea trabajar.
Una vez que se ha ejecutado esta acción, el ejecutor se autentica y puede ejecutar instrucciones en el entorno de Azure.
Implementación del archivo de Bicep
Una vez que el flujo de trabajo inicie sesión en Azure, puede usar la identidad de carga de trabajo para ejecutar la implementación de Bicep. En Acciones de GitHub, use la acción azure/arm-deploy
para iniciar una implementación de Bicep.
Nota:
Hay otras maneras de implementar archivos de Bicep desde Acciones de GitHub. Por ejemplo, puede usar la acción azure/CLI
y, después, proporcionar los comandos de la CLI de Azure para ejecutar las implementaciones. Sin embargo, puesto que la tarea azure/arm-deploy
está diseñada específicamente para implementaciones, es lo que usará en este módulo.
Este es un ejemplo de cómo puede configurar un paso para usar la acción azure/arm-deploy
:
name: MyWorkflow
on: [workflow_dispatch]
permissions:
id-token: write
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
path: repo
- uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- uses: azure/arm-deploy@v1
with:
resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
template: ./deploy/main.bicep
parameters: environmentType=Test
La acción azure/arm-deploy
acepta varios parámetros, por ejemplo:
resourceGroupName
: Nombre del grupo de recursos en el que quiere implementar los recursos definidos en el archivo de Bicep.template
: La ruta de acceso al archivo de Bicep en el repositorio. La ruta de acceso es relativa a la raíz del repositorio.parameters
: Indica los valores de parámetro que proporcione en el momento de la implementación. En este ejemplo, se proporciona un valor para el parámetro environmentType.
Puesto que la acción azure/login
anterior llevó a cabo el inicio de sesión del flujo de trabajo en Azure, el paso azure/arm-deploy
se realiza en un ejecutador autenticado.
variables
A menudo, los flujos de trabajo contienen valores que desea reutilizar en varios lugares del archivo de flujo de trabajo. También puede almacenar estos valores al principio del archivo de flujo de trabajo para facilitar las referencias y poder cambiar los valores fácilmente. En este flujo de trabajo, las variables que defina se expondrán como variables de entorno. Para definir valores reutilizables, use variables.
Crear una variable
Puede crear variables en distintos niveles del archivo de flujo de trabajo. Pero, si quiere que estén disponibles para todo el archivo de flujo de trabajo, defínalas cerca del principio del archivo, justo debajo de la instrucción on
. Para definir las variables, use el parámetro env
:
env:
AZURE_RESOURCEGROUP_NAME: gh-actions
AZURE_WEBAPP_NAME: webapp-gh-actions
En el ejemplo anterior, se especifican dos variables de entorno.
Uso de una variable en el flujo de trabajo
Después de crear una variable, se usa una sintaxis especial para hacer referencia a ella en el archivo de YAML del flujo de trabajo, como se muestra a continuación:
${{ env.AZURE_RESOURCEGROUP_NAME }}
Variables de entorno predeterminadas
Acciones de GitHub utiliza también variables de entorno predeterminadas. Las variables de entorno predeterminadas contienen información predefinida que puede usar en el flujo de trabajo. Estas son algunas de las variables de entorno predeterminadas que puede usar en el flujo de trabajo:
github.sha
: identificador de la confirmación de Git que desencadenó la ejecución del flujo de trabajo.github.run_number
: número único para cada ejecución de un flujo de trabajo concreto en un repositorio. Este número comienza por 1 para la primera ejecución del flujo de trabajo y aumenta con cada nueva ejecución. Puede usar esta variable para dar nombre a la implementación en Azure y así poder realizar un seguimiento de la implementación hasta la ejecución específica del flujo de trabajo que la desencadenó.Nota:
En Acciones de GitHub, puede repetir una ejecución del flujo de trabajo. Cuando haga esto, el número de ejecución no cambiará, por lo que no debe usar la variable
github.run_number
para contar las veces que se ejecuta el flujo de trabajo.
Secretos
A veces, debe almacenar información secreta para que el flujo de trabajo la use, como una contraseña de base de datos o una clave de API. Los secretos de GitHub se usan para almacenar de forma segura la información que contiene credenciales o información confidencial. El flujo de trabajo puede acceder al valor del secreto.
Los secretos se crean en la configuración del repositorio de GitHub. Hay un secreto disponible para todos los flujos de trabajo del repositorio. En un módulo posterior, aprenderá sobre los entornos, que permiten restringir el uso de los secretos a implementaciones de un entorno específico.
Advertencia
De forma predeterminada, Acciones de GitHub ofusca los valores de variable secretos en los registros de los flujos de trabajo, pero también debe seguir buenas prácticas. Los pasos del flujo de trabajo tienen acceso a los valores de los secretos. Si el flujo de trabajo incluye un paso que no controla un secreto de forma segura, existe la posibilidad de que el valor del secreto se muestre en los registros del flujo de trabajo. Siempre debe revisar atentamente los cambios que se realicen en el archivo de definición de un flujo de trabajo para comprobar que los secretos no se traten incorrectamente.
Para crear secretos, use la interfaz web de GitHub. Para hacer referencia a un valor secreto en el flujo de trabajo, utilice la siguiente sintaxis:
${{ secrets.NAME_OF_THE_SECRET }}
Cuando se inicia el flujo de trabajo, el ejecutor que ejecuta los pasos de la implementación tiene acceso al valor secreto de GitHub descifrado. Acciones de GitHub está diseñado para no revelar valores secretos en los registros de los flujos de trabajo.
Sugerencia
Al igual que los parámetros de Bicep, no es necesario crear variables para todo. Es aconsejable crear variables para todo lo que pueda cambiar entre entornos, y secretos de GitHub para todo lo que sea secreto. Puesto que el flujo de trabajo siempre usará el mismo archivo de Bicep, no es necesario crear una variable para la ruta de acceso.
En este módulo, usará secretos de GitHub para almacenar la información que la tarea azure/login
necesita para iniciar sesión en Azure: la suscripción de Microsoft Entra y el identificador de inquilino y el identificador de registro de aplicación de la identidad de carga de trabajo.