최근 개인 프로젝트를 진행하기 위해 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 파일이 정상적으로 생성된 것을 확인할 수 있다.
'개발 노트 > Etc.' 카테고리의 다른 글
[개발환경] WSL Go 설치 및 VSCode 설정 (1) | 2022.09.25 |
---|---|
[OracleDB] 오라클 클라우드 자율운영 DB 연동 (w/ Python in Linux) (0) | 2022.09.25 |
[Node] Express, helmet 라이브러리 ALLOW-FROM ALL (0) | 2022.02.07 |
[API] 재무제표 및 ROE 조회 API (0) | 2021.07.08 |
[Python] Django 실행 시 sqlite3 버전 이슈 (2) | 2021.06.22 |