Home An introduction to GitHub Actions
Post
Cancel

An introduction to GitHub Actions

Desktop View Photo by Mike Benna on Unsplash

GitHub Actions is free to use for standard GitHub-hosted runners in public repositories.

Concepts

  • Each job runs-on in a fresh virtual environment
  • Each job consists of steps
  • Each step uses another prebuilt action or can run some commands
  • In an action file, each job runs in parallel by default. This can be prevented by using the needs param to refer to another job that needs to be completed first.
  • Create secrets in your Github repository to pass sensitive values to the action file. You can put them in Repository secrets in Github console.

Example: Push to ECR & revise ECS Task Definition

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
on:
  push:
    branches:
      - main

name: Push image to ECR and revise ECS Task Definition

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: $
          aws-secret-access-key: $
          aws-region: ca-central-1

      - name: Login to Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v1

      - name: Build, tag, and push image to Amazon ECR
        id: build-image
        env:
          ECR_REGISTRY: $
          ECR_REPOSITORY: my-api-image
          IMAGE_TAG: $
        run: |
          docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG -f ./backend/Dockerfile ./backend
          docker tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:latest
          docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
          docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest
          echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT
      
      - name: Download task definition
        run: |
          aws ecs describe-task-definition \
          --task-definition MyAPITaskDef \
          --query taskDefinition > task-definition.json

      - name: Fill in the new image ID in the Amazon ECS task definition
        id: task-def
        uses: aws-actions/amazon-ecs-render-task-definition@v1
        with:
          task-definition: task-definition.json
          container-name: MyAPIContainer
          image: $

      - name: Deploy Amazon ECS task definition
        uses: aws-actions/amazon-ecs-deploy-task-definition@v1
        with:
          task-definition: $
          service: MyAPIService
          cluster: MyAPICluster
          wait-for-service-stability: true

This post is licensed under CC BY-NC 4.0 by the author.