241119 TIL

나고수·2024년 11월 19일
0

2024 TIL

목록 보기
83/94
post-thumbnail

① 배운 것

깃헙액션으로 firebase app distribution 배포 성공/실패 후 슬랙 알림 받기

android

배포를 하는 job 안에서 마지막 step으로 실행하면됨
이전 단계가 실패해도 항상 슬랙을 보내기 위해 if: always() 필요

      - name: notify
        if: always()
        run: |
          STATUS="${{ job.status }}"
          VERSION="${{ env.VERSION_NAME }}(${{ env.VERSION_CODE }})"
          
          if [[ "$STATUS" == "success" ]] ; then
            EMOJI="🎉"
          else
            EMOJI="😵‍💫"
          fi  
          
          curl -X POST https://slack.com/api/chat.postMessage \
            -H "Authorization: ${{ secrets.SLACK_TOKEN }}" \
            -H "Content-Type: application/json" \
            -d '{
              "channel": "${{ vars.SLACK_CHANNEL_ID }}",
              "text": "[App distribution] 안드로이드 배포 '"${STATUS}"''"${EMOJI}"'\n버전 👉 '"${VERSION}"'"
            }'

ios

버전 추출하는 step이 있는 job에서 Output으로 버전네임, 버전코드 생성

    outputs:
      version_name: ${{ env.VERSION_NAME }}
      version_code: ${{ env.VERSION_CODE }}

버전 추출하는 step

- name: Extract Version
        run: |
          VERSION_NAME=$(grep 'version:' pubspec.yaml | sed -e 's/version: //' -e 's/+.*//')
          VERSION_CODE=$(grep 'version:' pubspec.yaml | sed -e 's/version: //' -e 's/.*+//')
          echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV
          echo "VERSION_CODE=$VERSION_CODE" >> $GITHUB_ENV
        id: extract_version

ios는 빌드는 mac os, 앱 디스트리뷰션에 올리는건 리눅스 os에서 진행하기 때문에 각각 두개의 job이 필요
두개의 Job이 모두 끝난 후 슬랙 알림을 보내는 job을 또 만든다.

  notify:
    name: Slack Notification
    needs: [ build, release ] #두개의 job이 모두 끝난 후 실행 
    if: always() #앞의 job들이 실패해도 실행 
    runs-on: ubuntu-latest
    steps:
      - name: Send Slack Notification
        run: |
          BUILD_STATUS="${{ needs.build.result }}" #이전 job 결과 
          RELEASE_STATUS="${{ needs.release.result }}" #이전 job 결과 
          VERSION="${{ needs.build.outputs.version_name }}(${{ needs.build.outputs.version_code }})" #output으로 버전 가져옴 

          # 전체 상태 확인 (하나라도 실패하면 failure)
          if [[ "$BUILD_STATUS" == "success" ]] && [[ "$RELEASE_STATUS" == "success" ]]; then
            FINAL_STATUS="SUCCESS"
          else
            FINAL_STATUS="FAILURE"
          fi
          
          if [[ "$FINAL_STATUS" == "SUCCESS" ]] ; then
            EMOJI="🎉"
          else
            EMOJI="😵‍💫"
          fi

          curl -X POST https://slack.com/api/chat.postMessage \
            -H "Authorization: ${{ secrets.SLACK_TOKEN}}" \
            -H "Content-Type: application/json" \
            -d '{
              "channel": "${{ vars.SLACK_CHANNEL_ID }}",
              "text": "[IOS distribution] IOS 배포 '"${FINAL_STATUS}"''"${EMOJI}"'\n버전 👉 '"${VERSION}"'"
            }'

안드로이드 AGP 안맞는 버그 해결

이때 생겼던 버그가 깃헙액션에서 빌드 시에도 똑같이 생김

플러터 설치 step 단계 후에 플러터에서 사용되는 java path 설정하는 step추가

jdk 위치는 자바설치하는 단계를 성공하면 로그에서 알 수 있음

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          distribution: 'corretto'
          java-version: 17
 - name: setup flutter jdk directory
        run: |
          flutter config --jdk-dir /opt/hostedtoolcache/Java_Corretto_jdk/17.0.13-11.1/x64     

Error : No space left on device

안드로이드 빌드 단계에서 해당 에러를 만났다.
찾아보니 Runner은 14기가만큼의 디스크를 제공하는데 이를 다 쓰면 해당 에러가 발생함.
그래서 첫 step단계로 필요없는 것들을 제거하는 로직 추가

      - name: Cleanup Disk Space
        run: |
          # 사용하지 않는 큰 패키지들 제거
          sudo rm -rf /usr/share/dotnet
          sudo rm -rf /opt/ghc
          sudo rm -rf /usr/local/share/boost
          # 패키지 캐시 정리
          sudo apt-get clean
          # 디스크 사용량 확인
          df -h

짜잔~~성공 🎉

② 회고 (restropective)

③ 개선을 위한 방법
이제 남은것은 두 OS 각각의 워크플로우를 합치고 플러터 설치 후 캐시로 저장해두는 것만 남았다. 이번주 내로 완료할것!

profile
되고싶다

0개의 댓글