github actions

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  보다는 뒤에 기능이 추가가 되었다.

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