ABOUT ME

-

Total
-
  • Github Action 로컬에서 돌리기 (running GA locally)
    컴퓨터 2023. 11. 5. 19:02
    728x90
    반응형

    Github Action을 만들고 업로드 전에 로컬에서 잘 작동하는지 확인하고 싶었다.

     

    act라는 툴이 Docker를 이용해서 로컬에서 GA를 돌릴 수 있게 해 준다.

     

    GitHub - nektos/act: Run your GitHub Actions locally 🚀

    Run your GitHub Actions locally 🚀. Contribute to nektos/act development by creating an account on GitHub.

    github.com

     

    Docker를 설치했다면 

     

    로컬 github project에 .githhub/workflows/이름.yml 을 만들어준다.

    ${{ secrets.API_ADDRESS }} 처럼 비밀 값을 이용하기 위해 .env 파일을 만들어서 KEY=VALUE로 만들어준다.

     

    이 예제에서는 Swagger API 문서를 html로 만들어서 api-ref 라는 폴더에 매주 월요일에 업로드하는 것이다.

     

    1. 설치

    있는 툴로 선택해서 깔아준다.

     

    winget install nektos.act
    
    scoop install act
    
    choco install act-cli

     

    2. 예제 yaml

     

    main 브랜치에 있는 GA 밖에 dispatch를 못해서 일단 workflow_dispatch로 강제로 실행할 수 있음을 알려준다.

     

    my 라는 브랜치에 있는 폴더로 작업하고 업로드하고 싶어서 checkout ref에 브랜치를 지정했다.

     

    그리고 Spring Boot openapi json을 받기 위해 curl이 필요한데 안 깔려있길래 깔아줬다.

    ( if: ${{ env.ACT }} 를 통해 act에서 실행할 때만 실행하라고 지정한다)

     

    name: Generate API Documentation
    
    on:
      schedule:
        # Runs at 00:00 every Monday
        - cron: '0 0 * * 1'
      workflow_dispatch:
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v4
          with:
          ref: my  # Specify the branch here
        
        - name: Install curl (for nektos/act local CI testing)
          if: ${{ env.ACT }}
          run: apt-get update && apt-get install build-essential curl pkg-config openssl -y
    
        - name: Set up Node.js
          uses: actions/setup-node@v3
          with:
            node-version: '18'
    
        - name: Generate Swagger JSON
          run: curl -o openapi.json ${{ secrets.API_ADDRESS }}
    
        - name: Generate Swagger HTML
          run: npx @redocly/cli@latest build-docs openapi.json -o ./java/api-ref/index.html
    
        - name: Prepare documentation file
          run: mv ./java/api-ref/index.html ./java/api-ref/API-$(date +\%Y\%m\%d).html
    
        - name: List contents of api-ref directory
          if: ${{ env.ACT }}
          run: ls -l ./java/api-ref/
          
        - name: Commit and Push documentation
          if: ${{ !env.ACT }}
          run: |
            git config --local user.email "action@github.com"
            git config --local user.name "GitHub Action"
            git add ./java/api-ref/API-*.html
            git commit -m "📚 API doc $(date +'%Y-%m-%d')" || echo "No changes to commit"
            git push origin my

     

    3. act 실행

     

    기본 --network 가 host인데 오류가 나서

     

    docker network create my-act-network

    위 커맨드를 통해 도커 네트워크를 만들고 아래처럼 act 를 실행한다.

    (Medium 사이즈 도커 + ubuntu 최신 버전 이미지를 -P 로 강제로 설정하고 비밀키 값 파일을 넘겼다.

    act -P catthehacker/ubuntu:act-latest -j build --secret-file .github/workflows/.env --network my-act-network

     

    본인의 action이 잘 실행했다면 Job succeeded 처럼 나오고 잘 종료된다.

     

    728x90

    '컴퓨터' 카테고리의 다른 글

    AWS EC2 가비아 HTTPS 도메인 503  (1) 2023.12.05
    Github Action: 카카오톡 CI 봇  (0) 2023.04.26
    Ubuntu/Zorin OS 설치 파티션 설정  (0) 2023.04.16

    댓글