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