Infra/DevOps

How to deploy service to ECS of Alibaba Cloud.(use github actions)

하우아유두잉 2023. 6. 26. 19:16

 

 

중국 알리바바 클라우드  ECS에 프로젝트를 빌드&배포 하는 cicd github actions를 작성했다.

 

기본적으로 배포는 tag로 버전 관리를 했고,

tag push를 trigger로 활용했다.

 

도커 이미지는 기본적으로 ACR에 push를 하고, ECS에서 가져온다.

알리바바 클라우드는 aws와 네이밍이 조금 다르다,
EC2 = ECS

ECR = ACR

 

기본적으로 ECS에 도커가 설치돼 있어야하고, docker-compose.yaml가 저장되는 위치에 .env 파일을 미리 업로드해 놔야한다.

 

빌브와 배포는 아래 yaml 코드를 활용하면 된다.

 

그리고 아래 글을 먼저 참고하면 이해가 쉽겠다.

2023.06.14 - [back-end] - github actions을 사용해 ec2에 docker 서버 빌드배포하기(ci/cd)

name: build and deploy

on:
  push:
    tags: 'releases-v[0-9]+.[0-9]+.[0-9]+'

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18.16.0]
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to ACR
        uses: aliyun/acr-login@v1
        with:
          login-server: ***.[REGION].aliyuncs.com
          username: "${{ secrets.ALIYUN_REGISTRY_USERNAME }}"
          password: "${{ secrets.ALIYUN_REGISTRY_PASSWORD }}"
          region-id: "${{ secrets.ALIYUN_REGION_ID }}"

      - name: Build and push image
        env:
          IMAGE_TAG: ${{ github.sha }}
        run: |
          docker build -t ***.[REGION].aliyuncs.com/[REGISTRY_NAME]/demo:$IMAGE_TAG .
          docker push ***.[REGION].aliyuncs.com/[REGISTRY_NAME]/demo:$IMAGE_TAG
    outputs:
      IMAGE_TAG: ${{ github.sha }}

  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: ssh connect & production
        uses: appleboy/ssh-action@v0.1.10
        with:
          host: ${{ secrets.ALIYUN_ECS_HOST }}
          username: ${{ secrets.ALIYUN_ECS_USERNAME }}
          password: ${{ secrets.ALIYUN_ECS_PASSWORD }}
          port: ${{ secrets.PORT }}
          script: |
            docker login --username ${{ secrets.ALIYUN_REGISTRY_USERNAME }} --password ${{ secrets.ALIYUN_REGISTRY_PASSWORD }} ***.[REGION].aliyuncs.com

            cat > docker-compose.yaml << EOF
            version: "3"

            services:
              app:
                env_file:
                - .env	# 서버에 미리 둬야함.
                container_name: dmeo
                restart: always
                image: ***.[REGION].aliyuncs.com/[REGISTRY_NAME]/demo::${{ needs.build.outputs.IMAGE_TAG }}
                ports:
                  - "80:80"
            EOF

            docker-compose up -d

 

 

 

 

 

 

ACR : https://github.com/aliyun/acr-login