Azure web service (소스코드) Git Action CI/CD

2021. 8. 19. 11:44Azure

azure web service에선 소스코드를 자동 배포하는 방법이 크게 두가지가 있다.

 

1. Git Action CI/CD 이용한 코드 자동 배포

2. docker을 이용한 자동 배포  : https://crispypotato.tistory.com/122

 

Azure web service (Docker Container, ACR) Git Action CI/CD

docker을 이용한 자동 배포이다. ACR : Azure Container Registry 약자 이고 docker hub와 같이 이미지 파일을 저장한다. 순서 : ACR 생성 => Wep App 생성, Wep App 환경변수 추가 => Git Setting - Secrets에 환..

crispypotato.tistory.com

 

1번을 이용하여 배포를 할 예정이다.

 

순서 :

web app 생성 => Wep App 환경변수 추가 => Git Setting - Secrets에 환경변수, Azure Web Service 자격 증명 추가 => yml파일 생성 => Azure Web Service에서 자동 배포를 실행

1. web app을 생성페이지에 가면 pulbish에 code로 배포를 할 것 인지, docker를 이용하여 배포 할 것 인지 선택하여 web app를 생성 한다.

  1. 우리는 소스 코드로 배포를 하기 때문에 code를 선택 생성하고 web app을 생성한다.

web app 생성

 

 

2. 오류없는 배포를 위해 환경변수와 서버 실행 명령어 설정한다. 

 

  1. Configuration - Application settings에서 세팅해주면된다. Deployment slot setting에 체크.
  2. General setting에서 Startup Command에 본인이 서버를 실행시키는 명령어를 작성 해 준다. 

ex) npm run start

 

* 만약 환경변수 설정을 하지않고 config.json형식으로 하면 민감한 데이터를 깃에 올려야하는 상황이 발생하는데 그런 상황은 비추천 하는 사항이기 때문에 .env 파일을 이용하여 환경 변수를 사용한 개발을 하는것이 좋을것 같다. 물론 .env파일도 깃에 올리면 안된다. 

Configuration
Deployment slot setting 체크
Startup Command

 

 

3. Git Action에 환경변수를 세팅하고 Azure Web Service 자격 증명을 설정한다.

  1. 배포하는 레포지토리가있는 Git에 들어가 Settings - Secrets에서 2번 처럼 사용하는 환경변수를 설정해 준다.
  2. 사용하는 Azure Web Service페이지로 이동하여  Overview - Get publish profile를 눌러 다운받는다 
  3. 다운받은 파일을 열고 복사하여 AZURE_WEBAPP_PUBLISH_PROFILE 이름으로 3-1처럼 환경변수를 설정해준다.

 * 참고 Azure Web Service 자격증명 방법 : https://docs.microsoft.com/en-us/azure/app-service/deploy-github-actions?tabs=applevel#generate-deployment-credentials

Git Action Secrets 생성 완료
web service Get publish profile 다운

 

 

4. yml 파일에서 CI/CD가 구현되는 방식

  1. CI에서 통합 테스트를 실행하고 에러가 있으면 빌드되지않고 에러를 보내주고 에러가 없다면 빌드파일을 생성한다.
  2. 빌드 파일이 생성되고 CD로 build파일이 업로드 하여 배포를 한다.  

* 중요 *  CI에서 빌드 파일을 만들고 CD로 업로드 할때 하나씩 보내게 되면 속도가 엄청나게 느려진다. 그러므로

빌드가 된 후 업로드 전에 zip으로 압축하여 CD에 압축파일을 하나만 업로드하고 CD에서 다시 압축을 풀어 자동배포를 해야한다.

 

 

5. yml파일 생성 ex) release.yml 

 # Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy
# More GitHub Actions for Azure: https://github.com/Azure/actions

name: Build and deploy Node.js app to Azure Web App 
# master branch인 상태에서 push가 발생 할 때   
on:
  push:
    branches:
      - master
  workflow_dispatch:

# 환경변수 설정
# PORT(서버 안에서 사용되는 변수명) : ${{secrets.PORT}} (깃에서 설정한 secrets 이름)
env:
    PORT: ${{secrets.PORT}}
    TEST: ${{secrets.TEST}}
jobs:
# CI 빌드
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Node.js version
      uses: actions/setup-node@v1
      with:
        node-version: '14.x'
    - name: npm install
      run: |
        npm install
# node_modules 설치 후 zip으로 압축
    - name: zip artifacts
      run: |
        zip -r ./build.zip ./*

# deploy로  zip 파일 업로드
# retention-days = artifacts에 만료 기간 설정 기본 90일
# website-release = 빌드된 artifacts의 이름
    - name: Upload artifact for deployment job
      uses: actions/upload-artifact@v2
      with:
        name: website-release
        path: ./build.zip
        retention-days: 1
# CD 배포
  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
# 빌드된 zip 파일 다운로드
# 빌드된 artifacts 이름이 같아야함 (website-release)
    steps:
    - name: Download artifact from build job
      uses: actions/download-artifact@v2
      with:
        name: website-release
# 압축 build 폴더에 해제
    - name: unzip
      run: | 
        pwd
        ls -al
        unzip ./build.zip -d ./build
# app-name = azure web service 이름
# publish-profile = azure web service 자격 증명
# package = azure web service에 업로드할 폴더
    - name: 'Deploy to Azure Web App'
      id: deploy-to-webapp
      uses: azure/webapps-deploy@v2
      with:
        app-name: 'website'
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        package: ./build

를 작성하고 Git에 push를 한다.

* 중요 * 기본적으로 git 저장소가 600mb 정도 한정되어있다 그래서 artifacts가 계속 쌓이면 저장소가 꽉차서 오류가 발생하니 만료기간을 설정 해주어야 한다.

artifacts 저장 오류 발생 : https://crispypotato.tistory.com/118

 

 

6. Azure Web Service페이지에 가서 자동 배포를 실행 시켜준다.

  1. Delployment Center에 배포하려는 레포지토리와 브런치를 설정 해준다. yml파일은 생성하지않고 그대로 사용하고 저장 하면 된다.  

 

7. yml 설정한 이벤트가 발생하면 Git - Actions에서  확인 할 수 있다.

 

참고 :  https://docs.microsoft.com/en-us/azure/app-service/deploy-github-actions?tabs=applevel#generate-deployment-credentials

728x90
반응형