github actions
- 1 github actions 소개
- 2 github actions
- 2.1 GitHub Actions 배우기
- 2.2 actions 만들기
- 2.3 Encrypted secrets
- 2.4 environments
- 2.5 github actions 제한
- 2.6 github self-hosted runners
- 2.7 기타
- 2.7.1 교육자료
- 2.7.2 self-hosted runners 에서 ssh 사용
- 2.7.3 AWS s3 연동
github actions 소개
GitHub Actions를 사용하여 리포지토리에서 바로 소프트웨어 개발 워크플로를 자동화, 사용자 지정 및 실행합니다. 작업을 검색, 생성 및 공유하여 CI/CD를 포함하여 원하는 작업을 수행하고 작업을 완전히 사용자 정의된 워크플로에서 결합할 수 있습니다.
github actions
quickstart 에서 간단한 github actions 직접 만들어서 해봄
Quickstart for GitHub Actions - GitHub Docs
guides 에서 주로 사용하는 언어를 골라서 build, test, deploy 하는 예제를 살펴본다.
Guides for GitHub Actions - GitHub Docs
GitHub Actions 배우기
Learn GitHub Actions : github actions 를 이용하여 workflow 를 만드는 방법을 상세히 설명
Writing workflows - GitHub Docs
github actions 과정에 대한 설명, actions 찾기, 조직과 워크플로우 공유하기, 보안 등을 다루고 있음.
actions 만들기
Sharing automations - GitHub Docs
actions는 jobs을 만들고 workflow를 구성하는 개별 작업으로 자신이 직접 만들거나 github 커뮤니티에서 다른 사람들이 만든 것을 이용할 수 있다.
actions는 3가지 타입으로 만들 수 있으며 Docker container, JavaScript, Composite run steps 가 있다. About custom actions - GitHub Docs
Docker container 는 리눅스만 지원한다. JavaScript는 runner 에서 실행이 되며 “JavaScript 작업을 사용하면 작업 코드가 단순화되고 Docker 컨테이너 작업보다 빠르게 실행됩니다.” 라고 문서에 나와있다. Composite run steps 는 쉘스크립트를 이용하여 처리하는 경우로 Docker container, JavaScript 보다는 뒤에 기능이 추가가 되었다.
docker 로 만든 action : https://github.com/actions/hello-world-docker-action
composite run steps action : Creating a composite action - GitHub Docs
javascript 로 만든 action https://github.com/actions/hello-world-javascript-action
Encrypted secrets
Using secrets in GitHub Actions - GitHub Docs
secrets는 조직, 리포지토리 또는 리포지토리 환경에서 생성하는 암호화된 환경 변수입니다. 생성한 비밀은 GitHub 작업 워크플로에서 사용할 수 있습니다.
암호화된 비밀정보. workflow 파일에서 input 이나 environment 변수로 받아서 사용할 수 있음.
리포지토리에 대한 암호화된 비밀 만들기 : 개인 계정 저장소에 대한 비밀을 생성하려면 저장소 소유자여야 합니다. 조직 리포지토리에 대한 비밀을 만들려면 admin
액세스 권한이 있어야 합니다.
리포지토리 기본 페이지 → Settings → Secrets → New repository secret → Name, Value 입력
워크플로에서 암호화된 비밀 사용
steps:
- name: Hello world action
with: # Set the secret as an input
super_secret: ${{ secrets.SuperSecret }}
env: # Or as an environment variable
super_secret: ${{ secrets.SuperSecret }}
environments
environments 를 이용하면 배포시 몇가지 제한을 걸 수 있다. 리뷰어의 승인이 있어야 배포 가능, 트리거 발생후 일정 시간이 지나야 배포 가능, 특정 브랜치만 배포 가능. Free 버전에서는 공개 repo만 지원하며 github teams, enterprise plan 에서는 private repo 에서도 지원을 함.
Managing environments for deployment - GitHub Docs
environments 를 이용한 예제임.
https://dev.to/n3wt0n/everything-you-need-to-know-about-github-actions-environments-9p7
Pull Request 상태 일 때만 Dev에 배포
메인에 커밋하거나 병합 할 때만 스테이징에 배포
스테이징 후 승인을 받아 프로덕션에 배포
github actions 제한
Usage limits, billing, and administration - GitHub Docs
Job execution time : 6시간
Workflow run time : 72 hours
github self-hosted runners
https://sysadmin.atlassian.net/wiki/spaces/COMMONGUIDE/pages/2276720725
기타
교육자료
GitHub Actions를 사용하여 워크플로 자동화 - Training : MS에서 제공하는 자료이며 내용 좋음. github actions에 대한 설명서로 사용을 해도 좋은 수준임.
self-hosted runners 에서 ssh 사용
Running Composer and npm scripts with deployment via SCP in GitLab CI/CD | GitLab 을 참고. 아래에서는 appleboy/ssh-action
을 이용하는 예도 있지만 굳이 필요하지는 않은 듯.
name: ssh
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
#runs-on: ubuntu-latest
runs-on: [self-hosted, linux, X64, share]
steps:
# Runs a set of commands using the runners shell
- name: run ssh
env: # Or as an environment variable
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
run: |
apt-get update
which ssh-agent || apt-get install openssh-client -y
mkdir -p ~/.ssh
eval $(ssh-agent -s)
[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
ssh-add <(echo "$SSH_PRIVATE_KEY")
ssh -p22 test@192.168.33.14 "hostname"
- name: executing remote ssh commands using password
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.PORT }}
script: whoami
AWS s3 연동
https://github.com/aws-actions/configure-aws-credentials