You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
4.3 KiB

  1. # This workflow will build and push a new container image to Amazon ECR,
  2. # and then will deploy a new task definition to Amazon ECS, when there is a push to the master branch.
  3. #
  4. # To use this workflow, you will need to complete the following set-up steps:
  5. #
  6. # 1. Create an ECR repository to store your images.
  7. # For example: `aws ecr create-repository --repository-name my-ecr-repo --region us-east-2`.
  8. # Replace the value of the `ECR_REPOSITORY` environment variable in the workflow below with your repository's name.
  9. # Replace the value of the `AWS_REGION` environment variable in the workflow below with your repository's region.
  10. #
  11. # 2. Create an ECS task definition, an ECS cluster, and an ECS service.
  12. # For example, follow the Getting Started guide on the ECS console:
  13. # https://us-east-2.console.aws.amazon.com/ecs/home?region=us-east-2#/firstRun
  14. # Replace the value of the `ECS_SERVICE` environment variable in the workflow below with the name you set for the Amazon ECS service.
  15. # Replace the value of the `ECS_CLUSTER` environment variable in the workflow below with the name you set for the cluster.
  16. #
  17. # 3. Store your ECS task definition as a JSON file in your repository.
  18. # The format should follow the output of `aws ecs register-task-definition --generate-cli-skeleton`.
  19. # Replace the value of the `ECS_TASK_DEFINITION` environment variable in the workflow below with the path to the JSON file.
  20. # Replace the value of the `CONTAINER_NAME` environment variable in the workflow below with the name of the container
  21. # in the `containerDefinitions` section of the task definition.
  22. #
  23. # 4. Store an IAM user access key in GitHub Actions secrets named `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`.
  24. # See the documentation for each action used below for the recommended IAM policies for this IAM user,
  25. # and best practices on handling the access key credentials.
  26. name: Deploy to Amazon ECS
  27. on:
  28. push:
  29. branches:
  30. - master
  31. env:
  32. AWS_REGION: MY_AWS_REGION # set this to your preferred AWS region, e.g. us-west-1
  33. ECR_REPOSITORY: MY_ECR_REPOSITORY # set this to your Amazon ECR repository name
  34. ECS_SERVICE: MY_ECS_SERVICE # set this to your Amazon ECS service name
  35. ECS_CLUSTER: MY_ECS_CLUSTER # set this to your Amazon ECS cluster name
  36. ECS_TASK_DEFINITION: MY_ECS_TASK_DEFINITION # set this to the path to your Amazon ECS task definition
  37. # file, e.g. .aws/task-definition.json
  38. CONTAINER_NAME: MY_CONTAINER_NAME # set this to the name of the container in the
  39. # containerDefinitions section of your task definition
  40. jobs:
  41. deploy:
  42. name: Deploy
  43. runs-on: ubuntu-latest
  44. environment: production
  45. steps:
  46. - name: Checkout
  47. uses: actions/checkout@v2
  48. - name: Configure AWS credentials
  49. uses: aws-actions/configure-aws-credentials@v1
  50. with:
  51. aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
  52. aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
  53. aws-region: ${{ env.AWS_REGION }}
  54. - name: Login to Amazon ECR
  55. id: login-ecr
  56. uses: aws-actions/amazon-ecr-login@v1
  57. - name: Build, tag, and push image to Amazon ECR
  58. id: build-image
  59. env:
  60. ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
  61. IMAGE_TAG: ${{ github.sha }}
  62. run: |
  63. # Build a docker container and
  64. # push it to ECR so that it can
  65. # be deployed to ECS.
  66. docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
  67. docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
  68. echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"
  69. - name: Fill in the new image ID in the Amazon ECS task definition
  70. id: task-def
  71. uses: aws-actions/amazon-ecs-render-task-definition@v1
  72. with:
  73. task-definition: ${{ env.ECS_TASK_DEFINITION }}
  74. container-name: ${{ env.CONTAINER_NAME }}
  75. image: ${{ steps.build-image.outputs.image }}
  76. - name: Deploy Amazon ECS task definition
  77. uses: aws-actions/amazon-ecs-deploy-task-definition@v1
  78. with:
  79. task-definition: ${{ steps.task-def.outputs.task-definition }}
  80. service: ${{ env.ECS_SERVICE }}
  81. cluster: ${{ env.ECS_CLUSTER }}
  82. wait-for-service-stability: true