본문 바로가기

개발 노트/Etc.

[CI/CD] Github Actions 로 SSH 사용하여 CD 하기

반응형

최근 개인 프로젝트를 진행하기 위해 CI/CD 구성을 하기 위해 배포 플랫폼과 CI/CD 툴에 대해 조사를 진행했다.

 

결론부터 말하자면 서비스를 배포할 플랫폼은 오라클 클라우드이고 CI/CD 툴은 Github Actions 로 정했다.

 

이유는 무료 클라우드 VM 서비스 중 오라클 클라우드가 평생 무료 서비스로 최대 2대 까지 운영이 가능했고

소스 버전 관리로 Github 을 사용하면 Actions 기능으로 바로 CI/CD 를 구성할 수 있었기 때문이다.

 

오라클 클라우드로 VM 서버를 구성하는 포스트들은 구글에 많이 나와있어서 구성하는 것은 어렵지 않았지만 Github Actions 에서 SSH 를 사용해 VM 서버에 명령을 날리는데 에러가 발생하여 이를 해결하는 방법을 기록한다.

 

Github Actions, SSH 사용하기

1) repository home 경로에 .github/workflows/ssh_deploy.yml 파일 추가

github 웹 페이지에서 "Add file" > "Create new file" 을 선택하여 배포할 스크립트를 작성할 수 있다.

2) ssh_deploy.yml 파일 작성

name: deploy


on: 
  # to build manually 
  workflow_dispatch:
    inputs:
      name:
        description: "Person to greet"
        required: true
        default: "bossm0n5t3r"
      home:
        description: "location"
        required: false
        default: "The Octoverse"
  # to build for every push
  push:
    branches:
      - master

jobs:
  AUTO_DEPLOY:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Run scripts in server
        uses: appleboy/ssh-action@v0.1.3
        with:
          host: ${{ secrets.SSH_IP }}
          username: ${{ secrets.SSH_ID }}
          key: ${{ secrets.SSH_KEY }}
          port: ${{ secrets.SSH_PORT }}
          script: |
            date > /home/ubuntu/date
            echo 1 >> /home/ubuntu/date

간략하게 내용을 설명하자면

 

.on.workflow_dispatch 의 내용은 Github Actions 페이지에서 수동으로 재빌드를 할 수 있도록 하는 설정이다. 

.on.push 는 master 브랜치에 push 가 발생할 때 아래 jobs 의 내용을 실행한다는 설정이다.

.jobs.AUTO_DEPLOY.steps 의 'Run scripts in server' 항목은 appleboy/ssh-action 이라는 미리 작성되어 있는 스크립트를 사용해 원격 서버에 SSH 명령을 보낼 수 있도록 하는 것이다. 이 스크립트를 동작시키기 위해서는 with 에서 각 설정 값들을 입력해 주어야 하는데 민감 정보 (배포 서버 IP, SSH Key 등)는 Github 의 Secrets 에 변수 설정을 하고 이를 불러와서 예시와 같이 등록한다.

 

Github repository 웹 페이지의 "Settings" 탭으로 들어가면 좌측 Nav 에서 "Security" > "Secrets" > "Actions" 메뉴로 들어가 Actions 에서 사용할 변수를 설정할 수 있다. 여기서 구축한 오라클 클라우드 VM 서버의 SSH 접속 정보를 설정한다.

3) 배포하기

Github repository 웹 페이지의 Actions 탭을 클릭하여 설정한 workflows 들의 상태를 확인하고, 수동으로 build 를 실행할 수 있다.

ssh_deploy.yml 파일에서 name 을 "deploy" 로 하여 좌측 Nav 에서 "deploy" 이름의 workflow 가 보인다.

이를 선택하여 "Run workflow" 셀렉트 박스를 클릭하여 수동으로 workflow 를 실행할 수 있다.

 

4) 에러 확인하기

 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain

배포 실행 시 위와 같은 "ssh: handshake failed ... " 에러 메시지가 찍히며 ssh 명령을 실행되지 않는 것을 알 수 있다.

원인은 ssh handshake 버전이 달라서 인 것 같다.

5) ssh 서버 설정하기

여기서부터는 오라클 클라우드 VM 서버의 설정이 필요하다.

VM 서버에 SSH 접속하여 sshd 서비스 설정을 변경 후 재시작 한다. (링크 참고)

 

/etc/ssh/sshd_config 파일에서 아래 내용과 같이 Pubkey 에 대한 설정을 한다.

# /etc/ssh/sshd_config
...
PubkeyAuthentication yes
PubkeyAcceptedKeyTypes=+ssh-rsa
...

이후 sshd 서비스를 재시작 한다.

sudo systemctl restart sshd.service

6) 3) 배포하기 재실행

이제 배포하기 재실행 시 성공 메시지를 확인하고 VM 서버의 /home/ubuntu/date 파일이 정상적으로 생성된 것을 확인할 수 있다.

반응형