GitHub 작업을 사용하여 프런트엔드에 CI를 추가하는 방법 - NuxtJS 사례 연구
알바 실빈트💃🏼
이번 주에 내가 어떻게 IS를 자동화했는지 알려주고 싶어!MYBUG 프로젝트.이 문서에서는 간단한 워크플로우를 통해 GitHub 작업을 사용하여 CI를 만드는 방법을 설명합니다.🤗나는 네가 좋아하기를 바란다. 나는 너의 의견을 알고 싶다💜 dawntraoz.com/blog/how-to-ad…
18:2020년 8월 26일 오후 15시
이 글에서 GitHub 작업의 도움으로 지속적인 통합이 얼마나 쉬운지 보여드리고 싶습니다.
소개
우리가 시작하기 전에 우리가 댓글에서 토론할 개념을 되돌아보는 것이 가장 좋다.
지속적인 통합
지속적인 통합(CI)은 개발 실천으로 개발자들이 코드를 공유 저장소에 자주 통합한다.이상적인 상황은 모든 통합(합병)은 자동 구축과 테스트를 통해 검증할 수 있다는 것이다.
GitHub 작업 및 GitHub 워크플로우
GitHub 작업은 코드 https://github.com/을 저장하는 동일한 위치에서 소프트웨어 개발 워크플로우를 자동으로 실행할 수 있도록 도와줍니다.요청과 문제에 대한 협업도 가능하다.이러한 기능을 사용하면 저장소에 직접 포괄적인 CI 및 CD(Continuity Development) 기능을 구축할 수 있습니다.
자신의 작업을 만들거나 사용자 정의 커뮤니티와 공유하는 작업을 사용할 수 있습니다. marketplace을 참조하십시오.
워크플로우는 사용자 정의 자동화 프로세스로 단일 작업(작업)의 조합으로 저장소에 설정하여 프로젝트를 구축, 테스트, 포장, 발표 또는 배치할 수 있습니다.
워크플로우를 설정하려면 저장소에 YAML 파일을 만들고 push To master와 같은 작업을 수행할 시기를 정의해야 합니다.
나는 지금 개원 프로젝트를 만들고 있기 때문에, 우리가 합작을 시작할 때, 일할 수 있는 CI가 매우 중요하다.왜?그러면 우리는 모두 같은 표준과 준칙을 사용할 것이다. 이런 조건을 통과해야만 우리의 코드를 집적할 수 있기 때문이다.
그러나 나도 그것을 설정하는 것이 얼마나 쉬운지 본 후에 지금부터 나는 나의 모든 프로젝트에서 그것을 사용할 계획이라고 말해야 한다.나는 네가 이 문장을 완성한 후에도 같은 느낌을 가질 수 있기를 바란다💜
프로젝트 준비
작업 흐름을 설정하고 우리가 연속적인 통합 과정을 자동화하기 위해서는 먼저 프로젝트에서 실행할 조작을 준비해야 한다.
내 예에서, 나는 ESLint에서 설정한 규칙과 Jest의 단원 테스트가 모든 통합에서 통과되는지 확인하고 싶다.이를 위해, 나는 가방에 다음 스크립트를 만들었다.json:
"lint": "eslint --ext .js, .vue --ignore-path .gitignore ."
"test:unit": "jest"
또한 프로젝트가 다른 운영체제에서 작동하는지 확인하고 싶을 때 추가해야 합니다.운영체제와의 줄 바꾸기 형식이 호환되지 않도록 gitattributes 파일을 내 프로젝트에 가져옵니다.# Enforce Unix newlines
* text=auto eol=lf
자체 워크플로우 설정
본문에 대해 나는 Is를 설명할 것이다!MyBug 구성은 NuxtJS에서 수행되지만 동일한 환경 (노드) 에서 구축된 모든 JavaScript 프로젝트에 적용될 수 있습니다.
YAML 파일 생성을 시작하려면 다음과 같은 두 가지 옵션이 있습니다.
1 - GitHub 저장소로 이동하여 Actions 탭을 클릭하면 워크플로우 제안이 표시되어 시작할 수 있습니다.가장 적합한 항목을 선택하고 "이 워크플로우 설정"단추를 누르십시오.
Both options will end with a YAML file in the path .github/workflows/CI.yml.
CI 구성부터 시작하겠습니다.yml 파일.
먼저 이름을 지정하고 워크플로우가 실행될 이벤트를 선택해야 합니다.
# Name your workflow
name: CI
# Set on which events you want run the actions.
# In this case the workflow will run on push for master and on pull request for master and develop branches
on:
push:
branches: [ master ]
pull_request:
branches: [ master, develop ]
PR을 파악하거나 개발할 때마다 실행되는 워크플로우는 하나 이상의 순차적 또는 병렬 실행이 가능한 작업으로 구성됩니다.workflow job은 같은 실행 프로그램에서 실행되는 단계이고 runner은 GitHub가 우리의 실행 작업에 제공하는 위탁 관리 가상 환경이다.
Although it also gives us the possibility of doing so in our own self-hosted environment.
같은 노드 버전으로 다른 운영체제 (Windows, Linux, MacOS) 에서 프로젝트를 실행하고 싶을 때, 나는 strategy을 사용했는데, 이것은 작업을 위한 구축 행렬을 만들었다.
jobs:
# This workflow contains a job called "integration"
integration:
# A strategy that defines different variations of an environment to run each job in.
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
node: [12]
# The runners that the job will run on
runs-on: ${{ matrix.os }}
일단 우리가 주자를 설치하면 집적 작업에서 지켜야 할 절차를 정의할 수 있다.step은 저장소에서 명령을 실행하거나 설치 작업을 실행하거나 작업을 실행할 수 있습니다.각 단계에서 다음과 같은 속성을 정의합니다.
이름, GitHub
실행할 작업을 사용, 지정하고 전송 작업
만약 단계 운행을 방지하기 위해 조건
run, 운영체제 케이스
전에 말씀드렸듯이 ESLint 설정이 예상대로 충족되었는지, 단원 테스트가 통과되었는지 확인하고 싶습니다.구현에 필요한 단계를 살펴보겠습니다.
So when we have to change the node version we have to do it only in one place.
노드가 구축되면 워크플로우가 저장소에 접근할 수 있어야 합니다. 이를 위해 checkout을 사용합니다.
jobs:
integration:
# ...
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- name: Setup Node.js environment
uses: actions/[email protected]
with:
node-version: ${{ matrix.node }}
- name: Checkout master branch
uses: actions/checkout@v2
의존항을 설치하려면 npm 설치 명령을 실행하는 절차를 추가하십시오.
단, 우리는 효과적인 방식으로 조작하기를 원하기 때문에, node\u 모듈에 캐시를 추가합니다.이를 위해 캐시할 폴더 경로 (node\u 모듈) 와 캐시를 복구하고 저장하는 데 사용할 현식 키 (package lock.json) 를 지정하는 cache 동작을 추가했습니다.
단계에서 사용할 수 있는 if 조건을 사용하면 이 캐시 작업의 출력 (캐시 적중 - 일치하는 키를 나타내는 부울 값) 이true 또는false인지 확인하고 명령을 계속하거나 피할 수 있습니다.
jobs:
integration:
# ...
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# ... Before steps ...
- name: Cache node_modules
uses: actions/[email protected]
with:
# A list of files, directories, and wildcard patterns to cache and restore
path: node_modules
# An explicit key for restoring and saving the cache
key: ${{ matrix.os }}-node-v${{ matrix.node }}-deps-${{ hashFiles(format('{0}{1}', github.workspace, '/package-lock.json')) }}
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm install
# ... After steps ...
우리는 명령을 실행하기 위한 절차를 만들 것입니다: npmrunlint, 그리고: npmruntest:unit를 위한 절차를 만들 것입니다. 만약 오류를 내거나 명령을 실행하지 않는다면, 모든 단계는 부정하거나 긍정적인 답을 제시할 것입니다.
그 밖에 테스트를 진행할 때, 우리는 우리가 실현한 코드 커버율을 특별히 기쁘게 보여 주었다.이것이 바로 우리가 동작을 사용하는 이유: codecov/codecov-action.이를 사용함으로써 https://www.codecov.io/ 사이트는 우리의 요청의 역사 기록과 커버 범위의 증가 또는 감소를 가져올 것이다.또한 readme.md에 덮어쓰기를 표시하고 다음을 추가할 수 있습니다.
<img src="[https://codecov.io/gh/](https://codecov.io/gh/)<GitHub_name>/<GitHub_repo>/branch/master/graph/badge.svg?token=<your_token>" />
다음과 같이 취급됩니다. jobs:
integration:
# ...
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# ... Before steps ...
- name: Run ESLint
run: npm run lint
- name: Run unit tests
run: npm run test:unit
- name: Code coverage
uses: codecov/[email protected]
워크플로의 모든 부분을 개별적으로 볼 수 있는 경우 전체 CI를 여기에 저장합니다.모든 항목에서 사용할 수 있도록 yml 파일!# Name your workflow
name: CI
# Set on which events you want run the actions.
# In this case the workflow will run on push for master and on pull request for master and develop branches
on:
push:
branches: [ master ]
pull_request:
branches: [ master, develop ]
jobs:
# This workflow contains a job called "integration"
integration:
# A strategy that defines different variations of an environment to run each job in.
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
node: [12]
# The runners that the job will run on
runs-on: ${{ matrix.os }}
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- name: Setup Node.js environment
uses: actions/[email protected]
with:
node-version: ${{ matrix.node }}
- name: Checkout master branch
uses: actions/checkout@v2
- name: Cache node_modules
uses: actions/[email protected]
with:
# A list of files, directories, and wildcard patterns to cache and restore
path: node_modules
# An explicit key for restoring and saving the cache
key: ${{ matrix.os }}-node-v${{ matrix.node }}-deps-${{ hashFiles(format('{0}{1}', github.workspace, '/package-lock.json')) }}
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm install
- name: Run ESLint
run: npm run lint
- name: Run unit tests
run: npm run test:unit
- name: Code coverage
uses: codecov/[email protected]
나는 이것이 도움이 되기를 바란다. 너는 이 직위를 떠나서 새로운 것을 배우지 마라.읽어주셔서 감사합니다. 궁금한 게 있으면 저에게 물어보세요.If you want to use more badges as the one for the coverage, check this website: https://badgen.net/ (it's amazing!)
Reference
이 문제에 관하여(GitHub 작업을 사용하여 프런트엔드에 CI를 추가하는 방법 - NuxtJS 사례 연구), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dawntraoz/how-to-add-ci-to-your-frontend-with-github-actions-nuxtjs-case-study-4fle텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)