Compartir vía


Implementación de un contenedor personalizado en App Service mediante Acciones de GitHub

Puede usar Acciones de GitHub para crear un flujo de trabajo de desarrollo de software automatizado. Puede usar la acción Azure Web Deploy para automatizar el flujo de trabajo e implementar contenedores personalizados en Azure App Service.

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 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

Genere las credenciales de implementación.

Se recomienda autenticarse con Azure App Services para Acciones de GitHub mediante OpenID Connect. También puede autenticarse con una entidad de servicio o un perfil de publicación.

Para autenticarse con Azure, guarde la credencial del perfil de publicación o la entidad de servicio como secreto de GitHub. Accede al secreto de tu 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.

  1. Vaya a App Service en Azure Portal.

  2. En el panel Información general , seleccione Obtener perfil de publicación.

    Nota:

    A partir de octubre de 2020, los usuarios deben establecer la configuración de la aplicación para aplicaciones WEBSITE_WEBDEPLOY_USE_SCM web Linux en trueantes de descargar el archivo. Para obtener información sobre cómo configurar las opciones comunes de la aplicación web, vaya a Configuración de una aplicación de App Service en Azure Portal.

  3. Guarde el archivo descargado. Use 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 de 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 el AZURE_WEBAPP_PUBLISH_PROFILE secreto en la acción Desplegar 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 artículo se usa Azure Container Registry para el registro de contenedor.

  1. 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.

  2. Defina un nuevo secreto para el nombre de usuario del registro llamado REGISTRY_USERNAME.

  3. Defina un nuevo secreto para la contraseña del registro llamada REGISTRY_PASSWORD.

Compilación de la imagen del contenedor

En el ejemplo siguiente se muestra parte del flujo de trabajo que crea una imagen de Docker de Node.js. Usa Docker Login para iniciar sesión 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 }}     

En el ejemplo siguiente, se muestra parte del flujo de trabajo que compila una imagen de Docker de Windows. Utilice Docker Login para acceder a un registro de contenedor privado. En este ejemplo se usa Azure Container Registry, pero la misma acción funciona para otros registros.

name: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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) Nombre de la aplicación de App Service.
publish-profile (Opcional) Se usa con aplicaciones web (Windows y Linux) y 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) Introduzca un espacio existente que no sea el espacio de producción.
package (Opcional) Solo se usa con aplicaciones web: ruta de acceso al paquete o carpeta. \*.zip, \*.war, \*.jaro una carpeta que se va a implementar.
images (Obligatorio) Solo se usa con contenedores de aplicaciones web: especifique el nombre completo de la imagen de contenedor. Por ejemplo, myregistry.azurecr.io/nginx:latest o python:3.12.12-alpine/. Para una aplicación de varios contenedores, se pueden proporcionar varios nombres de imagen de contenedor (separados por varias líneas).
configuration-file (Opcional) Solo se usa con contenedores de aplicaciones web: ruta 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 }}'
name: Windows_Container_Workflow

on: [push]

jobs:
  build:
    runs-on: windows-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 }}'

Puede encontrar nuestro conjunto de acciones agrupadas en repositorios diferentes en GitHub. Cada repositorio contiene documentación y ejemplos que le ayudarán a usar GitHub para CI/CD e implementar las aplicaciones en Azure.