All that I've dreamed of

[Github Actions] tmate 로 디버깅 / 접속 오류해결 본문

ETC

[Github Actions] tmate 로 디버깅 / 접속 오류해결

_베토디 2023. 12. 4. 16:50
반응형

Github Actions 를 실행하다보면 절대 오류 한번없이 무사히 넘어가는 법이 없어여..😗

 

로컬이나 도커컨테이너처럼 직접 디버깅을 할 수 없어

출력되는 오류메시지만 확인하고 수정하고 다시 푸시하고

한참 기다리고 성공할 때까지 반복했어요 😒

 

tmate 는 직접 github actions 시스템에 접속해서 디버깅을 할 수 있게 해주는 라이브러리입니다!

사용법도 아주 간단쓰

 

일단 저는 django 프로젝트를 github에 push 하면

github actions 가 실행되도록 스크립트를 만들어 주었어요

 

 

.github/workflows/ci.yml

name: Django CI

on:
  push:

jobs:
  ci:
    runs-on: ubuntu-latest
    steps:
      - name: Check out the codes
        uses: actions/checkout@v3

      - name: Setup python environment
        id: setup-python
        uses: actions/setup-python@v3
        with:
          python-version: 3.11

      - name: Install Poetry
        run: |
          curl -sSL https://install.python-poetry.org | python3 -
          echo "${HOME}/.local/bin" >> $GITHUB_PATH

      - name: Install dependencies
        run: |
          ${HOME}/.local/bin/poetry install

      - name: Test python project
        run: |
          poetry run python manage.py test
 

 

그리고 발생한 데이터베이스 오류

 

  File "/home/runner/.cache/pypoetry/virtualenvs/django-advanced-CWbF5W-7-py3.11/lib/python3.11/site-packages/pymysql/connections.py", line 358, in __init__
    self.connect()
  File "/home/runner/.cache/pypoetry/virtualenvs/django-advanced-CWbF5W-7-py3.11/lib/python3.11/site-packages/pymysql/connections.py", line 711, in connect
    raise exc
django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")
 

 

데이터베이스가 없어서 오류가 나는 듯 싶네요. (당연ㅎ)

자 그러면 tmate로 직접 디버깅을 해보자구요

 

tmate

 

https://github.com/marketplace/actions/debugging-with-tmate

 

Debugging with tmate - GitHub Marketplace

Debug your GitHub Actions Environment interactively by using SSH or a Web shell

github.com

 

 

 

 

tmate docs

name: CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Setup tmate session
      uses: mxschmitt/action-tmate@v3
 

사용법은 아주 간단하게 yml 파일 안에 uses: mxschmitt/action-tmate@v3 만 추가해 주면 된대요!

전 Test python project 스텝에서 오류가 발생했으니 그 위에 tmate를 추가해 줬어요

 

 

수정된 ci.yml

name: Django CI

on:
  push:

jobs:
  ci:
    runs-on: ubuntu-latest
    steps:
      - name: Check out the codes
        uses: actions/checkout@v3

      - name: Setup python environment
        id: setup-python
        uses: actions/setup-python@v3
        with:
          python-version: 3.11

      - name: Install Poetry
        run: |
          curl -sSL https://install.python-poetry.org | python3 -
          echo "${HOME}/.local/bin" >> $GITHUB_PATH

      - name: Install dependencies
        run: |
          ${HOME}/.local/bin/poetry install

      - name: tmate 세션
        uses: mxschmitt/action-tmate@v3

      - name: Test python project
        run: |
          poetry run python manage.py test
 

 

이렇게 다시 한번 github actions를 실행하면 tmate 스텝에서 무한루프가 돌게 되는데

 

 

SSH: ssh KbAcPqU7tUFhq8dPtUFhq8dP@sfo2.tmate.io
or: ssh -i <path-to-private-SSH-key> KbAcPqU7tUFhq8dPtUFhq8dP@sfo2.tmate.io
SSH: ssh KbAcPqU7tUFhq8dPYtUFhq8dP@sfo2.tmate.io
or: ssh -i <path-to-private-SSH-key> KbAcPqU7tUFhq8dPtUFhq8dP@sfo2.tmate.io
 

이런식으로 시스템에 접속할 수 있는 주소가 무한반복으로 출력돼요

그러면 ssh ~~.tmate.io 이 부분을 복사해서

터미널에 붙여 넣어줄게요

 

그런데...?

역시나 한 번에 또 성공할리가요

계속해서 아래와 같이 권한이 없다고 나오는 게 아니겠어요?

 

KbAcPqU7tUFhq8dPtUFhq8dP@sfo2.tmate.io: Permission denied (publickey).
 

 

왠지 ssh key 를 이용해 ssh -i <path-to-private-SSH-key> KbAcPqU7tUFhq8dPtUFhq8dP@sfo2.tmate.io

이 주소로 접속하면 될 것 같은 기분 ..🤔?

 

* 맥 사용자입니다

 

cd ~/.ssh

.ssh 폴더로 이동하면 id_rsa (개인키)와 id_rsa.pub (공개키)가 있을 거에요

없으면 ssh-keygen 입력해서 만들어 주면 됩니다

 

ssh -i id_rsa.pub KbAcPqU7tUFhq8dPtUFhq8dP@sfo2.tmate.io 로 실행을 해봤어요

 

 

물론 github 에 ssh 키도 등록해 주었죠...

그래도 안돼요 ㅠㅠ

chmod 777로 공개키에 권한도 줘봤지만 안돼요...

 

 

이럴 땐 공식문서를 다시 쭉 읽어 봅니다 흑흑

오 ssh 키 관련 부분이 있네요!

 

 

 

 

 

그리고 조금전 실행했던 github actions 로그들을 보니

 

 

 

 

limit-access-to-actor 부분이 auto 로 되어있네요?

 

limit-access-to-actor: true 로 하면 ssh 키로 시스템에 접속하게 해준다

-> 내 로그를 보니 limit-access-to-actor가 auto 로 되어있다

-> ssh 주소로 접속하려고 하면 ssh 권한 오류가 발생한다

-> limit-access-to-actor 를 false로 바꿔주면 ssh 없이 접속할 수 있지 않을까?

해서...

 

ci.yml 의 tmate 스텝 부분을 아래와 같이 변경해 주었습니다

 

      - name: Setup tmate session
        uses: mxschmitt/action-tmate@v3
        with:
          limit-access-to-actor: false
 

 

그리고 다시한번 실행!

 

 

아까와는 접속주소가 다르게 나오네요?

ssh 키를 이용한 접속이 아닌 web 접속과 터미널 접속 두가지 방법이 나와요

그런데 web 접속은... 오류가 많아요 😡

터미널에서 ssh gp872qcbp~~~@sfo2.tmate.io 를 복붙 후 실행해 줍니다!

 

 

그러면 오예! 실행이 됩니다

저는 데이터베이스가 없어서 오류가 발생했던 것이기 때문에

mysql 실행 후 데이터베이스 생성해 주고 설정도 settings.py 에 맞게 변경해 주었더니

무사히 잘 동작했어요!

 

일단 tmate 는 무한루프가 돌고 있는 동안에만 시스템에 접속이 가능하기 때문에

디버깅을 마쳤다면 cancel workflow 를 해주시고

다시 github actions 를 실행할 땐 tmate 스텝 부분은 지우거나 주석처리 해주시면 됩니당!

 

 

Comments