gitlab CI / CD 파이프 라인에서 라이선스 검사 자동화

버블 코드

GitLab CI / CD 파이프 라인의 반응 프로젝트에 설치된 패키지의 라이선스 검사를 구현하려고합니다. 빌드 단계 전에 파이프 라인은 사용 가능한 모든 라이선스를 확인한 다음 지정된 특정 라이선스를 화이트리스트 또는 블랙리스트에 추가해야합니다.

내가 사용하고 라이센스 검사기 패키지를 JSON 파일에서 사용 가능한 라이센스 목록을 구현합니다. 필수 명령을 실행 한 후 license-checker --json > ./license.json출력은 다음과 같습니다.

license.json

{
  "@babel/[email protected]": {
    "licenses": "MIT",
    "repository": "https://github.com/babel/babel",
    "path": "..../node_modules/@babel/plugin-transform-parameters",
    "licenseFile": "...../node_modules/@babel/plugin-transform-parameters/LICENSE"
  },
  "@babel/[email protected]": {
    "licenses": "MIT",
    "repository": "https://github.com/babel/babel",
    "path": "..../node_modules/@babel/plugin-transform-property-literals",
    "licenseFile": "...../node_modules/@babel/plugin-transform-property-literals/LICENSE"
  },
  "@babel/[email protected]": {
    "licenses": "MIT",
    "repository": "https://github.com/babel/babel",
    "path": "..../node_modules/@babel/plugin-transform-react-constant-elements",
    "licenseFile": "...../node_modules/@babel/plugin-transform-react-constant-elements/LICENSE"
  }
  // .........and list goes on
}

.gitlab-ci.yml

include:
  - local: license-checker-config.yml

stages: 
  - dependency

dependency:
  image: node:12
  stage: dependency
  script: 
    - npm ci
    - echo "main file...."

license-checker-config.yml

before_script: 
  - ./license.json
  - echo "Checking licenses..."

라이센스 스캔은 빌드 프로세스 전에 시작되어야하므로 before_script. 에서 license-checker-config.ymlJSON 파일을 포함시킨 다음이를 반복하여 확인해야합니다. MIT와 같은 라이선스가 포함되어 있으면 빌드 단계 만 계속되어야합니다. 그렇지 않으면 빌드가 실패합니다.

현재 코드 설정으로 파이프 라인을 실행하고 오류가 발생했습니다.

Executing "step_script" stage of the job script
00:01
$ ./license.json
/bin/bash: line 99: ./license.json: Permission denied
ERROR: Job failed: exit code 1

license.json 파일이 동일한 루트 폴더에 있지만 권한이 거부 된 것으로 표시됩니다. 또한 yml 파일 내에서 JSON 파일 루핑을 구현 한 다음 필요한 것을 달성하는 방법을 알아낼 수 없습니다.

이 문제를 해결하는 데 도움을 주시면 감사하겠습니다.

JRichardsz

Easy 모드 (nodejs)

package.json (앱의 소스 코드)에 validate_licenses.js 라는 이름으로 스크립트를 추가 할 수 있습니다.

  "scripts": {
    "start": "...",
    "build": "...",
    "validate_licenses": " node validate_licenses.js"
  }

validate_licenses.js에 라이선스 유효성 검사 논리를 넣습니다.

마지막으로 파이프 라인의 어느 부분에서나 실행하십시오.

npm run validate_licenses

이것은 테스트 처럼 실패 하고 빌드 프로세스가 중단됩니다.

-강제 json 생성 및 구문 분석

const { exec } = require("child_process");
const license_checker = require('license-checker')
var fs = require('fs');

exec("license-checker --json > ./license.json", (error, stdout, stderr) => {
    if (error) {
        console.log(`error: ${error.message}`);  return;
    }
    if (stderr) {
        console.log(`stderr: ${stderr}`);return;
    }
    console.log(`json created`);
    parseJsonLicenses();
});

function parseJsonLicenses(){
  var licenses = JSON.parse(fs.readFileSync('/license.json', 'utf8'));
  //iterate licenses and fail if exist one licence differet of MIT
  for(var npmModule in licenses){
   if(licenses[npmModule].licenses != 'MIT')
     throw new Error(npmModule+' has a not allowed license');
  }  
}

공식 사이트에서 더 많은 정보 :

-json 생성을 피하고 [onlyAllow] 옵션 사용

var checker = require('license-checker');
var config = {
  start: '.' ,
  onlyAllow: 'MIT'
};
checker.init(config, function(json, err) {
    if (err) {
        throw new Error(err);
    } else {
        console.log (JSON.stringify (json))
    }
});

내 프로젝트 중 하나에서 테스트했는데 다음 오류가 발생합니다.

Package "@csstools/[email protected]" is licensed under "CC0-1.0" which is not permitted by the --onlyAllow flag. Exiting.

하드 모드 (쉘 명령)

-이전에 생성 된 json 구문 분석

순수 쉘 명령으로 MIT 단어 찾기를 읽고 반복 할 수 있지만 어려운 작업이 될 것입니다.

확인 : 셸 스크립트에서 JSON 배열 반복

성공하면 git lab ci에서 validate_licenses.sh를 호출 할 수 있습니다.

test:
    stage: test
    script:
        - echo 'starting licenses validation'
        - ./validate_licenses.sh

-이전에 생성 된 단순 파일 구문 분석

이 게시물에 따르면 : https://medium.com/@fokusman/the-easiest-way-to-check-all-your-npm-dependency-licenses-753075ef1d9d

요약 된 라이센스 수를 얻을 수 있습니다.

> license-checker --summary

├─ MIT: 949
├─ ISC: 115
├─ BSD-2-Clause: 24
├─ CC0-1.0: 23
├─ BSD-3-Clause: 18
├─ Apache-2.0: 18
├─ CC-BY-4.0: 2
├─ BSD*: 2

마지막으로 당신은 할 수 있습니다 이 파일이 특정 문자열이 포함되어 있는지 확인 하고 오류가 발생


혼합물 (git lab ci의 nodejs 명령)

git lab ci에서 nodejs 명령을 실행할 수있는 경우 validate_licenses.js가있는 경우 직접 호출 할 수 있습니다.

test:
    stage: test
    script:
        - echo 'starting licenses validation'
        - node validate_licenses.js

참고 문헌

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

gitlab ci cd 파이프 라인을 사용할 때 노드 js 앱의 환경 변수에 액세스

분류에서Dev

AWS Glue 용 CI / CD 파이프 라인

분류에서Dev

CI CD 파이프 라인 Azure Devops

분류에서Dev

Gitlab CI 파이프 라인 작업

분류에서Dev

Gitlab CI : Docker 및 Shell Runner를 사용하여 파이프 라인에서 테스트를 실행하는 방법

분류에서Dev

gitlab-ci에서 트리거 파이프 라인 실패

분류에서Dev

React-native iOS 앱을위한 CI / CD 파이프 라인 빌드 : gitlab-ci에서 expo 빌드를 실행하는 방법은 무엇입니까?

분류에서Dev

CI / CD 파이프 라인 구현에서 여러 테넌트에 대해 동적으로 Dockerfile 관리

분류에서Dev

Azure TFS를 사용하여 CI / CD 파이프 라인에서 앱 설정을 구성하는 방법

분류에서Dev

Gitlab CI / CD 검토 단계에서 postgresql에 액세스

분류에서Dev

GitLab SonarQube CI / CD 변수는 파이프 라인으로 전달되지 않습니다.

분류에서Dev

GitLab CI : 마스터가 아닌 다른 분기에 대해 커밋 / 자동 파이프 라인을 비활성화하는 방법은 무엇입니까?

분류에서Dev

APIM (Azure API Management)에 대한 CI / CD 파이프 라인 설정

분류에서Dev

Gitlab CI : 특정 사용자가 커밋 할 때 파이프 라인을 트리거하지 않음

분류에서Dev

Cloud Build CI / CD 파이프 라인에서 curl 요청 만들기

분류에서Dev

사용자 지정 DIND 서비스로 GitLab CI / CD Docker-In-Docker 실패

분류에서Dev

GitLab에서 파이프 라인을 실행하는 동안 외부 데이터베이스 사용

분류에서Dev

빌드 파이프 라인 자체 (CI)에서 빌드 아티팩트 사용

분류에서Dev

Gitlab CI / CD 유효성 검사 PowerShell 스크립트

분류에서Dev

Gitlab CI 파이프 라인-특정 조건에서만 다음 단계 계속

분류에서Dev

Gitlab CI / CD에 로그 파일 통합

분류에서Dev

CI / CD 파이프 라인의 Flutter 명령 문제

분류에서Dev

VSTS 여러 CI / CD 파이프 라인 구성

분류에서Dev

gitlab ci 파이프 라인 / python 3 알파인 이미지에서 sphinx-build 명령을 찾을 수 없음

분류에서Dev

사용자 정의 Xubuntu 라이브 CD / USB에서 대화 형 쉘 스크립트 자동 시작

분류에서Dev

Gitlab CI 파이프 라인 실패 : 태그 문제

분류에서Dev

GitLab CI-파이프 라인 단계의 pg_dump 오류

분류에서Dev

gitlab ci-cd 내에서 볼륨에 파일 생성 및 복사

분류에서Dev

Gitlab CI 파이프 라인 파일에서 참조 전략이란 무엇입니까?

Related 관련 기사

  1. 1

    gitlab ci cd 파이프 라인을 사용할 때 노드 js 앱의 환경 변수에 액세스

  2. 2

    AWS Glue 용 CI / CD 파이프 라인

  3. 3

    CI CD 파이프 라인 Azure Devops

  4. 4

    Gitlab CI 파이프 라인 작업

  5. 5

    Gitlab CI : Docker 및 Shell Runner를 사용하여 파이프 라인에서 테스트를 실행하는 방법

  6. 6

    gitlab-ci에서 트리거 파이프 라인 실패

  7. 7

    React-native iOS 앱을위한 CI / CD 파이프 라인 빌드 : gitlab-ci에서 expo 빌드를 실행하는 방법은 무엇입니까?

  8. 8

    CI / CD 파이프 라인 구현에서 여러 테넌트에 대해 동적으로 Dockerfile 관리

  9. 9

    Azure TFS를 사용하여 CI / CD 파이프 라인에서 앱 설정을 구성하는 방법

  10. 10

    Gitlab CI / CD 검토 단계에서 postgresql에 액세스

  11. 11

    GitLab SonarQube CI / CD 변수는 파이프 라인으로 전달되지 않습니다.

  12. 12

    GitLab CI : 마스터가 아닌 다른 분기에 대해 커밋 / 자동 파이프 라인을 비활성화하는 방법은 무엇입니까?

  13. 13

    APIM (Azure API Management)에 대한 CI / CD 파이프 라인 설정

  14. 14

    Gitlab CI : 특정 사용자가 커밋 할 때 파이프 라인을 트리거하지 않음

  15. 15

    Cloud Build CI / CD 파이프 라인에서 curl 요청 만들기

  16. 16

    사용자 지정 DIND 서비스로 GitLab CI / CD Docker-In-Docker 실패

  17. 17

    GitLab에서 파이프 라인을 실행하는 동안 외부 데이터베이스 사용

  18. 18

    빌드 파이프 라인 자체 (CI)에서 빌드 아티팩트 사용

  19. 19

    Gitlab CI / CD 유효성 검사 PowerShell 스크립트

  20. 20

    Gitlab CI 파이프 라인-특정 조건에서만 다음 단계 계속

  21. 21

    Gitlab CI / CD에 로그 파일 통합

  22. 22

    CI / CD 파이프 라인의 Flutter 명령 문제

  23. 23

    VSTS 여러 CI / CD 파이프 라인 구성

  24. 24

    gitlab ci 파이프 라인 / python 3 알파인 이미지에서 sphinx-build 명령을 찾을 수 없음

  25. 25

    사용자 정의 Xubuntu 라이브 CD / USB에서 대화 형 쉘 스크립트 자동 시작

  26. 26

    Gitlab CI 파이프 라인 실패 : 태그 문제

  27. 27

    GitLab CI-파이프 라인 단계의 pg_dump 오류

  28. 28

    gitlab ci-cd 내에서 볼륨에 파일 생성 및 복사

  29. 29

    Gitlab CI 파이프 라인 파일에서 참조 전략이란 무엇입니까?

뜨겁다태그

보관