본문 바로가기

코딩(Coding)

코드 검토를 자동화하고 싶으십니까? 지원되지 않는 CI에 대해 Danger JS 설정하는 방법

반응형

코드 검토를 자동화하고 싶으십니까? 지원되지 않는 CI에 대해 Danger JS 설정하는 방법

 

Google CloudBuild를 예로 들어

이미 알고 있는 경우 이 섹션을 건너뛸 수 있습니다. 위험 JS.

Danger JS는 소프트웨어 개발자가 일반적인 코드 검토 작업을 자동화할 수 있는 오픈 소스 빌드 도구입니다. Danger JS를 사용하여 풀 요청(PR)에 대해 일련의 규칙을 자동으로 실행하고 코드 검토 의견을 남길 수 있습니다. "이 PR이 크므로 효과적으로 검토할 수 있도록 세분화를 고려하십시오" 또는 "변경 로그 파일을 업데이트하십시오"와 같은 반복적이고 사소한 코드 검토 주석을 자동화합니다. 개발자는 PR이 해결하려는 문제를 검토하는 데 집중할 수 있습니다.

코드 검토 작업을 자동으로 처리합니다.

예제 코드

작동 방식을 더 잘 이해하기 위해 일반적인 사용 사례를 예로 들어 보겠습니다. 풀 리퀘스트가 너무 큰 경우 댓글을 남기고 싶다면?

이 사용 사례를 달성하기 위해 Danger JS를 사용하여 JS 함수를 작성할 수 있습니다.

pull request에서 변경된 줄 수가 임의의 줄보다 많을 경우 bigPRThreshold 값을 입력한 다음 풀 요청에 "경고" 주석을 남깁니다.

Danger JS 설정

아래에서는 CI에서 Danger JS를 설정하는 단계를 요약합니다.

  • 실행하여 Danger 설치yarn add danger —dev 또는 npm install --save-dev danger.
  • 만들기 위험 파일 저장소의 루트 폴더에 포함합니다. 그것은 될 수 있습니다 dangerfile.ts 또는 dangerfile.js.
  • GitHub 봇을 설정하거나 풀 요청에 댓글을 달거나 승인하거나 거부할 수 있는 충분한 액세스 권한이 있는 GitHub 토큰을 생성합니다.
  • 사용하는 CI에 따라 따라야 하는 이 설정 지침 목록을 참조하십시오.

예를 들어 회사의 내부 CI 또는 Google Cloud Build 내에서 Danger JS를 사용하려는 경우입니다. 작성 당시 Google Cloud Build는 지원되는 CI가 아닙니다.

이를 위한 두 가지 옵션이 있습니다.

  • 위험에 다시 기여하십시오.
  • Danger의 "수동 모드" 사용,히히 뭐 다음 섹션에서 다룰 것입니다.

위험을 설치하여 시작합니다. 이 예에서는 npm을 사용합니다.

npm install --save-dev danger

Danger 패키지에서 필요한 것을 가져옵니다.

import {danger, warn, markdown} from 'danger';

우리의 dangerfile.ts. 다음 기능을 구현할 것입니다.

  • reviewLargePR()이전 코드 예제와 동일
  • ensurePRHasAssignee() 양수인이 없으면 PR에 실패합니다.

우리의 dangerfile.ts:

우리는 우리를 테스트 할 수 있습니다 dangerfile 사용하여 로컬로 danger-pr.js. 이것은 풀 리퀘스트에 대한 코멘트를 남기지 않을 것입니다. 터미널에서 예상되는 PR 주석을 인쇄합니다. 이 옵션을 사용하면 dangerfile 실제 PR에 대한 스팸 댓글 없이 로컬에서.

리포지토리의 루트 폴더와 동일한 폴더에서 다음 명령을 실행합니다. dangerfile.ts:

# Your GitHub API token
export DANGER_GITHUB_API_TOKEN=node_modules/danger/distribution/commands/danger-pr.js https://github.com/danger/danger-js/pull/1192

위의 예에서 우리는 Danger JS의 GitHub 리포지토리에 대한 공개 PR을 사용하고 있습니다. 이 PR은 작성 당시 약 7,000~ 라인이 변경되었습니다. 이 숫자는 Dangerfile의 규칙에 따라 "대"입니다.

우리의 출력은 PR이 크다는 것을 보여줄 것입니다:

Danger는 "수동 모드"를 사용하여 현재 지원되는 목록에 없는 CI를 지원할 수 있습니다.

Danger의 CI 명령 실행

이제 위험 파일이 예상대로 작동하므로 다음을 사용하여 실행해 보겠습니다. danger-ci 장소 상에서. 이 명령은 우리가 지정한 PR에 대한 설명을 남깁니다.

ℹ️ CI 명령을 실행할 때 필요한 GitHub 액세스를 구성했는지 확인하십시오.

환경 변수 설정

필요한 환경 변수를 설정하여 수동 모드를 활성화할 수 있습니다.

CI 이름을 설정합니다.

# Replace with your unsupported CI's name, e.g. CloudBuild
export DANGER_MANUAL_CI=

GitHub 리포지토리를 지정합니다.

# Replace with your GitHub repository
export DANGER_MANUAL_GH_REPO=<githuborg/githubrepo>

아직 설정하지 않은 경우 GitHub API 액세스 토큰을 설정합니다.

# Replace with your GitHub API token
export DANGER_GITHUB_API_TOKEN=

위험 CI 명령 실행

이제 필요한 환경 변수👆를 설정했으므로 다음을 실행합니다. danger-ci 명령:

DANGER_MANUAL_PR_NUM= node_modules/danger/distribution/commands/danger-ci.js

환경 변수 DANGER_MANUAL_PR_NUM Danger가 검토할 PR의 PR 번호입니다. 예를 들어, 귀하의 PR이 다음과 같은 경우: https://github.com/danger/danger-js/pull/1192환경 변수는 DANGER_MANUAL_PR_NUM=1192.

ℹ️ 한 번에 하나씩 명령을 실행하는 대신 이 예제의 모든 명령을 실행하는 셸 스크립트를 작성할 수 있는 옵션이 있습니다.

제가 예로 설정한 공개 GitHub 풀 요청을 살펴보겠습니다.

환경 변수를 설정해 보겠습니다.

# Replace with your unsupported CI's name, e.g. CloudBuild
export DANGER_MANUAL_CI=MyCI
# Replace with your GitHub repository
export DANGER_MANUAL_GH_REPO=ardydedase/danger-example
# Replace with your GitHub API token
export DANGER_GITHUB_API_TOKEN=

그런 다음 실행 danger-ci PR 번호와 함께 명령 1 이 예에서:

DANGER_MANUAL_PR_NUM=1 node_modules/danger/distribution/commands/danger-ci.js

이 예에서는 PR에 할당된 사용자가 없기 때문에 PR이 실패합니다.

GitHub의 PR 댓글은 다음과 같습니다.

☝️ 이 데모에서는 개인 GitHub 토큰을 사용하고 있으므로 PR에 표시되는 사용자 이름입니다. 이상적으로는 GitHub 봇을 설정해야 합니다.

지원되지 않는 CI에서 동일한 단계를 수행합니다. 환경 변수를 설정하고 danger-ci 명령. 다음 섹션에서 이에 대해 다룰 것입니다. 👇

3단계에서 위험 파일을 테스트한 후 이제 지원되지 않는 CI로 Danger를 구성할 준비가 되었습니다.

다음과 같은 이유로 이 예에서는 Google CloudBuild를 CI로 사용합니다.

  • 작성 당시 Google CloudBuild는 아직 Danger JS에서 지원되는 CI가 아닙니다.
  • 빌드 구성 YAML을 로컬에서 테스트하는 데 사용할 수 있는 Local Cloud Builder CLI 도구가 있습니다.

Google Cloud 기본 요건

로컬에서 Google Cloud로 Danger 빌드를 테스트하려면 CloudBuild CLI 도구를 설치해야 합니다. 아래 링크된 문서를 참조하십시오.

CloudBuild 구성 파일

구성 파일을 생성해 보겠습니다.

ℹ️ 교체 GITHUB_API_TOKEN 당신의 토큰으로.

우리가 달릴 때 cloud-build-local, dryrun 달리 지정하지 않는 한 기본적으로 활성화됩니다. 이렇게 하면 빌드 구문을 확인할 수 있는 옵션이 제공되어 테스트 시간을 절약할 수 있습니다. 실행하여 시작합시다. cloud-build-local 아래 명령을 사용하여 구성 파일에 구문 오류가 없는지 확인하십시오.

cloud-build-local --config=./cloudbuild-local.yaml .

위의 명령이 성공하면 출력은 다음과 같습니다.

이제 설정을 해보자 dryrun 위험 빌드를 로컬에서 실행하려면 플래그를 false로 설정하십시오.

cloud-build-local --config=./cloudbuild-local.yaml --dryrun=false .

👆 위의 명령을 완료하는 데 몇 분이 걸립니다. 노드 도커 이미지를 다운로드하는 데 가장 많은 시간이 걸립니다.

성공적인 빌드는 아래와 유사한 출력을 표시합니다.

그리고 PR 코멘트도 남겨야 합니다.

이제 로컬 구성이 예상대로 작동하므로 프로덕션 Cloud Build 설정에서 동일한 구성을 사용할 수 있습니다.

프로덕션 환경 구성

프로덕션 설정은 CloudBuild에서 PR 번호를 검색한다는 점을 제외하면 거의 동일합니다. 하드 코딩 대신 할당합니다. $_PR_NUMBER 에게 DANGER_MANUAL_PR_NUM.

Danger CI 명령은 다음과 같습니다.

DANGER_MANUAL_PR_NUM=$_PR_NUMBER node_modules/danger/distribution/commands/danger-ci.js

또한 Google Cloud의 Secrets Manager 또는 사용 중인 '비밀' 관리자에 GitHub API 토큰을 저장해야 합니다.

Google Secrets Manager를 사용하는 경우 이를 사용하려면 빌드 구성을 업데이트해야 합니다.

availableSecrets:
secretManager:
- versionName: projects/$PROJECT_ID/secrets//versions/1
env: DANGER_GITHUB_API_TOKEN

바꾸다 당신의 비밀 이름으로.

Pull Request 번호를 사용한 빌드 구성 $_PR_NUMBER Secrets Manager의 비밀:

CloudBuild 트리거 설정

마지막 단계는 예상대로 작동하도록 CloudBuild 트리거를 구성하는 것입니다.

Google Cloud Console에서 CloudBuild에 새 트리거를 생성하여 다음을 수행합니다.

트리거를 생성하는 동안 이벤트로 "요청 가져오기"를 선택했는지 확인하십시오. 이렇게 하면 구성 파일에 액세스할 수 있습니다. $_PR_NUMBER . 우리가 이것을 하지 않는다면, $_PR_NUMBER 빈 문자열을 반환합니다.

선택하다 저장소 구성 파일의 위치로. 빌드 구성 파일의 경로를 지정합니다.

나머지 입력 필드는 그대로 둘 수 있습니다.

그게 우리에게 필요한 전부입니다. 이제 Danger JS에서 제공하는 자동화된 코드 검토가 포함된 멋진 Google CloudBuild 설정이 생겼습니다!

ℹ️ 우리가 TypeScript나 JavaScript를 사용하여 Dangerfile을 작성하더라도 Danger JS는 프로그래밍 언어에 관계없이 모든 코드베이스에서 작동할 수 있습니다.

참조용으로 GitHub 리포지토리를 찾을 수 있습니다.

반응형