Development/Git

[Github Action] Github Action을 통한 자동 배포 적용하기 (Git 인증 과정 추가)

Ahn Paul 2024. 2. 26. 15:16

 

https://obeyjy.tistory.com/entry/Github-Action-Github-Action%EC%9D%84-%ED%86%B5%ED%95%9C-%EC%9E%90%EB%8F%99-%EB%B0%B0%ED%8F%AC-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0

 

[Github Action] Github Action을 통한 자동 배포 적용하기 (React + NGINX)

프로젝트 중 React를 통해 구현된 프로젝트가 있고, 해당 프로젝트는 NGINX를 통하여 배포가 되고 있다. React 소스코드가 수정되면 새로운 버전을 서버에 반영하기 위해서는 아래의 과정을 거쳐야

obeyjy.tistory.com


 

이전 글에서 Github action을 통해서 Push 이벤트가 발생되었을 경우 자동으로 서버에 배포할 수 있도록 설정을 진행했다.

 

위 과정에서 한 가지 문제가 있었다. 기본적으로 원격 서버에 접속해서 기존 저장소의 내용을 Pull 할 때, 권한 인증을 수행해야 한다. 인증 부분을 수행하지 않으면 workflow가 실행될 때 Pull을 수행하는 부분에서 문제가 발생하기 때문에 의도한 대로 동작하지 않게 된다.

 

보통 인증은 시스템 전역에 인증 관련된 것을 세팅하거나, CLI 단에서 추가적인 옵션을 지정하여 처리하거나, Credential Helper를 통하여 진행할 수 있는데 이번에는 CLI 단에서 추가적으로 정보를 지정하여 처리하도록 했다.

 

name: Deploy to AWS EC2

on:
  push:
    branches:
      - master

jobs:
  deploy:
    runs-on: ubuntu-latest

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

    - name: Install SSH key
      uses: webfactory/ssh-agent@v0.5.3
      with:
        ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}

    - name: Deploy to EC2
      run: |
          ssh -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} <<EOF
            cd ${{ secrets.PROJECT_PATH }}
            if [ $? -ne 0 ]; then
              echo "Directory change failed"
              exit 1
            fi
            git pull https://${{ secrets.GIT_USERNAME }}:${{ secrets.GIT_PASSWORD }}@github.com/repo.git
            if [ $? -ne 0 ]; then
              echo "Git pull failed"
              exit 1
            fi
            npm install
            if [ $? -ne 0 ]; then
              echo "NPM install failed"
              exit 1
            fi
            npm run build
            if [ $? -ne 0 ]; then
              echo "Build failed"
              exit 1
            fi
            sudo service nginx restart
            if [ $? -ne 0 ]; then
              echo "Nginx restart failed"
              exit 1
            fi
          EOF

 

위 부분에서 이전과 달라진 것은 secrets의 GIT_USERNAME과 GIT_PASSWORD가 추가된 것이다. 해당 부분을 추가하면 Pull 명령을 수행할 때 인증에 대한 부분은 처리된 것으로 입력을 요구하지 않게 된다.