회원가입

Github Action workflow dispatch

Beany 2025-05-18

ChatGPT 요약

이 글은 GitHub Actions를 사용하여 self-hosted 방식이 아닌 일반 방법으로 workflow dispatch를 설정하는 과정을 담고 있습니다. SSH 키 발급, 공개키 서버 등록, GitHub Secrets에 비밀키 등록 과정을 설명하고 있으며, 배포를 위한 예시 yml 파일도 제공합니다. 이 과정은 개인 프로젝트 Qosmo-API를 대상으로 진행되며, 특정 시스템에서의 작업 흐름과 주의 사항도 포함되어 있습니다. 마지막으로 배포 프로세스의 완료 화면도 보여줍니다.

  이전 게시글에서는 self hosted 방식으로 Github Action workflow dispatch 는 설명드렸습니다.

 

이번에는 귀찮게 self hosted 가 아닌 github actions 만으로 설정하는 방법을 기록하려고 합니다.

workflow dispatch 가 무엇인지 궁금한 사람은 https://cwbeany.com/tip_dev/78 해당 링크에 가서 참고하세요~

 

이번에도 테스트는 제가 개인 프로젝트로 진행 중인 Qosmo-API를 대상으로 생성할 예정입니다.

https://github.com/cwadven/Qosmo-API/actions

 

선 작업이 필요합니다.

1. 로컬에서 ssh 키 발급 (비밀키, 공개키)

2. 접속할 서버에 ssh 공개키 등록

3. 발급된 비밀키를 이용해서 github action 을 돌릴 때 사용을 위한 Secret 등록

 

1. 로컬에서 ssh 키 발급 (비밀키, 공개키)


명령어는 간단합니다.

ssh-keygen -t ed25519 -C "github-action-deploy"

저는 그냥 전부 Enter 키 쳤습니다.

 

그러고 발급된 ssh 키 정보를 보기 위해 폴더를 들어갑니다.

cd ~/.ssh
ls

그러면 발급된 ssh 키 정보를 볼 수 있습니다.

 

이제 발급된 정보 id_ed25510 <-- 비밀키id_ed25510.pub <-- 공개키 를 가지고 작업을 해야합니다.
(저는 이름을 바꾸지 않았습니다.)

 

 

2. 접속할 서버에 ssh 공개키 등록


발급 받은 id_ed25510.pub 공개키를 가지고 서버에 등록하도록 하겠습니다.

우선 공개키의 내용을 접근해서 복사합니다.

cat id_ed25519.pub

 아래와 같은 내용이 나올 것입니다.

ssh-ed25519 XXXXXXXXXXX github-action-deploy

 

필자는 google cloud 를 이용해서 서버를 구동하고 있기 때문에 해당 서버에 들어가서 sudo su - 에 root 쪽에 해당 공개키를 등록하려고 합니다.

sudo su -
cd ~/.ssh
ls

 그러면 authorized_keys 라는 게 있습니다.

authorized_keys

여기 안에 복사한 공개키 id_ed25510.pub 정보를 넣도록 하겠습니다.

echo "ssh-ed25519 AAAAC3N... github-action-deploy" >> /root/.ssh/authorized_keys

 

 

3. 발급된 비밀키를 이용해서 github action 을 돌릴 때 사용을 위한 Secret 등록


이제 github action 을 돌릴 때, 비밀키로 배포하려는 서버에 접근하기 위해서 github action Secret 을 등록합시다.

 

등록 방법은 Settings 에 들어가서 Secrets and variables > Actions 로 들어갑니다.

 

New repository secret 을 클합니다.

 

이제 필요한 정보를 입력합니다.

  • SSH_PRIVATE_KEY: 로컬에서 만들었던 id_ed25510 비밀키 정보 입력

참고로 입력할때
-----BEGIN OPENSSH PRIVATE KEY-----
XXXX
-----END OPENSSH PRIVATE KEY-----
처럼 BEGIN 이랑 END 부분도 같이 들어가야합니다.

  • SERVER_HOST: Google Cloud 서버 ip 를 등록합니다.
  • SERVER_USER: Google Cloud 서버에 등록한 공개키를 사용하는 사용자입니다.
    • [ 방법 1 ] root
      • root 는 저와 같이 한 사람은 root 로 받을 수 있습니다.
    • [ 방법 2 ] 위에서 ssh-keygen -t ed25519 -C "github-action-deploy" 명령어로 만든 굵은 색 이름
      • 만약 root 가 아닌 방식을 한다면 Google Cloud 서버에서 수정 클릭 후, 
      • SSH 키 쪽에 가서 항목 추가 후, id_ed25510.pub 에 있는 정보를 작성합니다.

 

만약 아래 있는 제가 작성한 yml 파일을 쓰려면 TOKEN 이나 PRODUCTION_PROJECT_FILE_PATH  환경변수도 입력해주세요~! (yml 파일은 참고만 해주세요~)

TOKEN (github token) 발급은 아래 게시글 내용에 있습니다.

https://cwbeany.com/tip_dev/78

 

프로젝트 루트 디렉터리에 .github/workflows/deploy.yml 파일을 생성합니다.

 

deploy.yml 파일

name: Deploy to GitHub Runner

on:
  workflow_dispatch:
    inputs:
      deployment-type:
        type: choice
        description: 'Which server to deployment type'
        required: true
        default: 'production'
        options:
          - production

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

env:
  DJANGO_SETTINGS_MODULE: "config.settings.production"

jobs:
  checkout:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
      with:
        ref: ${{ github.ref }}
      env:
        GITHUB_TOKEN: ${{ secrets.TOKEN }}

  deploy:
    needs: checkout
    runs-on: ubuntu-latest
    steps:
    - name: Deploy to server
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.SERVER_HOST }}
        username: ${{ secrets.SERVER_USER }}
        key: ${{ secrets.SSH_PRIVATE_KEY }}
        script: |
          echo "🚀 Starting deployment process..."
          
          echo "📂 Changing to project directory..."
          cd ${{ secrets.PRODUCTION_PROJECT_FILE_PATH }}
          
          echo "🔄 Fetching latest changes from git..."
          git fetch origin
          
          echo "🔍 Checking out to ${{ github.ref }}..."
          git checkout ${{ github.ref }}
          
          echo "⬇️ Pulling latest changes..."
          git pull origin ${{ github.ref }}
          
          echo "🐍 Activating virtual environment..."
          . venv/bin/activate
          
          echo "📦 Installing/updating dependencies..."
          pip install -r requirements.txt
          
          echo "📝 Collecting static files..."
          python manage.py collectstatic --noinput
          
          echo "🗃️ Running database migrations..."
          python manage.py migrate --noinput
          
          echo "⏰ Updating cron jobs..."
          fab2 update-crontab
          
          echo "📅 Installing cron jobs..."
          cat command.cron | sudo crontab -
          sudo /etc/init.d/cron reload
          
          echo "🌿 Restarting Celery..."
          sudo /etc/init.d/celeryd restart
          
          echo "🌐 Restarting web servers..."
          sudo systemctl restart nginx
          sudo systemctl restart gunicorn
          
          echo "✅ Deployment completed successfully!" 

 

잘 완성 됐습니다~!

0 0
꿀팁-개발
개발 중에 발견한 다양한 꿀팁들을 모아 두어, 미래의 나 또는 다른 개발자가 이 글을 통해 유용한 정보를 얻을 수 있는 게시글들이 모여 있는 게시판. 효율적이고 창의적인 개발을 지원하는 소중한 자료들이 모여 있는 공간입니다.
Yesterday: 227
Today: 192