CI/CD 자동배포, Variable과 Secrets를 혼동해서 생긴 문제

Alex·2024년 10월 27일
0

Plaything

목록 보기
2/118

Plaything의 오가니제이션에 있는 레포지토리에서 CI/CD를 구축하는 과정에서 SSH Key를 등록해야 한다는 문구가 나왔다.

그 동안 잘만쓰던 깃헙액션 CI/CD 스크립트와 환경변수인데 왜 안된다는건지 하루종일 이것만 붙잡아서 해결했다.

로컬에서 SCP 전송은 돼?

우선 내 로컬에서 scp로 EC2에 파일을 전송을 해보려고 했다.

처음에는 잘 안 됐는데 명령어의 문제여서 아래처럼 작성하니 파일이 잘 갔다.

$ scp -i 키 이름"C:\Users\정연호\Downloads\Source_Code\client\package.json" ubuntu@IP 주소:/home/ubuntu/

그러면, KEY 자체에 문제가 있는 것은 아닌 거 같았다.

디버깅은 제대로 해봤어?

jobs:
  Deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Github 레포지토리에 올린 파일들을 불러오기
        uses: actions/checkout@v4

      - name: JDK 17버전 설치
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 17

      # Debug 단계 추가
      - name: Debug SSH connection
        run: |
          echo "Setting up SSH debug directory"
          mkdir -p ~/.ssh
          echo "${{ secrets.EC2_PRIVATE_KEY }}" > ~/.ssh/key.pem
          chmod 600 ~/.ssh/key.pem
          echo "Attempting SSH connection with verbose logging"
          ssh -vvv -i ~/.ssh/key.pem -o StrictHostKeyChecking=no ubuntu@${{ secrets.EC2_HOST }}
        continue-on-error: true

      - name: Check key format
        run: |
          echo "Checking private key format"
          ssh-keygen -l -f ~/.ssh/key.pem || echo "Invalid key format"

해결이 안 돼서 깃헙액션 스크립트에 디버깅 단계를 추가했다.

secrets.EC_HOST를 resolve할 수 없다는 로깅이 떴다.
EC_HOST 값을 읽어오지 못하는 상황같아서 좀더 자세하게 디버깅을 했다.

      - name: Debug SSH connection
        run: |
          echo "Setting up SSH debug directory"
          mkdir -p ~/.ssh
          echo "Host value check:"
          echo "Host value: ${{ secrets.EC2_HOST }}"
          if [ -z "${{ secrets.EC2_HOST }}" ]; then
            echo "EC2_HOST is empty!"
            exit 1
          fi
          
          echo "Private key check:"
          echo "${{ secrets.EC2_PRIVATE_KEY }}" > ~/.ssh/key.pem
          chmod 600 ~/.ssh/key.pem
          if [ ! -s ~/.ssh/key.pem ]; then
            echo "Private key file is empty!"
            exit 1
          fi
          
          echo "Key format validation:"
          ssh-keygen -l -f ~/.ssh/key.pem || {
            echo "Invalid private key format"
            exit 1
          }
          
          echo "Testing SSH connection with verbose logging:"
          ssh -vvv -i ~/.ssh/key.pem -o StrictHostKeyChecking=no ubuntu@${{ secrets.EC2_HOST }}
        continue-on-error: true

EC2_HOST 자체가 비어있다고 한다.

혹시 내가 CI/CD 환경설정을 잘못한건가 싶어서 강의를 다시 봤는데...

여태까지 Variables에 값을 넣고
secrets.EC_HOST이렇게 값을 가져오려고 해서 문제가 발생한 거였다...
Variables는 비밀정보가 아닌 일반 정보를 넣어놓는 변수라고 한다.

어쩐지 저렇게 값이 다 표시가 돼서 이상하다고 생각했다.
원래는 내가 만든 시크릿 변수라고 해도 값이 표시되지 않았다.

그래서, 1차 당황을 했다.
그렇다면, 이 변수를 다른 사람들이 다 볼 수 있었다는 것이다...
다행히 AWS 결제 정보를 보니 문제는 없었던 것으로 보인다.

그래서, 부랴부랴 EC2와 RDS를 다 지워버렸다.
지금 RDS를 EC2를 통해서만 접근할 수 있게 했지만...
그래도 위험한 상황이었다.

이거 때문에 하루종일 CI/CD 스크립트를 변경했는데(허탈)
그래도 이참에 디버깅 방법을 새로 배워서 좋았다..

profile
답을 찾기 위해서 노력하는 사람

0개의 댓글