GiitHub Actions 수동 시작 디버깅을 통한 개발 환경 개선

온라인 홈 강사 링크개발Technote.
이번 소개GitHub Actions를 이용하여 개발 체험을 개선하는 일부 조치를 소개한다.

배경.


원래develop 합병 지점은 무대에서, master 합병 지점은 정식 공연에서 각각 디자인workflow을 진행했다.
본공연에서도 Docker 환경이 사용되기 때문에 각자 현지에서 본공연에 가까운 환경에서 개발되고 있지만, Expo의 푸시 알림과 외부로부터의Webhook 동작 등은 확인하기 어렵거나 확인할 수 없는 경우가 있다.
비용성, 개발 규모성 측면에서 볼 때 서버는 당분간 실제 조작과 디버깅에서만 사용하기를 원하지만 합병develop되기 전에도 동작을 확인해야 한다.
대체적으로develop는 지점뿐만 아니라 특정 명칭(예를 들어for-actions/deploy을 지점이 있는 지점으로 밀어내고 제본에 대한 디버깅을 시작하는 데 다음과 같은 문제가 있다.
  • 확인 후 주문 복구develop 분기의 상태가 매우 번거롭다
  • 특정 이름의 지점을 누르고 싶지만 디버깅을 하지 않으려면 동작을 취소해야 하기 때문에 번거롭다
  • 이 상황GitHub Actions을 조금 개선하기 위해 저는 언제든지 간단하게 디자인할 수 있습니다.

    해본 일


    PR에 디자인용 레이블을 추가하여 디자인


    포스터를 제작한 경우 해당 포스터에 특정 라벨workflow을 추가해 가동한다.
  • 디버깅을 시작할 때'deproy용'탭을 떼어내고'deproy중'탭
  • 을 부여합니다
  • 해처리
  • 디버깅 중 탭 떼기
  • label-deploy
    다음은 workflow입니다.
    on:
      pull_request:
        types: [ labeled ]
    
    name: Manual Deploy
    
    jobs:
      # デプロイを起動するかどうかチェック
      # 後で追加する起動条件のためにチェックとデプロイを分けておく
      check:
        name: Whether to run
        runs-on: ubuntu-latest
        timeout-minutes: 1 # ほぼラベルのチェックだけなのでタイムアウトを短く設定
        outputs:
          run: ${{ env.RUN_FLAG }} # 後続のjobでチェックの結果を使用
        steps:
            # 特定のラベル (例: Deploy) の場合にフラグを立てる
          - run: echo "RUN_FLAG=1" >> $GITHUB_ENV
            if: github.event.label.name == 'Deploy'
    
            # actions/github-script は Octokit も利用できる JavaScript を実行できちゃうすごいやつ
            # ここでは Deploy ラベルを剥がして Deploying ラベルを付ける
          - uses: actions/github-script@v4
            name: Remove label
            if: github.event.label.name == 'Deploy Staging'
            with:
              script: |
                github.issues.removeLabel({
                  ...context.repo,
                  issue_number: context.issue.number,
                  name: 'Deploy'
                })
                github.issues.addLabels({
                  ...context.repo,
                  issue_number: context.issue.number,
                  labels: ['Deploying']
                })
    
      deploy:
        name: Deploy
        runs-on: ubuntu-latest
        timeout-minutes: 10 # タイムアウトは必ず設定しましょう
        needs: check
        if: needs.check.outputs.run # check ジョブの結果を使用
        steps:
          - name: Checkout
            uses: actions/checkout@v2
          # 任意のデプロイステップ
          # ...
    
      # 付与した Deploying ラベルを剥がす
      remove-label:
        name: Remove Label
        runs-on: ubuntu-latest
        timeout-minutes: 1 # ラベルを剥がすだけなのでタイムアウトを短く設定
        needs: deploy
        # デプロイジョブが失敗していてもラベルを剥がす
        # failure の場合は Slack に通知などの処理を入れてもいいかも
        if: always() && needs.check.outputs.run
        steps:
          - uses: actions/github-script@v4
            name: Remove label
            with:
              script: |
                github.issues.removeLabel({
                  ...context.repo,
                  issue_number: context.issue.number,
                  name: 'Deploying'
                })
    
    라벨 추가 같은 이벤트에서도 시작할 수 있어서 정말 편리해요.
    또 다른 시동을 걸 수 있는 행사가 많아서 보기만 해도 즐겁다.
    https://docs.github.com/ja/actions/reference/events-that-trigger-workflows

    수동으로 분기 디버깅

    develop는 지점 상태를 회복하기 위해 지점을 지정할 수도 있고, 플러그인을 만들지 않은 지점의 depro를 지원할 수도 있습니다.
    이렇게 말하지만, 시동을 걸 수 있도록 다음 줄을 추가하면 됩니다!
     on:
       pull_request:
         types: [ labeled ]
    +  workflow_dispatch:
    
    이것만 동작 화면에서 브랜치 시작을 선택할 수 있습니다.
    branch-deploy
    하지만 이번에는 코릭 라벨에 추가할 때도 시작되기 때문에 workflow 내의 if를 조금 고쳐야 한다.
    상술한 것workflow을 조금 고쳐 썼는데 최종적으로 다음과 같은 것workflow으로 바뀌었다.
     on:
       pull_request:
         types: [ labeled ]
    +  workflow_dispatch:
    
     name: Manual Deploy
    
     jobs:
       check:
         name: Whether to run
         runs-on: ubuntu-latest
         timeout-minutes: 1
         outputs:
           run: ${{ env.RUN_FLAG }}
         steps:
           - run: echo "RUN_FLAG=1" >> $GITHUB_ENV
    -        if: github.event.label.name == 'Deploy'
    +        if: github.event_name == 'pull_request' && github.event.label.name == 'Deploy'
    +      - run: echo "RUN_FLAG=1" >> $GITHUB_ENV
    +        if: github.event_name == 'workflow_dispatch'
    
           - uses: actions/github-script@v4
             name: Remove label
    -        if: github.event.label.name == 'Deploy Staging'
    +        if: github.event_name == 'pull_request' && github.event.label.name == 'Deploy'
             with:
               script: |
                 github.issues.removeLabel({
                   ...context.repo,
                   issue_number: context.issue.number,
                   name: 'Deploy'
                 })
                 github.issues.addLabels({
                   ...context.repo,
                   issue_number: context.issue.number,
                   labels: ['Deploying']
                 })
    
       deploy:
         name: Deploy
         runs-on: ubuntu-latest
         timeout-minutes: 10
         needs: check
         if: needs.check.outputs.run
         steps:
           - name: Checkout
             uses: actions/checkout@v2
           # 任意のデプロイステップ
           # ...
    
       remove-label:
         name: Remove Label
         runs-on: ubuntu-latest
         timeout-minutes: 1
         needs: deploy
    -    if: always() && needs.check.outputs.run
    +    if: always() && needs.check.outputs.run && github.event_name == 'pull_request'
         steps:
           - uses: actions/github-script@v4
             name: Remove label
             with:
               script: |
                 github.issues.removeLabel({
                   ...context.repo,
                   issue_number: context.issue.number,
                   name: 'Deploying'
                 })
    
    이상의 설정을 통해 최초의 과제인 무대 서버에서 동작을 확인하는 심리적 장애를 낮출 수 있다.
    FirebasePaaS에서도 똑같이 준비workflow하면 동작 확인을 더 쉽게 할 수 있다.

    🔔 직원 모집


    온라인 가정교사 서비스 "ManaLink"에서 엔지니어를 모집하고 있습니다!
    https://manalink.jp/
    2020년에 발매되는데 더 많은 서비스를 함께 개발해 볼까요?
    개발한 기능은 온라인 멘토링의 현장에서 바로 활용될 수 있어 멘토링 과정의 최적화와 연결된 환경이다.
    특히 테스트 코드를 작성하고 엔지니어를 주도로 품질을 보호하며 신기술의 학습과 출력을 중시하며 기술 수준을 고려하지 않는다.
    이런 맥락에서 세부적인 기술 경험이 있느냐 없느냐보다 앞으로 어떤 엔지니어가 돼 여가 면담에 적극적으로 나설 수 있기를 기대한다.
    일단 한 번 얘기 안 해요?다음은 Meety에게 문의하세요!
    https://meety.net/matches?q=%23마나 링크
    최근 모집 요점은 다음과 같이 요약된다.다만 최근 공모를 위해 사업 쪽에 관심이 있다면 중장기적인 연계도 환영한다.당신의 연락을 기대합니다!
    https://noschool.notion.site/TypeScript-PHP-8b37ebb8d2344b58b0fd88acff0e21af

    좋은 웹페이지 즐겨찾기