-
[Github] Github Action으로 테스트자동화 및 npm에 자동배포하기ETC 2021. 3. 28. 21:51반응형
작년 이맘때 npm 배포를 익혀볼 겸 만들었던 nodeJS 기반 CLI 툴이 있었다. "shellcut" 이란 이름을 가진 tool이며 0.0.2 버전을 끝으로 사실상 관리는 안하고 있었다.
그러다 Github Action으로 배포자동화를 경험해볼 겸 끄집어 내었다. 기존 프로젝트는 테스트환경과 사용환경 구분 없이 npm global 설치위치에 shellcut 파일을 생성하고 있었다. 따라서 jest를 이용한 단위 테스트시 실제 사용하는 영역을 건드리는 불상사(?)가 있었다.
0.0.3은 이 불상사를 제거한 버전이며, cross-env 패키지를 추가 적용했다.
1. npm 로그인 및 access token 생성
npm 사이트에 로그인 후 계정 아이콘을 눌러 Access Tokens 메뉴를 선택한다.
선택하면 Access Tokens 메뉴가 표시된다. Generate New Token 을 선택한다.
테스트 및 배포 자동화 목적이므로 Automation 을 선택하고, Generate 한다.
생성하면 새로운 Token이 화면에 표시된다. 이 Token은 최초 한번만 화면에 표시되므로 별도의 위치에 잘 보관해둬야 한다.
2. 템플릿 선택
Github 리포지토리 페이지에서 Actions 탭을 누르면 아래와 같이 제안된 Workflows가 표시된다. shellcut 리포지토리에 nodeJS 소스 및 배포관련 파일들이 보관되어 있기 때문에 자동으로 제안해준다.
만약 제안되지 않을 경우, 직접 리포지토리로 찾아가 복사해와야 한다.
(모든 코드를 직접 짜는건 힘들다. 😅)
선택하고 나면 텍스트 에디터가 표시된다. 에디터에는 아래와 같은 내용이 자동추가된다.
* 2021년 03월 기준이기 때문에 향후에 내용이 다를 수도 있음
# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created # For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages name: Node.js Package on: release: types: [created] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: node-version: 12 - run: npm ci - run: npm test publish-npm: needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: node-version: 12 registry-url: https://registry.npmjs.org/ - run: npm ci - run: npm publish env: NODE_AUTH_TOKEN: ${{secrets.npm_token}} publish-gpr: needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: node-version: 12 registry-url: https://npm.pkg.github.com/ - run: npm ci - run: npm publish env: NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
publish-npm job 영역에 registry-url을 사전에 배포한 패키지의 url로 변경해준다.
registry-url: https://registry.npmjs.org/shellcut
npm과 gpr(GitHub Packages)에 배포하는 workflow가 존재하는데, npm에만 배포할 예정이므로 publish gpr은 주석처리한다.
# publish-gpr: # needs: build # runs-on: ubuntu-latest # steps: # - uses: actions/checkout@v2 # - uses: actions/setup-node@v1 # with: # node-version: 12 # registry-url: https://npm.pkg.github.com/ # - run: npm ci # - run: npm publish # env: # NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
env 영역에 NODE_AUTH_TOKEN : ${{secrets.npm_token}} 를 보면 고정된 텍스트가 아닌 변수를 사용함을 알 수 있다.
이 변수명을 잘 기억해두자. 다음 단계에서 사용해야한다.
Start commit을 눌러 파일 추가를 완료한다.
3. 리포지토리에 Secret 적용
리포지토리의 Settings 탭으로 이동한 뒤, Secrets 메뉴에서 New repository secret을 눌러준다.
이전 단계에서 생성했던 npm token을 "npm_token"이란 이름의 Secret 값으로 추가한다.
4. Release 시켜 배포자동화 테스트 확인
템플릿을 통해 만든 Github Action의 실행조건이 Release create 이기 때문에 Release 를 생성해줘야 한다.
on: release: types: [created]
리포지토리의 code 탭에 가면 오른쪽에 Release 메뉴가 보일 것이다. 해당 영역을 선택한다.
* 배포 이후에 스크린샷을 남기는 바람에 이미 태그가 존재한다.추가버튼을 누르면 태그 입력과 릴리즈에 대한 설명을 작성하는란이 표시된다. 필요한 내용을 작성한 후, "Publish release"를 누른다.
생성하고 나면 소스코드 압축본이 담긴 Release 가 기록된다.
Actions로 돌아가보면 package 배포 액션이 동작한 것을 확인할 수 있다.
* 스크린샷의 실패사유는 gpr을 제대로 안지워서 생긴 이슈이다. 😅
npm 사이트로 돌아가보면 신규 버전으로 배포된 패키지를 확인할 수 있다.
* 태그명이 0.0.3이라고해서 0.0.3으로 기록되어 배포된게 아니다. 해당 과정을 수행하기전에 package.json 에서 버전 값을 0.0.3으로 바꿨기 때문이다.
이것으로 배포 뻘짓을 진행해보았다.
유의사항
배포과정을 진행하면서 npm ci 명령어를 위해 package-lock.json이 필요하다는 것을 깨닫게 되었다.
반응형'ETC' 카테고리의 다른 글
[Java] WSL2 기반 VSCode에서 Java 개발환경 구축 (0) 2021.04.10 [Java] WSL2 기반 우분투에 AdoptOpenJDK 설치 (0) 2021.04.10 [SSH] VSCode에서 SSH 연결이 안될때 known_hosts에서 해당IP를 제거해볼것 (0) 2021.03.16 [SSH] AWS Lightsail 인스턴스에 Visual Studio 연결 (0) 2021.03.13 [javascript bundle] 추가한 또는 추가할 npm package의 size를 확인할 수 있는 사이트 BundlePhobia (0) 2021.02.27