Nota: GitHub Actions estuvo disponible para GitHub Enterprise Server 2.22 como un beta limitado. El beta terminó. GitHub Actions está ahora disponible habitualmente en GitHub Enterprise Server 3.0 o superior. Para obtener más información, consulta la sección de notas de lanzamiento para GitHub Enterprise Server 3.0.
- Para obtener más información acerca de cómo mejorar a GitHub Enterprise Server 3.0 o superior, consulta la sección "Mejorar a GitHub Enterprise Server".
- Para obtener más información acerca de configurar las GitHub Actions después de tu mejora, consulta la documentación de GitHub Enterprise Server 3.0.
Nota: Los ejecutores hospedados en GitHub no son compatibles con GitHub Enterprise Server actualmente. Puedes encontrar más información sobre el soporte que se tiene planeado en el futuro en el Itinerario público de GitHub.
Introducción
This guide explains how to use GitHub Actions to build a containerized application, push it to Amazon Elastic Container Registry (ECR), and deploy it to Amazon Elastic Container Service (ECS) when a release is created.
En cada lanzamiento nuevo de tu repositorio de GitHub, el flujo de trabajo de GitHub Actions crea y sube una imagen de contenedor nueva en Amazon ECR, y luego despliega una tarea nueva de definición en Amazon ECS.
Prerrequisitos
Antes de que crees tu flujo de trabajo de GitHub Actions, primero necesitas completar los siguientes pasos de configuración para Amazon ECR y ECS:
-
Crea un repositorio de Amazon ECR para almacenar tus imágenes.
Por ejemplo, utiliza el CLI de AWS:
Shell aws ecr create-repository \ --repository-name MY_ECR_REPOSITORY \ --region MY_AWS_REGION
Asegúrate de que utilizas el mismo nombre de repositorio para amazon ECR (que se representa aquí como
MY_ECR_REPOSITORY
) para la variableECR_REPOSITORY
en el flujo de trabajo a continuación.Asegúrate de que utilizas el mismo valor de región de AWS para la variable
AWS_REGION
(que se representa aquí comoMY_AWS_REGION
) en el flujo de trabajo a continuación. -
Crea un servicio, agrupamiento y definición de tarea de Amazon ECS.
Para obtener más detalles, sigue la sección Asistente de inicio para la consola de Amazon ECS, o la Guía de inicio en la documentación de Amazon ECS.
Asegúrate de anotar los nombres que configuraste para el servicio y agrupamiento de Amazon ECS y utilízalos para las variables
ECS_SERVICE
yECS_CLUSTER
en el flujo de trabajo a continuación. -
Almacena tu definición de tarea de Amazon ECS como un archivo JSON en tu repositorio de GitHub.
El formato del archivo debe ser el mismo que la salida que genera:
Shell aws ecs register-task-definition --generate-cli-skeleton
Asegúrate de configurar la variable
ECS_TASK_DEFINITION
en el flujo de trabajo a continuación como la ruta al archivo JSON.Asegúrate de configurar la variable
CONTAINER_NAME
en el flujo de trabajo a continuación como el nombre de contenedor en la seccióncontainerDefinitions
de la definición de tarea. -
Crea los secretos de GitHub Actions con los nombres
AWS_ACCESS_KEY_ID
yAWS_SECRET_ACCESS_KEY
para almacenar los valores de tu llave de acceso de Amazon IAM.Para obtener más información sobre cómo crear los secretos para GitHub Actions, consulta la sección "Secretos cifrados".
Consulta la documentación para cada acción que se utiliza a continuación para las políticas recomendadas de IAM para el usuario de IAM y los métodos para manejar las credenciales de las llaves de acceso.
-
Optionally, configure a deployment environment. Environments are used to describe a general deployment target like
production
,staging
, ordevelopment
. When a GitHub Actions workflow deploys to an environment, the environment is displayed on the main page of the repository. You can use environments to require approval for a job to proceed, restrict which branches can trigger a workflow, or limit access to secrets. For more information about creating environments, see "Using environments for deployment."
Creating the workflow
Once you've completed the prerequisites, you can proceed with creating the workflow.
El siguiente flujo de trabajo de ejemplo demuestra cómo construir una imagen de contenedor y subirla a Amazon ECR. Posteriormente, ésta actualiza la definición de la tarea con una ID de imagen nueva y despliega la definición de tarea a Amazon ECS.
Asegúrate de que proporcionas tus propios valores para todas las variables en la clave env
del flujo de trabajo.
If you configured a deployment environment, change the value of environment
to be the name of your environment. If you did not configure an environment, delete the environment
key.
# This workflow uses actions that are not certified by GitHub.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# documentación.
name: Deploy to Amazon ECS
on:
release:
types: [ created ]
env:
AWS_REGION: MY_AWS_REGION # set this to your preferred AWS region, e.g. us-west-1
ECR_REPOSITORY: MY_ECR_REPOSITORY # set this to your Amazon ECR repository name
ECS_SERVICE: MY_ECS_SERVICE # set this to your Amazon ECS service name
ECS_CLUSTER: MY_ECS_CLUSTER # set this to your Amazon ECS cluster name
ECS_TASK_DEFINITION: MY_ECS_TASK_DEFINITION # set this to the path to your Amazon ECS task definition
# file, e.g. .aws/task-definition.json
CONTAINER_NAME: MY_CONTAINER_NAME # set this to the name of the container in the
# containerDefinitions section of your task definition
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@13d241b293754004c80624b5567555c4a39ffbe3
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@aaf69d68aa3fb14c1d5a6be9ac61fe15b48453a2
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ github.sha }}
run: |
# Build a docker container and
# push it to ECR so that it can
# be deployed to ECS.
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@97587c9d45a4930bf0e3da8dd2feb2a463cf4a3a
with:
task-definition: ${{ env.ECS_TASK_DEFINITION }}
container-name: ${{ env.CONTAINER_NAME }}
image: ${{ steps.build-image.outputs.image }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@de0132cf8cdedb79975c6d42b77eb7ea193cf28e
with:
task-definition: ${{ steps.task-def.outputs.task-definition }}
service: ${{ env.ECS_SERVICE }}
cluster: ${{ env.ECS_CLUSTER }}
wait-for-service-stability: true
Recursos adicionales
For the original starter workflow, see aws.yml
in the GitHub Actions starter-workflows
repository.
Para obtener más información sobre los servicios que se utilizan en estos ejemplos, consulta la siguiente documentación:
- "Mejores prácticas de seguridad de IAM" en la documentación de AWS.
- Acción oficial de "Configurar las credenciales de AWS" de AWS.
- Acción oficial de "Inicio de sesión" de Amazon ECR de AWS.
- Acción oficial de "Definición de tarea de renderización" de Amazon ECSde AWS.
- Acción oficial de "Desplegar definición de tarea" de Amazon ECS de AWS.