Implementación de un contenedor personalizado en App Service con Acciones de GitHub
Acciones de GitHub le ofrece la flexibilidad de compilar un flujo de trabajo de desarrollo de software automatizado. Gracias a la acción de Azure Web Deploy, puede automatizar el flujo de trabajo para implementar contenedores personalizados en App Service con Acciones de GitHub.
Un archivo YAML (.yml) define un flujo de trabajo en la ruta de acceso /.github/workflows/
de su repositorio. En esta definición se incluyen los diversos pasos y parámetros que se incluyen en el flujo de trabajo.
Para un flujo de trabajo de contenedor de Azure App Service, el archivo tiene tres secciones:
Sección | Tareas |
---|---|
Autenticación | 1. Recupere una entidad de servicio o un perfil de publicación. 2. Cree un secreto de GitHub. |
Compilar | 1. Cree el entorno. 2. Compile la imagen de contenedor. |
Implementación | 1. Implemente la imagen de contenedor. |
Requisitos previos
- Una cuenta de Azure con una suscripción activa. Cree su cuenta de forma gratuita.
- Una cuenta de GitHub. Si no tiene ninguna, regístrese gratis. Debe tener código en un repositorio de GitHub para implementar en Azure App Service.
- Un registro de contenedor en funcionamiento y la aplicación de Azure App Service para contenedores. En este ejemplo, se utiliza Azure Container Registry. Asegúrese de completar toda la implementación en Azure App Service para contenedores. A diferencia de las aplicaciones web normales, las aplicaciones web para contenedores no tienen una página de aterrizaje predeterminada. Publique el contenedor para tener un ejemplo práctico.
Genere las credenciales de implementación.
La manera recomendada de autenticarse con Azure App Services para las Acciones de GitHub es con un perfil de publicación. También puede autenticarse con Open ID Connect o una entidad de servicio, pero el proceso requiere más pasos.
Guarde la credencial de perfil de publicación o la entidad de servicio como secreto de GitHub para autenticarse con Azure. Tendrá acceso al secreto en el flujo de trabajo.
Un perfil de publicación es una credencial de nivel de aplicación. Configure el perfil de publicación como secreto de GitHub.
En Azure Portal, vaya a la aplicación de App Service.
En la página de Información general, seleccione Obtener perfil de publicación.
Nota
A partir de octubre de 2020, las aplicaciones web de Linux deberán tener la opción de configuración de la aplicación
WEBSITE_WEBDEPLOY_USE_SCM
establecida entrue
antes de descargar el archivo. Este paso dejará de ser un requisito en el futuro. Consulte Configurar una aplicación de App Service en Azure Portal para aprender a configurar las opciones de aplicaciones web comunes.Guarde el archivo descargado. Usará el contenido del archivo para crear un secreto de GitHub.
Configuración del secreto de GitHub para la autenticación
En GitHub, examine el repositorio. Seleccione Configuración > Seguridad > Secretos y variables > Acciones > Nuevo secreto del repositorio.
Para usar las credenciales de nivel de aplicación, pegue el contenido del archivo del perfil de publicación descargado en el campo de valor del secreto. Asigne al secreto el siguiente nombre: AZURE_WEBAPP_PUBLISH_PROFILE
.
Al configurar el flujo de trabajo de GitHub, use AZURE_WEBAPP_PUBLISH_PROFILE
en la acción de implementación de aplicación web de Azure. Por ejemplo:
- uses: azure/webapps-deploy@v2
with:
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
Configuración de secretos de GitHub para el registro
Defina los secretos que se usarán con la acción de inicio de sesión de Docker. En el ejemplo de este documento se utiliza Azure Container Registry para el registro del contenedor.
Vaya al contenedor en Azure Portal o Docker y copie el nombre de usuario y la contraseña. Puede encontrar el nombre de usuario y la contraseña de Azure Container Registry en Azure Portal en Configuración>Claves de acceso para el registro.
Defina un nuevo secreto para el nombre de usuario del registro llamado
REGISTRY_USERNAME
.Defina un nuevo secreto para la contraseña del registro llamada
REGISTRY_PASSWORD
.
Compilación de la imagen de contenedor
En el ejemplo siguiente se muestra parte del flujo de trabajo que compila una imagen de Docker de Node.js. Use el inicio de sesión de Docker en un registro de contenedor privado. En este ejemplo se usa Azure Container Registry, pero la misma acción funciona para otros registros.
name: Linux Container Node Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
También puede usar el inicio de sesión de Docker para iniciar sesión en varios registros de contenedor al mismo tiempo. Este ejemplo incluye dos nuevos secretos de GitHub para la autenticación con docker.io. En el ejemplo se da por supuesto que hay un Dockerfile en el nivel raíz del registro.
name: Linux Container Node Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- uses: azure/docker-login@v1
with:
login-server: index.docker.io
username: ${{ secrets.DOCKERIO_USERNAME }}
password: ${{ secrets.DOCKERIO_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
Implementación en un contenedor de App Service
Para implementar la imagen en un contenedor personalizado en App Service, use la acción azure/webapps-deploy@v2
. Esta acción tiene siete parámetros:
Parámetro | Explicación |
---|---|
app-name | (Obligatorio) Especifique el nombre de la aplicación de App Service. |
publish-profile | (Opcional) Se aplica a Web Apps (Windows y Linux) y a los contenedores de aplicaciones web (Linux). No se admite el escenario de varios contenedores. Publique el contenido del archivo de perfil (*.publishsettings) con secretos de Web Deploy. |
slot-name | (Opcional) Especifique un espacio existente que no sea el de producción. |
package | (Opcional) Solo se aplica a la aplicación web: ruta de acceso al paquete o la carpeta. *.zip, *.war, *.jar o una carpeta para implementar |
images | (Necesario) Solo se aplica a contenedores de aplicaciones web: especifique el nombre completo de las imágenes de contenedor. Por ejemplo, 'myregistry.azurecr.io/nginx:latest' o 'python:3.7.2-alpine/'. En el caso de una aplicación de varios contenedores, se pueden especificar varios nombres de imagen de contenedor (separados por varias líneas). |
configuration-file | (Opcional) Solo se aplica a contenedores de aplicaciones web: ruta de acceso del archivo Docker Compose. Debe ser una ruta de acceso completa o relativa al directorio de trabajo predeterminado. Se requiere para las aplicaciones de varios contenedores. |
startup-command | (Opcional) Escriba el comando de inicio. Por ejemplo, dotnet run o dotnet filename.dll |
name: Linux Container Node Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
- uses: azure/webapps-deploy@v2
with:
app-name: 'myapp'
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
images: 'mycontainer.azurecr.io/myapp:${{ github.sha }}'
Pasos siguientes
Puede encontrar nuestro conjunto de acciones agrupadas en distintos repositorios de GitHub, cada uno con documentación y ejemplos que le ayudarán a usar GitHub con CI/CD y a implementar sus aplicaciones en Azure.