GitHub Actions를 사용한 초고속 반응/노드 앱 테스트

3406 단어 cireactactionsgithub
성능의 구성 요소에 대한 생각은 거의 없으며 지속적 통합 성능에 대한 것입니다. 여기York Press에서 우리는 Azure Pipelines와 GitHub Actions 모두를 많이 사용합니다. Azure 파이프라인 실행기를 호스팅하기 때문에 "작업 시간"제한은 청구 관점에서 전혀 문제가 되지 않았습니다. 그러나 장기 실행 작업은 팀을 좌절시켰습니다. 몇 가지 주요 프로세스를 GitHub Actions로 이동한 후 핵심 리포지토리 중 하나의 성능을 개선할 때라고 결정했습니다. 이는 개발자가 더 빠른 피드백을 받았다는 것을 의미할 뿐만 아니라 작업 시간이 훨씬 더 느려졌다는 의미이기도 합니다. 내가 한 방법은 다음과 같습니다.

초기 조사



GitHub 작업(그리고 이것은 광고가 아님을 약속드립니다)에는 작업의 각 단계에 소요된 시간(초)을 확인할 수 있는 편리한 기능이 있습니다.



내가 가장 먼저 발견한 것은 npm 모듈을 설치하는 데 걸리는 시간이었습니다. 거의 3분이었습니다! 이 때문에 모듈 설치를 복제할 필요가 없도록 Test와 Lint 파이프라인을 결합하기로 했습니다.

둘째, 일반 명령npm ci을 다른 작업bahmutov/npm-install@v1으로 교체했습니다. 이 작업은 빌드 전체에서 노드 모듈의 모든 캐시 무효화 및 저장을 처리하므로 설치 시간을 절약할 수 있습니다. 변경 후 타이밍은 다음과 같습니다.



시간이 절반이나 가버렸어! 그것은 좋은 시작이지만 아직 충분하지 않습니다. CI 프로세스에서 필요하지 않은 이미지 최적화를 담당하는 Webpack 플러그인으로 인해 모듈을 설치하는 데 시간이 오래 걸린다는 것을 알았습니다. 나는 이것을 optionalDependencies로 옮긴 다음 명령을 npm ci --no-optional로 설정했습니다.

ESLint



튀겨야 할 다른 큰 물고기는 ESLint였으며 실행하는 데 거의 2:30분이 걸렸습니다. 환경 변수TIMING=1를 사용하여 로컬에서 디버깅을 시도했습니다. 이것은 각 ESLint 규칙이 확인하는 데 걸린 시간을 테이블 보기로 제공합니다.



흥미롭게도 가장 오래 걸린 것은 import/ 규칙이었습니다. 코드베이스 전체에서 일부 google-fuI discovered that it was due to having to build a dependency graph 후. 우리의 코드베이스는 상당히 크기 때문에 이렇게 오래 걸리는 이유를 이해할 수 있었습니다. 유용했기 때문에 규칙을 완전히 제거하고 싶지는 않았지만 확실히 우회할 방법이 있었습니다…

구출 조치! 다행히 친절한 인터넷 사용자가 변경된 파일에서만 ESLint를 실행하는 github 작업을 만들었습니다. 이렇게 교환했습니다

- uses: tinovyatkin/action-eslint@v1
  with:
    repo-token: ${{secrets.GH_TOKEN}}
    check-name: eslint


이것은 스캐닝 글로브와 일치하는 파일이 변경되지 않은 경우 소요되는 시간을 완전히 제거했습니다.

거기에서 나는 시간을 줄이려고 노력하는 것을 인정하는 것보다 더 많은 시간을 보냈습니다. 주요 방해 요소는 종속성 설치(평균 1:20초)와 Jest 테스트 스위트(평균 50초)였습니다. run the Jest suite in parallel 방법이 있지만 이 단계에서는 일종의 중복으로 보입니다. 설치는 큰 작업이지만 불행한 전투는 Webpack 이미지 로더가 devDependency 로 있다는 것입니다. 그런 다음 소스에서 빌드되는 전체 바이너리 패키지 호스트를 설치합니다. 하나의. 시각. 어쨌든, 나는 그것을 76%로 줄여서 기쁩니다.

내 주요 내용은 다음과 같습니다.
  • CI 속도를 높이는 데 시간을 할애하십시오 - 빠른 개발자 피드백이 중요하며 비용을 절약할 수 있습니다(파이프라인 시간이 제한된 경우)
  • 사전 구축된 작업을 사용하십시오. 많은 문제를 해결하고 스마트 기본값이 있는 작업의 거대한 시장이 있습니다. GitHub Actions는 훌륭합니다(광고가 아님을 약속드립니다). 부분적으로는 코드 레고와 같기 때문입니다.

  • 이것이 CI 속도를 높이는 여정에 도움이 되기를 바랍니다.

    좋은 웹페이지 즐겨찾기