GiitHub Actions 수동 시작 디버깅을 통한 개발 환경 개선
이번 소개
GitHub Actions
를 이용하여 개발 체험을 개선하는 일부 조치를 소개한다.배경.
원래
develop
합병 지점은 무대에서, master
합병 지점은 정식 공연에서 각각 디자인workflow
을 진행했다.본공연에서도
Docker
환경이 사용되기 때문에 각자 현지에서 본공연에 가까운 환경에서 개발되고 있지만, Expo의 푸시 알림과 외부로부터의Webhook
동작 등은 확인하기 어렵거나 확인할 수 없는 경우가 있다.비용성, 개발 규모성 측면에서 볼 때 서버는 당분간 실제 조작과 디버깅에서만 사용하기를 원하지만 합병
develop
되기 전에도 동작을 확인해야 한다.대체적으로
develop
는 지점뿐만 아니라 특정 명칭(예를 들어for-actions/deploy
을 지점이 있는 지점으로 밀어내고 제본에 대한 디버깅을 시작하는 데 다음과 같은 문제가 있다.develop
분기의 상태가 매우 번거롭다GitHub Actions
을 조금 개선하기 위해 저는 언제든지 간단하게 디자인할 수 있습니다.해본 일
PR에 디자인용 레이블을 추가하여 디자인
포스터를 제작한 경우 해당 포스터에 특정 라벨
workflow
을 추가해 가동한다.다음은
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'
})
라벨 추가 같은 이벤트에서도 시작할 수 있어서 정말 편리해요.또 다른 시동을 걸 수 있는 행사가 많아서 보기만 해도 즐겁다.
수동으로 분기 디버깅
develop
는 지점 상태를 회복하기 위해 지점을 지정할 수도 있고, 플러그인을 만들지 않은 지점의 depro를 지원할 수도 있습니다.이렇게 말하지만, 시동을 걸 수 있도록 다음 줄을 추가하면 됩니다!
on:
pull_request:
types: [ labeled ]
+ workflow_dispatch:
이것만 동작 화면에서 브랜치 시작을 선택할 수 있습니다.하지만 이번에는 코릭 라벨에 추가할 때도 시작되기 때문에
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'
})
이상의 설정을 통해 최초의 과제인 무대 서버에서 동작을 확인하는 심리적 장애를 낮출 수 있다.또
Firebase
등PaaS
에서도 똑같이 준비workflow
하면 동작 확인을 더 쉽게 할 수 있다.🔔 직원 모집
온라인 가정교사 서비스 "ManaLink"에서 엔지니어를 모집하고 있습니다!
2020년에 발매되는데 더 많은 서비스를 함께 개발해 볼까요?
개발한 기능은 온라인 멘토링의 현장에서 바로 활용될 수 있어 멘토링 과정의 최적화와 연결된 환경이다.
특히 테스트 코드를 작성하고 엔지니어를 주도로 품질을 보호하며 신기술의 학습과 출력을 중시하며 기술 수준을 고려하지 않는다.
이런 맥락에서 세부적인 기술 경험이 있느냐 없느냐보다 앞으로 어떤 엔지니어가 돼 여가 면담에 적극적으로 나설 수 있기를 기대한다.
일단 한 번 얘기 안 해요?다음은 Meety에게 문의하세요!
최근 모집 요점은 다음과 같이 요약된다.다만 최근 공모를 위해 사업 쪽에 관심이 있다면 중장기적인 연계도 환영한다.당신의 연락을 기대합니다!
Reference
이 문제에 관하여(GiitHub Actions 수동 시작 디버깅을 통한 개발 환경 개선), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/manalink/articles/manalink-github-actions-improve-deploy-workflow텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)