GitHub를 사용하여 Expo 어플리케이션 원활하게 배포(2 섹션)
                                            
                                                
                                                
                                                
                                                
                                                
                                                 13603 단어  expogithubactions
                    
계속하다
이 시리즈의 첫 번째 부분에서 저는 엑스포와 GitHub 동작을 결합하여 사용하는 선결 조건을 소개하고 첫 번째 동작을 설정하는 방법을 보여 주었습니다.테스트를 실행하고 지점을 발표하는 방법에 대한 더 많은 정보를 알고 싶으면 보십시오!
이 절에서, 나는 버전 제어의 목적과 Expoturtle 서비스를 이용하여 응용 프로그램을 구축하여 응용 프로그램을 나누어 주는 방법을 설명할 것이다.
버전 제어의 중요성
왜 저희가 버전을 원합니까?필요하십니까?이것은 어떻게 사용자 체험을 개선합니까?프로젝트가 증가함에 따라 의존항의 수량도 증가하고 더욱 관리하기 어려워진다.결국 다른 서비스와의 계약을 깨뜨리지 않고 업그레이드하는 것은 어렵다는 것을 알게 될 것이다.버전 제어는 간단한 방법으로 우리는 통용되는 규칙을 사용하여 이러한 의존항을 관리할 수 있으며, 이렇게 하면 모든 사람이 같은 페이지에 있을 수 있다.이것은 Semantic Versioning이며 형식
Major.Minor.Patch의 주어진 규칙을 따른다.주요 변경 사항으로는 API 변경 중단, 보조 변경 후 호환 기능 추가, 패치 추가 오류 수정 등이 있습니다.버전 제어를 정확하게 사용하면 응용 프로그램에 일련의 장점을 가져다 줄 수 있다.프로그램 내 버전 제어는 코드 라이브러리와 프로그램 버전을 검증하여 보고된 오류를 쉽게 디버깅할 수 있습니다.보조 업데이트 및 패치 업데이트만 전송되도록 공중 전송 업데이트(OTA)를 구성하여 애플리케이션 변경이 중단되지 않도록 합니다.또한 응용 프로그램의 다양한 주요 버전을 기존 버전과 비교하고 각 응용 프로그램 상점에서 최신 버전을 가져오지 않은 사용자를 위해 유지보수할 수 있습니다.
GitHub 게시 태그를 사용하여 워크플로우를 트리거하고 일치하는 태그의 이름
prod-Major.Minor.Patch 을 지정하여 응용 프로그램을 어느 게시 채널에 배치할지 알립니다.코드에 많은 것이 있다.나는 먼저 코드를 제공한 후에 내가 한 몇 가지 선택을 상세하게 설명할 것이다.
name: Create Release
on:
  push:
    tags:
      - "prod-[1-9]+.[0-9]+.[0-9]+" # Push events to matching prod-*, i.e.prod-20.15.10
jobs:
  deploy_prod:
    name: Deploy To Production
    needs: test
    runs-on: ubuntu-latest
    outputs:
      releaseChannel: ${{ steps.releaseChannel.outputs.releaseChannel }}
      latestBinaryVersion: ${{ steps.latestBinaryVersion.outputs.version }}
    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.head_ref }}
      - name: Fetch Tags
        run: |
          git fetch --prune --unshallow --tags -f
      - uses: actions/setup-node@v1
        with:
          node-version: 12.x
      - uses: expo/expo-github-action@v5
        with:
          expo-packager: npm
          expo-username: ${{ secrets.EXPO_CLI_USERNAME }}
          expo-password: ${{ secrets.EXPO_CLI_PASSWORD }}
          expo-cache: true
      - uses: rlespinasse/[email protected]
      - name: Generate Release Channel # Release Channels are named prod-<Major Release>, i.e. prod-1, prod-3
        id: releaseChannel
        run: |
          RELEASE_CHANNEL=$(echo ${{ env.GITHUB_REF_SLUG }} | sed -r 's/\.[0-9]+\.[0-9]+$//')
          echo "::set-output name=releaseChannel::$RELEASE_CHANNEL"
      - name: Install Packages
        run: npm install
      - name: Get Latest Binary Version # Binary Version will be x.x.x based on the latest tag
        id: latestBinaryVersion
        run: |
          # Release tag finds the lastest tag in the tree branch - i.e. prod-x.x.x
          RELEASE_TAG=$(echo $(git describe --tags --abbrev=0))
          # Using param substitution, we output x.x.x instead
          echo "::set-output name=version::${RELEASE_TAG#*-}"
      - name: Echo Version Details
        run: |
          echo Build number is $GITHUB_RUN_NUMBER
          echo Latest release is ${{ steps.latestBinaryVersion.outputs.version }}
      - name: Expo Publish Channel
        run: expo publish --non-interactive --release-channel=${{ steps.releaseChannel.outputs.releaseChannel }}
prod-x.x.x 이라는 태그를 누른 경우에만 수행됩니다.이를 통해 git 명령행 도구나 GitHub GUI를 사용하여 게시 페이지를 만들어 작업을 실행할 수 있습니다.다음은 절차
Fetch Tag와Get Latest Binary Version를 자세히 볼 수 있다.통상적으로, 만약 우리가 단지 환매에서 최신 라벨을 얻게 된다면, 최신 발행 라벨은 얻게 될 것이다. 따라서, 나는 우리가 인용한 지점에서만 최신 라벨을 얻는 것을 통해 이러한 고장 방지를 실현하기로 결정했다.또한 응용 프로그램을 구축하기 위해
buildNumber 을 제공해야 합니다.이 경우 GitHub 작업 실행 번호 (repo의'작업'옵션 카드에 있는 매번 실행 이름 옆에 있는 작은 숫자입니다. 작업의 유일한 재생 시간을 계산하는 데 사용됩니다. 재생을 포함하지 않고 더 많은 정보를 찾을 수 있습니다 here.app.json의 경우 Create Release또한 Expo의 게시 채널을 변경하여 이를 buildNumber 로 표시하고 최신 레이블에서만 주요 버전을 가져옵니다. OTA 업데이트를 이 채널로 보내기를 원하기 때문입니다.이것은 또한 다른 지점에서 버전을 만들어서 응용 프로그램의 이전 버전을 열 복구할 수 있도록 합니다. 그러면 어떤 것도 파괴되지 않습니다.제작 및 게시
버전 간의 변화를 볼 수 있는 것은 게임 규칙의 변화자이다.그러나 다른 게시된 변경 로그를 만드는 것은 중요한 변경을 놓치는 압력을 준다.걱정하지 마세요. 지역사회에서 이미 많은 조작을 작성했습니다. 우리는 이러한 조작을 이용하여 과거의 제출에서 변경 로그를 생성하는 데 도움을 줄 수 있습니다. 그러면 어떤 변경도 빠뜨리지 않고 업무에 직접 집적할 수 있습니다.나의 예에서 나는 metcalfc/changelog-generator을 선택했다. 왜냐하면 그것은 매우 간단해서 임무를 완성할 수 있기 때문이다.완료되면 다른 커뮤니티 작업ncipollo/release-action을 사용하여 기존 게시 레이블을 만들거나 업데이트합니다.
예제 작업은 다음과 같습니다.
create_release:
    name: Create Release
    needs: deploy_prod
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: rlespinasse/[email protected]
      - name: Generate Changelog
        id: changelog
        uses: metcalfc/[email protected]
        with:
          myToken: ${{ secrets.GITHUB_TOKEN }}
          base-ref: 'prod-0'
      - name: Creating Release
        uses: ncipollo/release-action@v1
        with:
          body: |
            Changes in this Release: 
            ${{ steps.changelog.outputs.changelog }}
          token: ${{ secrets.GITHUB_TOKEN }}
          name: Release ${{ env.GITHUB_REF_SLUG }}
          allowUpdates: true
건축과 배전
마지막으로 가장 중요한 단계는 응용 프로그램을 구축하여 대중에게 배포하는 것이다.응용 프로그램의 구축 시간은 통상적으로 엑스포 구축 서비스number of projects queuing에 달려 있으며, 이 과정은 통상적으로 상당히 길다(20분에서 30분).매번 발표되기 전에 안드로이드와 iOS 바이너리 파일을 구축하기 위해 한 시간 정도 기다리는 것은 고통스러울 것이라고 상상해 보세요.하지만 고맙습니다. 우리는 모든 버전에서 자동으로 동작을 작성하고 바이너리 파일을 버전 자체, 심지어 각 응용 상점에 업로드할 수 있습니다!무료 Expo 구축 서비스를 사용할 때 일반적으로 URL이나 생성된 바이너리 파일을 가져오기 전에 서비스가 끝날 때까지 기다리거나 구축 작업이 끝날 때 갈고리를 사용하여 서버에 POST 요청을 보내는 두 가지 방법이 있다.간단하게 GitHub 작업에서 갈고리를 감청하지 않으려면 이전 옵션을 사용하기로 했습니다.
다음은 코드 세션입니다. android apk 패키지의 작업이 어떤 모습일지 설명합니다. iOS는 실행 중인 거울일 뿐입니다
3. build_android:
    needs: [deploy_prod, create_release]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: rlespinasse/[email protected]
      - uses: expo/expo-github-action@v5
        with:
          expo-packager: npm
          expo-username: ${{ secrets.EXPO_CLI_USERNAME }}
          expo-password: ${{ secrets.EXPO_CLI_PASSWORD }}
          expo-cache: true
      - name: Install Packages
        run: npm install
      - name: Build Android Release
        env:
          APP_BUILD_VERSION: ${{ github.run_number }}
          APP_BINARY_VERSION: ${{ needs.deploy_prod.outputs.latestBinaryVersion }}
        run: |
          expo build:android --release-channel=${{ needs.deploy_prod.outputs.releaseChannel }} > buildLogAndroid.txt
          cat buildLogAndroid.txt
      - name: Parse Asset URL
        id: androidUrl
        run: |
          ASSET_URL=$(cat buildLogAndroid.txt | tail | egrep -o 'https?://expo\.io/artifacts/[^ ]+')
          echo The android url is $ASSET_URL
          echo "::set-output name=assetUrl::$ASSET_URL"
      - name: Download APK Asset
        run: wget -O example-${{ env.GITHUB_REF_SLUG }}.apk ${{ steps.androidUrl.outputs.assetUrl }}
      - name: Upload Release Asset
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: ./example-${{ env.GITHUB_REF_SLUG }}.apk
          asset_name: example-${{ env.GITHUB_REF_SLUG }}.apk
          tag: ${{ github.ref }}
prod-Major 자산을 얻는 것이다.어떤 경우, 사용build:ios은 오류가 발생할 수 있습니다. 최신 버전만 업데이트되지 않기 때문에, 저는 신뢰할 수 있는 낡은 정규 표현식을 사용하여 이 문제를 해결하기로 결정했습니다.이후 자산이 발표되는 것은 순조롭다.버전의 최종 출력은 이렇습니다!간결하고 우리가 필요로 하는 모든 부분을 포함한다.
개량하다
우리가 할 수 있는 몇 가지 개선은 GitHub Tag Bump 같은 지역사회 조작을 사용하여 최신 버전을 라벨로 저장하고 PR 설명에 따라 버전 라이브러리를 자동으로 업그레이드하는 것이다. 그러나 이것은 다음 이야기가 될 것이다.또 다른 개선이 필요한 점은 구축된
.apk 및 expo url:apk 바이너리 파일을 앱스토어에 자동으로 업로드하는 것이다.만약 당신이 이렇게 하고 싶다면, 이 과정에 대한 정보를 더 많이 읽을 수 있습니다 here.물론 개선해야 할 여러 가지 측면이 있습니다. 저는 CI/CD 작업 흐름에 기능을 추가하기 위해 재구매를 계속 연구할 것입니다.결론
전반적으로 말하면 기획 작업 절차의 운행 방식과 실현 방식은 재미있는 과정이다.그 밖에 이 과정을 기록하는 것은 매우 재미있다. 이렇게 하면 다른 사람들이 GitHub에서 배우고 스스로 GitHub 조작을 사용할 수 있다.나는 나의 스승인 세바스티안에게 경의를 표하고 그가 이 과정에서 나에게 지도를 제공하고 다른 프로젝트를 위해 같은 업무와 업무 절차를 되돌아보는 것에 감사를 표하고 싶다.
너는 이곳에서 전체 환매를 볼 수 있다.포크로 그것을 찍어라, 네가 좋아하는 대로 놀아라.
회사 명 / github actions expo boiler 템플릿
엑스포와 GitHub의 협력 
이것은 dev.to 게시물에서 설명한 예시이며, 더 많은 상세한 정보는 곧 제공될 것이다.
View on GitHub
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(GitHub를 사용하여 Expo 어플리케이션 원활하게 배포(2 섹션)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://dev.to/justussoh/using-github-actions-to-seamlessly-deploy-expo-applications-part-2-57mi
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
Reference
이 문제에 관하여(GitHub를 사용하여 Expo 어플리케이션 원활하게 배포(2 섹션)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/justussoh/using-github-actions-to-seamlessly-deploy-expo-applications-part-2-57mi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)