github actions trouble shooting 이라고 뭔가 거창하게 쓰긴 했지만 github actions 를 사용하는 과정에서 회사 내부 github repository 를 모듈로써 설치해야 하는 경우 겪었던 문제와 그 해결에 대해 간단하게 적어보도록 하겠습니다.
문제는 github actions 으로 테스트를 하던 publish 를 하던 npm install 을 하는 과정에서 발생했습니다.
해당 repository 에선 내부 공통 모듈로 작성된 특정 repository 를 사내 github 으로부터 설치해서 사용중이었는데..
문제는 github actions 이 돌아가는 장비에서 사내 github 으로 접근이 안되는 부분이었습니다.
"dependencies": {
"axios": "^1.3.4",
"typescript": "^4.9.5",
"AAA": "github:xxx/AAA#v1.0.2",
},
예를 들어 위처럼 package.json > dependencies 에 AAA 라는 내부 모듈이 정의되어 있는 경우입니다.
별 이상이 없겠거니 하고 workflows 의 yml 에는 다른 설정 없이 npm install 을 할 때 아래와 같은 에러로 실패하게되는데요.
사내 github 에 접근할 때 ssh 를 사용하게 되는데 이 때 권한이 없는 문제입니다.
별 삽질을 다 해봤는데 문제를 해결하기 위해선 github actions 이 돌아가는 장비에서 github.com 에 대한 ssh host 를 등록하고,
ssh private key 를 추가해주는 과정이 필요합니다.
jobs:
install:
name: "Install Dependencies"
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
steps:
- uses: actions/checkout@v3
- name: Setup SSH-keys and known_hosts
env:
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
run: |
mkdir -p ~/.ssh
ssh-keyscan github.com >> ~/.ssh/known_hosts
ssh-agent -a $SSH_AUTH_SOCK > /dev/null
ssh-add - <<< "${{ secrets.SSH_PRIVATE_KEY }}"
- uses: actions/setup-node@v3
with:
node-version: 12
- name: Install Dependencies
run: npm install
env:
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
- run: npm run build
위는 제가 해결한 github actions yml 파일 내용입니다. ssh key 와 known hosts 를 셋업하는 step 이 핵심인데,
SSH_AUTH_SOCK env 세팅과 ssh keyscan 후 known hosts 등록, private key 를 추가해주니 내부 github private repository 에 대한 ssh 접근이 해결 되었습니다.
물론 아예 다른 대안을 사용할 수도 있었겠지만, 뭔가 이 상황에서 해결을 하고 싶었던.. 것이었습니다.
내용이 좀 짧은 듯 하여 github actions 를 통해 npm publish 할 때 사용하는 액션 및 syntax 에 대해 소개하고 가도록 하겠습니다.
github actions 를 사용하기 위해 정의하는 yml 에 들어가는 내용 중 uses 에는 여러가지 액션을 넣을 수 있습니다.
- name: get-npm-version
id: package-version
uses: martinbeentjes/npm-get-version-action@main
if: always()
- name: slack noti
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
author_name: Publish module ${{ steps.package-version.outputs.current-version }}
fields: repo,author
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
if: always()
먼저 get-npm-version 부분입니다. 제가 하고 싶었던건 npm publish 후 해당 버전이 배포되었다고 slack noti 를 하는 것인데, 이 버전을 package.json 으로부터 읽어오고 싶었습니다. 처음엔 뭐 직접 짜야되나.. 싶었지만 역시나 이런것들을 다 만들어서 올리는 사람들이 있더라구요. martinbeentjes/npm-get-verison-action 액션을 사용하면 package.json 파일의 version 부분을 읽어옵니다.
다음은 slack 에 메세지를 보내는 부분입니다. 이 또한 webhook 을 통해 직접 스크립트를 짜야하나 싶었지만.. 역시나 만들어져있는게 있습니다. 찾아보면 slack 용 위와 같은 액션은 여러개가 있는데, 적당한 걸 골라서 쓰시면 됩니다.
8398a7/action-slack@v3 액션을 사용해 저처럼 설정하면, 아래와 같은 포맷으로 잡이 완료되었을 때 메세지가 옵니다.
if 문법을 사용해 항상 메세지가 오도록 설정했으므로, 실패하면 Failed Github Actions 메세지가 오게 됩니다.
이런 여러가지 액션들은, github marketplace 에서 찾아볼 수 있으니 github actions 로 workflow 를 작업할 때 찾아보고
골라서 사용하시면 되겠습니다.
'Backend > Git' 카테고리의 다른 글
Use github actions (0) | 2022.11.26 |
---|---|
(Github) git 계정 여러개 사용하기 (0) | 2021.11.20 |