안녕하세요! 넓은 스펙트럼을 바탕으로 전체적인 그림을 보는 Ops Engineer 이재하입니다.
이번 글에서는 github 메인 소개글인 ops-jaeha의 README를 수정할 때 자동으로 로컬에 텍스트 파일을 만드는 것을 예시로 진행하겠습니다.
Github Runners란 Github Actions에서 사용자가 지정하는 로컬 컴퓨팅 자원으로 빌드를 수행하도록 설정하는 기능입니다.
먼저 Github Action을 설정할 Repository를 하나 생성 혹은 들어가주세요.
먼저 Repository의 Settings → Actions → Runners → New self-hosted runner로 이동해주세요.
host의 OS에 따라 아키텍처를 선택해준 뒤 명령어를 똑같이 실행해줍니다.
옵션은 모두 default로 설정해도 상관없습니다. 설정할 것이 따로 없다면 엔터로 default로 지정해주세요.
./config.sh --url https://github.com/ops-jaeha/ops-jaeha --token
--------------------------------------------------------------------------------
| ____ _ _ _ _ _ _ _ _ |
| / ___(_) |_| | | |_ _| |__ / \ ___| |_(_) ___ _ __ ___ |
| | | _| | __| |_| | | | | '_ \ / _ \ / __| __| |/ _ \| '_ \/ __| |
| | |_| | | |_| _ | |_| | |_) | / ___ \ (__| |_| | (_) | | | \__ \ |
| \____|_|\__|_| |_|\__,_|_.__/ /_/ \_\___|\__|_|\___/|_| |_|___/ |
| |
| Self-hosted runner registration |
| |
--------------------------------------------------------------------------------
# Authentication
√ Connected to GitHub
# Runner Registration
Enter the name of the runner group to add this runner to: [press Enter for Default]
Enter the name of runner: [press Enter for ijaehaui-MacBookPro] jaehai-macbook
This runner will have the following labels: 'self-hosted', 'macOS', 'ARM64'
Enter any additional labels (ex. label-1,label-2): [press Enter to skip]
√ Runner successfully added
√ Runner connection is good
# Runner settings
Enter name of work folder: [press Enter for _work]
√ Settings Saved.
해당 작업은 root 권한이 필요합니다. Runners의 경우 로컬에서 Github 측으로 터널을 열어 사용하게 되는데, 이때 터널을 열기 위해서는 actions-runner 폴더에 run.sh을 사용합니다. 매번 사용할 때마다 쉘 스크립트를 실행하기 귀찮다면 svc.sh을 실행시켜 상시 터널을 오픈할 수 있습니다.
# actions-runner 폴더에서 실행ㅎ
{
./svc.sh install
./svc.sh start
}
다시 Runners 페이지를 새로고침 한다면 Idle로 잘 등록되어있는 것을 보실 수 있습니다.
이제 Github Actions Workflow를 생성하여 main branch에 수정사항이 발생할 경우 자동으로 로컬 폴더에 내용을 변경해보도록 하겠습니다.
{
mkdir -p .github/workflows
touch .github/workflows/main.yaml
}
name: Deploy
on:
# branch main에 git이 push 될 때
push:
branches: ["main"]
jobs:
deploy:
# runner에서 등록해준 사용자 태그 지정
# 태그는 리스트 안에 들어가있는 모든 태그가 성립해야 진행됨
runs-on: [self-hosted]
steps:
- name: Create text file
run: touch ~/projects/infra-cd-document/deploy.txt
deploy_2:
runs-on: [self-hosted, Personal-Server]
steps:
- name: Create text file
run: touch ~/projects/infra-cd-document/deploy_2.txt
github action workflow를 등록 후 deploy.txt가 생성된 모습을 보실 수 있습니다.
하지만 deploy_2.txt의 경우 runs-on 옵션에 Personal-Server라는 Runners 태그가 없기 때문에 생성되지 않았습니다.
이렇게 Github Runners를 이용해서 외부 포트 없이 로컬 서버에 배포할 수 있도록 설정을 해보았습니다.
Private Subnet으로 배포를 하기 위해 NAT Gateway를 사용하는 작업도 없이 사용할 수 있는 것이 큰 장점인 서비스이며, Github와 터널을 1대1로 열기 때문에 안전하게 사용할 수 있습니다.
추후에 모든 기술 블로그는 jaehai.com/post에 업로드 될 예정입니다.
제 글이 도움이 되셨다면 ops-jaeha Github 팔로우 부탁드리겠습니다!