GitHub 작업에서 Nx의 영향을 받는 명령 실행

8979 단어 angulargithub

너무 길어서 읽을 수가 없어요.


작년에 Nxmonorepo에서 일하니까 정말 좋았어요.프로젝트 간에 코드를 공유하는 것은 정말 편리하다.유일한 문제는 더 많은 라이브러리, 응용 프로그램, 프로젝트를 추가함에 따라 응용 프로그램을 구축하거나 테스트하는 데 걸리는 시간도 증가한다는 것이다.좋습니다. Nxmonorepos는 여러 가지 명령을 첨부하고 있습니다. 이 명령들은 코드 라이브러리의 일부분만 실행됩니다.예를 들어 변경 사항이 프로젝트 중의 한 라이브러리에만 영향을 미친다면 전체 프로젝트가 아니라 이 라이브러리만 테스트할 수 있습니다.요청을 작성할 때 CI/CD 서버에서 유용합니다.테스트는pull 요청 지점에서 실행되어 새 코드가 정상적으로 작동하고 프로그램의 이전 부분을 파괴하지 않도록 합니다.이 문서에서는 드래그 요청을 작성할 때 영향을 받는 테스트를 실행하기 위해 GitHub 작업 흐름을 만드는 방법을 설명합니다.

설치


내 경우, 나는 Nxmonorepo가 하나 있는데, 그 중에는 두 개의 응용 프로그램이 있다.도서관도 많아요.어떤 라이브러리는 공유되고, 어떤 라이브러리는 응용 프로그램에 특정된다.내가 필요로 하는 것은 드래그 요청을 만들 때 nx affected:test 명령을 실행하는 해결 방안이다.이것은 코드 변경의 영향을 받는 항목에만 테스트를 실행할 것입니다.테스트가 통과되면 PR은 안전하게 통합될 수 있습니다.
나는 우선 구글 클라우드를 이용하여 이 점을 실현하기 시작했다. 왜냐하면 이것은 우리가 전업 업무에서 응용 프로그램을 구축하고 배치하는 데 쓰이는 제품이기 때문이다.그러나 나는 줄곧 그것을 일하게 할 수 없었다. 왜냐하면 nx이 일하려면 되돌려받는git의 역사 기록이 필요하기 때문이다.나는 많은 해결 방안을 시도했지만git 역사 기록을 클라우드 구축 실례에 넣을 수 없습니다.나의 유일한 해결 방안은 모든 PR에서 모든 테스트를 실행하는 것이다. 이것은 한동안 유효했지만, 저장소가 증가함에 따라 더 많은 테스트와 라이브러리를 추가했다.지난주에 테스트가 시간을 초과하여 완성할 수 없었다.그것은 더 이상 실행 가능한 해결 방안이 아니다.그래서 GitHub Actions에 와서 이 문제를 해결하려고 합니다.

GitHub 작업 만들기


이전에 GitHub 작업을 시도한 적이 없는 경우 이 프로세스가 간단하고 편리합니다.작업을 생성하기 전에 새로 구입한 지점으로 전환합니다.그런 다음 중첩된 .github 폴더가 포함된 workflows 폴더를 저장소의 루트 디렉토리에 생성합니다.
mkdir .github
mkdir .github/workflows
yaml 폴더에 배치된 .github/workflows 파일은 GitHub 작업으로 실행됩니다.이 예에서 다음 단계는 새로운yaml 파일을 만드는 것입니다. nx-affected.yml이라고 명명합니다.이 파일은 작업의 단계를 정의합니다.나는 한 걸음 한 걸음의 모든 세부 사항을 깊이 파고들지 않을 것이다.이것은 다른 문장에 더욱 적합하다.그러나 나는 여기서 우리의 목표를 실현하는 더 중요한 절차에 대해 견해를 제공할 것이다.이것은 yaml 파일의 모든 내용입니다. 이후에 우리는 한 덩어리씩 그것을 분해할 것입니다.
name: Nx Affected CI

on:
  pull_request:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [12.x]

    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Use Node.js $
        uses: actions/setup-node@v1
        with:
          node-version: $
      - run: git fetch origin main
      - run: npm install
      - name: Run Affected Tests
        shell: bash
        run: npm run affected:test -- --base=remotes/origin/main
우리는 그것을 하나하나 분해하고 무슨 일이 일어났는지 설명합시다.
name: Nx Affected CI

on:
  pull_request:
    branches: [main]
작업 흐름yaml 파일의 맨 위에서 우리는 우리의 작업 흐름을 명명합니다.그런 다음 워크플로를 실행할 시기를 결정합니다.이 경우 기본 브랜치에 통합할 드래그 요청을 작성하면 워크플로가 실행됩니다.다른 브랜치는 패턴에 추가하여 대상이 될 수도 있습니다.
jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [12.x]
yaml 파일의 다음 부분은 작업 흐름의 핵심 부분이다.내가 지적하고자 하는 첫 번째 부분은 우리가 runs-on 속성의 조작을 사용하여 어떤 운영체제를 사용하는지 확정하는 것이다.이 예에서는 ubuntu-latest입니다.다음은 strategymatrix 속성으로 테스트를 실행하는 노드의 여러 버전을 확인할 수 있습니다.이 부분은 선택할 수 있다.원한다면 한 버전만 선택하거나 여러 버전을 선택할 수 있습니다.이 작업은 패턴에 제공된 각 버전의 노드에 대해 실행됩니다.
steps:
  - uses: actions/checkout@v2
    with:
      fetch-depth: 0
  - name: Use Node.js $
    uses: actions/setup-node@v1
    with:
      node-version: $
  - run: git fetch origin main
  - run: npm install
우리의 작업 흐름 파일의 steps 부분은 우리가 작업 흐름 목표를 실현하는 곳이다.다시 말하면, 우리는 테스트를 실행하고 그것을 실행할 준비를 할 것이다.세 번째 단계는git 저장소를 작업 흐름의 상하문에 서명합니다.fetch-depth: 0은 우리가 완전한git 기록을 얻을 수 있도록 합니다. 이것은 nx affected 명령을 실행하는 데 필요한 것입니다.두 번째 단계는 사용할 노드 버전을 확인합니다(위 matrix 부분의 strategy 사용).세 번째 단계는 주 지점에서 최신 정보를 얻습니다.Nxruns는 현재 지점과 main 지점을 비교하여 어떤 변화가 발생했는지 확인하기 위해 이러한 정보를 필요로 합니다.내가 여기서 소개한 마지막 단계는 npm install을 운행하는 것이다.이것은 모든 필요한 패키지가 준비되어 응용 프로그램을 구축하고 테스트할 수 있음을 확보한다.
- name: Run Affected Tests
  shell: bash
  run: npm run affected:test -- --base=remotes/origin/main
마지막 단계는 우리가 실제 테스트를 실행하는 곳이다.우리는 단계 aname을 제시하였으며, 테스트를 실행할 때 사용할 shell을 지정하였다.이 절차가 실행될 때, 우리는 package.json에서 설명한 npm 명령을 실행합니다.이것은 Nx 명령을 실행합니다. 이 명령은 요청 지점과 main 지점 사이에서 변경된 항목에 대한 테스트를 실행합니다.테스트가 실행되고 테스트가 성공하면 작업 흐름은 성공 상태로 끝납니다.테스트에 실패하면 워크플로가 실패 상태로 종료됩니다.두 상태 모두 GitHub의 pull 요청 페이지에 표시됩니다.

운영 작업


이 동작을 테스트하려면 변경 사항을 저장소로 전송하고 이 작업을 수행하는 지점을 사용하여 main에 통합할 요청을 만듭니다.드래그 요청을 만들면 새로 만든 작업이 실행됩니다.저장소에서 볼 수 있습니다.저장소 홈 페이지에서 작업 탭을 클릭하여 다음을 수행할 수 있습니다.

이 탭을 클릭하면 이 저장소에서 실행되는 작업 테이블이 표시됩니다.워크플로가 현재 실행 중인 경우 노란색 원이 표시됩니다.성공하지 못하면 빨간색 x로 표시합니다. 성공하면 녹색 체크 표시가 보입니다.

이 작업의 세부 정보를 표시하려면 행 중 하나를 클릭합니다.작업에 정의된 각 단계와 해당 단계와 관련된 로그가 표시됩니다.테스트는 당기기 요청을 작성하거나 업데이트를 기존 PR로 전송할 때마다 실행됩니다.

추가 정보

lint, build 또는 e2e 등 Nx의 영향을 받는 다른 명령을 실행하려면 같은 단계를 사용하거나 반복할 수 있습니다.개별 워크플로우에서 개별 단계로 실행할 수도 있고 각 단계에 하나의 워크플로우가 있을 수도 있습니다.또한 Docker 이미지에 응용 프로그램을 구축하고 GitHub의 패키지 레지스트리 (또는 Docker Hub와 유사한 다른 레지스트리) 로 이미지를 전송하는 작업을 사용할 수 있습니다.다음은 저의 이전 몇 편의 문장입니다. 아마도 당신에게 도움이 될 것입니다.그 밖에 여기 Dev.to에 관한 글이 있습니다. 제가 Nxmonorepo에서 영향을 받는 프로젝트를 테스트하는 데 도움을 주었습니다.



  • 좋은 웹페이지 즐겨찾기