① 배운 것
배포를 하는 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}"'"
}'
버전 추출하는 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}"'"
}'
이때 생겼던 버그가 깃헙액션에서 빌드 시에도 똑같이 생김
플러터 설치 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
안드로이드 빌드 단계에서 해당 에러를 만났다.
찾아보니 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 각각의 워크플로우를 합치고 플러터 설치 후 캐시로 저장해두는 것만 남았다. 이번주 내로 완료할것!