Yarn을 사용할 때 Azure Function의 GiitHub Action의 Zip deply를 격문으로 변경하지 않도록 합니다.

npm과 Yarn에서 파일을 사용하는 시간 스탬프는 다르다. 그야말로 함정이다.

문제.


GiitHub ActionAzure/functions-action에서 JavaScript(Type Script) 코드를 사용하여 Azure Function에 Zip 프로그램을 설계했습니다.
이 항목은 기본적으로 func init --typescript에서 생성된 설정을 유지합니다.
포장 매니저를 npm에서 Yarn으로 바꾼 후 몇 분 만에 완성되는 디자인은 수십 분이 걸린다.

까닭


Azure/functions-action 동작을 사용하여 디버깅을 할 때 node각 modules 디렉토리를 Zip으로 고정하여 설계 대상 환경으로 다시 확장합니다.
하지만 매번 모든 서류를 복사하는 것은 아니다. 타임 스탬프가 업데이트되지 않으면 건너뛴다.
Efficient file copy: Files will only be copied if their timestamps don't match what is already deployed. Generating a zip using a build process that caches outputs can result in faster deployments.
https://github.com/projectkudu/kudu/wiki/Deploying-from-a-zip-file-or-url#comparison-with-zip-api
여기서 npm과 Yarn의 동작이 달라 병목이 됐다.

npm


npm은 node입니다.modules 아래에 펼쳐진 파일의 시간 스탬프가 모두 고정되어 있습니다. 1985-10-26T08:15:00.000Z시간 스탬프에 따라 파일 해시 값이 다른 문제를 피하기 위해서다.
https://github.com/npm/npm/commit/58d2aa58d5f9c4db49f57a5f33952b3106778669

Yarn


한편, Yarn에서modules 아래 파일의 시간 스탬프는 간단하게 설치된 날짜나 로컬 캐시 날짜입니다.
GiitHub Actions(또는 다른 CI)에서 Yarn 캐시를 사용하지 않으면 항상 CI 실행 시간의 시간 스탬프를 사용하여 Zip 처리를 한다는 것이다.
npm에서 처음 시작한 프로그램에서도 모든 파일을 복사했지만 패키지에 의존하는 경우도 드물어 눈치채지 못했다.

해결책


npm로 돌아가는 것도 수단 중 하나야.
하지만 불공평한 이유로 포장매니저를 야런으로 만들어야 하는 경우도 있기 때문에 야런의 전제 피하는 방법을 사용해야 한다.[1]
캐시를 통해 문제를 회피하는 방법과 Azure Function 사용법을 완전히 바꾸는 방법 두 가지가 있다.

캐시


Yarn에서modules 아래 파일의 타임 스탬프는 캐시에 의존하기 때문에 GiitHub Action에 Yarn의 캐시를 솔직하게 저장하십시오.
공식 캐치 동작 문서에 Yarn의 견본이 있으니 참고하세요.
https://github.com/actions/cache/blob/main/examples.md#node---yarn
GiitHub Actions의 설정 파일은 다음과 같은 형식이어야 합니다.
.github/workflows/deploy.일부
# 関係するstepsだけ抜粋
- name: Get yarn cache directory path
  id: yarn-cache-dir-path
  run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
  id: yarn-cache
  with:
    path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
    key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
    restore-keys: |
      ${{ runner.os }}-yarn-
- run: yarn install --frozen-lockfile
- run: yarn run build
- run: yarn install --frozen-lockfile --production
- name: Deploy
  uses: Azure/functions-action@v1
  id: fa-foobar
  with:
    app-name: func-foobar
    publish-profile: ${{ secrets.FOOBAR }}

Run From Package


환경에서 ZIP 패키지를 확장하기 위해 파일 복사와 관련된 문제가 발생했습니다.
따라서 ZIP 패키지를 실행 파일로 직접 변환하는 방법을 준비했습니다.
https://docs.microsoft.com/ja-jp/azure/azure-functions/run-functions-from-deployment-package
차라리 지금 애저펀딩을 쓰면 런 프롬 패키지를 쓰는 게 안전판인데 손을 못 잡았어요.😓
ZIP 디버깅을 이미 했다면 상당히 특별한 일을 하지 않는 한 런 프롬 패키지로 쉽게 이동할 수 있다.
각주
🍏npm면 되잖아.↩︎

좋은 웹페이지 즐겨찾기