CI의 반복 작업을 사용하여 NPM 패키지 보안 복구 자동화
7351 단어 nodedevopsbeginnersjavascript
NPM 감사 등
우리가 빈틈 감사를 이야기할 때 가장 먼저 떠오르는 것은 NPM 감사 도구다.이 도구는 사용 가능한 빈틈 디렉터리를 공개하여 항목을 검사하고 라이브러리 버전 업데이트를 제출하여 발견된 모든 문제를 복구합니다.너는 공식 사이트NPM blog here에서 더 많은 정보를 읽을 수 있다.
현재 사용 가능한 옵션을 사용하고 있는 또 다른 무료 보고서는 npm가 유행이 지났다는 것이다.이 보고서는 현재 설치된 패키지가 유행이 지났는지 확인하기 위해 명령을 사용합니다.이런 정보들이 반드시 일상적인 업무에 유용하지는 않지만, 장기적으로 보면, 이렇게 하면 당신은 쉽게 한 항목을 포기하지 않을 것이라는 것을 가장 잘 알고 있다.
$ npm outdated
Package Current Wanted Latest Location
glob 5.0.15 5.0.15 6.0.1 test-outdated-output
nothingness 0.0.3 git git test-outdated-output
npm 3.5.1 3.5.2 3.5.1 test-outdated-output
local-dev 0.0.3 linked linked test-outdated-output
once 1.3.2 1.3.3 1.3.3 test-outdated-output
자동 npm 만료 보고
이 도구들은 매우 유용하지만, 물론 자동 보고가 더 좋다.이를 위해 Drone CI (무료 및 오픈) 및 새로운 특성인 Cron Jobs를 사용하여 중복 작업을 설정합니다.그러나 동일한 기능을 지원할 수 있는 다른 CI는 자유롭게 사용할 수 있습니다.무인기 CI에 익숙하지 않은 분들은 제 것을 읽어 주세요.
무인기 CI는 여러 개의 파이프를 지원하기 때문에 모든 보고서는 자신의 파이프가 있고 메인 파이프에 영향을 주지 않는다.자세한 내용은 예제 here 를 참조하십시오.동시에 npm부터 시작합시다.
kind: pipeline
name: npm outdated
steps:
- name: outdated
image: node:10-alpine
commands:
- npm outdated
- name: slack_notification
image: plugins/slack
settings:
webhook: https://hooks.slack.com/services/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
template: >
NPN detected outdated packages at *{{repo.name}}* for *{{build.branch}}* branch.
Report available by the link {{build.link}}
when:
status:
- failure
trigger:
cron: [ weekly ]
우리는 yaml 문법 자체가 매우 잘한다고 생각한다.첫 번째 단계에서, 우리는 노드: 10alpine을 기초 이미지로 사용하고 npm를 실행합니다.두 번째 단계에서 업데이트할 내용이 있을 때만 느슨한 알림을 실행합니다. (npm 만료, 오류 종료 코드가 있습니다.)Slack webhook URL을 가져오려면 이 링크를 방문하십시오page최신 줄에서 전체 파이프는 "지나침"으로 표시된 Cron 작업으로 촉발됩니다.프로젝트에 대해 우리는 이 작업을 매주 실행하도록 설정합니다. 왜냐하면 우리는 새 버전이 발표될 때마다 패키지를 업데이트할 계획이 없기 때문입니다.
무인 항공기에서 작업을 정의하려면 프로젝트 -> 설정으로 이동합니다.
이 인터페이스를 통해 작업 이름(파이프 필터링용), 분기 및 간격을 선택할 수 있습니다. 시간, 매일, 매주, 매월 또는 매년입니다.
자동 npm 감사 및 PR 작성 수정
npmaudit 명령은 응용 프로그램에 빈틈이 있는지 확인하고 필요할 때 패키지를 모든 버전으로 업데이트합니다.이 파이프는 이전과 매우 비슷하지만 PR 생성과 관련된 추가 절차가 있습니다.
kind: pipeline
name: npm audit
steps:
- name: audit
image: node:10-alpine
commands:
- set -o pipefail && npm audit --force 2>&1 | tee audit.log
- name: audit fix
image: node:10-alpine
commands:
- npm audit fix
when:
status:
- failure
- name: create_fix_pr
image: lnikell/github-hub:2.11.2
environment:
GITHUB_TOKEN:
from_secret: github_token
commands:
- git config --global user.email "[email protected]"
- git config --global user.name "example"
- git checkout -b drone/npm-audit-fix-${DRONE_BUILD_NUMBER}
- git add package.json package-lock.json
- git commit -m 'npm audit fix'
- git push origin drone/npm-audit-fix-${DRONE_BUILD_NUMBER}
- hub pull-request -m "[Security] NPM Audit Fix" -m "$(cat audit.log | tail -2)" -m "${DRONE_BUILD_LINK}"
when:
status:
- failure
- name: slack_notification
image: plugins/slack
settings:
webhook: https://hooks.slack.com/services/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
template: >
NPN detected vulnerable packages at *{{repo.name}}* for *{{build.branch}}* branch.
Report available by the link {{build.link}}
when:
status:
- failure
첫 번째 단계에서 우리는 같은 노드: 10alpine 이미지를 사용하고 NPM audit를 실행합니다.우리는 또 회계 감사를 보존했다.나중에 PR로 출력할 수 있도록 결과가 포함된 로그 파일입니다.npm 감사 기간에 빈틈이 있는 패키지를 발견하면 다음 단계는 실패합니다. nmp 감사 복구 과정을 터치하고 요청을 만듭니다.-name: audit fix
image: node:10-alpine
commands:
- npm audit fix
when:
status:
- failure
pull 요청을 만들기 위해 Hub - Github API를 처리하는 명령행 도구를 사용합니다.API 호출에 사용할 Github 개인 영패를 생성해야 합니다.이 페이지로 이동하여 새 페이지를 만듭니다. https://github.com/settings/tokens"repo"권한 범위를 선택한 다음 생성된 영패를 "github\u영패"라는 무인기의 기밀에 추가합니다.
이것은 다음 단계에서 환경 변수로 사용된다.
- name: create_fix_pr
image: lnikell/github-hub:2.11.2
environment:
GITHUB_TOKEN:
from_secret: github_token
commands:
- git config --global user.email "[email protected]"
- git config --global user.name "drone"
- git checkout -b drone/npm-audit-fix-${DRONE_BUILD_NUMBER}
- git add package.json package-lock.json
- git commit -m 'npm audit fix'
- git push origin drone/npm-audit-fix-${DRONE_BUILD_NUMBER}
- hub pull-request -m "[Security] NPM Audit Fix" -m "$(cat audit.log | tail -2)" -m "${DRONE_BUILD_LINK}"
when:
status:
- failure
이 단계에서, 우리는 지점을 만드는 모델을 설명했고, 감사의 마지막 두 줄을 사용하여 요청을 만들었다.로그이것은 우리에게 매우 좋은 관계를 주었다.마지막으로, 우리는 파이프의 촉발 부분을 확인해야 한다.Cron 작업의 일부분으로만 이러한 검사를 수행하려면 다음을 추가해야 합니다.
trigger:
cron: [ name_of_the_job ]
그러나 주 파이프를 고려해야 한다는 것을 기억하십시오.Cron 작업 중에 실행되지 않도록 하려면 다음 제외 옵션을 사용해야 합니다.trigger:
cron:
exclude: [ name_of_the_job ]
모든 파이프에 대한 유용한 개요here를 제공하는 예시를 참조하십시오.결론
이것은 단지 하나의 예일 뿐, CI의 중복 작업이 구축, 테스트, 복구에 얼마나 유용한지 설명한다.한 번만 설정하면 매일/매주 프로젝트 안전성에 대한 통지를 받을 수 있습니다.우리가 예시에서 사용한 방법은 Travis CI나 Gitlab에 쉽게 적용될 것이다.만약 당신이 이렇게 한다면, 이곳에서 당신의 파이프를 나누세요.
만약 당신이 이 글을 좋아한다면, 나의 페이지나 페이지를 구독해 주십시오.
Reference
이 문제에 관하여(CI의 반복 작업을 사용하여 NPM 패키지 보안 복구 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alex_barashkov/automate-npm-packages-security-fixes-with-recurring-tasks-on-ci-pi1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)