본 글은 Bryant Son 님의 "GitHub를 통해서 배워보는 기업용 파일 버전관리, 데브옵스 (DevOps)" 를 듣고 정리한 포스트입니다.
소프트웨어 개발이란 뜻을 가진 Development, 그리고 IT 운영/관리의 Operations, Ops를 합친 단어로 시스템 개발 수명 주기(System Development Life Cycle) 혹은 SDLS에 포함되는 소프트웨어 개발 방법론이라고 볼 수 있습니다.
누구나 DevOps가 과장된 유행이라고 주장할 수는 있습니다.
하지만 아마존같은 회사가 DevOps 프로세스를 사용해서 하루에 23,000 번 이상 Production 환경에 배포하고 구글도 DevOps 프로세스를 통해서 매일 5,500번 이상 배포를 하는 건 부인할 수 없는 팩트입니다.
DevOps는 Development의 Dev 그리고 Operations의 Ops를 합친 언어입니다.
Dev: 개발자의 목적은 자신들이 만든 코드나 업데이트를 더 빨리 Merge하고 Production 환경에 배포하기입니다.
Ops: 운영의 목적은 365일 24시간 문제없이 안전하게 돌리기 위한 것입니다.
이 두가지 상반된 역할을 해결하기 위해 만든 개념입니다. 그래서 더 빠르게 배포하는 동시에 더 안전하게 운영하는 게 가능해지는 것입니다.
Agile같이 소프트웨어를 효율적으로 관리하기 위해 필요한 시스템 개발 수명 주기 관점.
그리고 툴 뿐만 아니라 자주 commit하고 배포하는 등 문화적인 변화가 필요하다고 설명합니다.
CI/CD(Continuous Integration & Continuous Delivery/Deployment) 이나 Configuration Management 툴들을 사용해서 원래 수동으로 했던 작업들을 자동화시키는 게 핵심
GitHub Actions, TEKTON, Azure DevOps, Jenkins, argo, cirleci, flux, Travis CI, Atlassian Bamboo, ...
ANSIBLE, Pulumi, Terraform, AWS CloudFormation, CHEF, SALTSTACK ,...
kubernetes, AWS EC2, HashCorp Nomad, Red Hat OpenShift, Apache MESOS, heroku
이 외에도 굉장히 많은 툴들이 있다. - https://landscape.cncf.io/
Continuous Integration 그리고 Continuous Delivery/Deployment의 약자로 파이프라인을 통해 코드나 인프라를 스테이지별로 나누어 빌드, 테스트, 배포 등등 실행하는 걸 뜻합니다.
Google이 만든 분야 & 포지션으로 데브옵스는 전체적인 자동화와 배포를 목적으로 하는 데, 더 세부적으로 Production 환경을 문제없이 돌아가게 하기 위해 만든 DevOps의 Specialized한 분야 혹은 포지션
GitHub Action은 워크플로우를 자동화시켜주는 GitHub 서비스입니다.
회사 및 다양한 커뮤니티가 만든 깃허브 액션 그리고 깃허브 앱을 찾을 수 있는 앱스토어같은 웹 사이트
.github/workflows
라는 곳에 YAML
형태의 파일이 만들어져야 합니다..yaml
이나 .yml
로 YAML
파일을 만듭니다. indentation이 중요합니다.${{ secrets.CUSTOM_SECRET }}
# 워크플로우 이름
name: Super Linter workflow
# 어떤 이벤트에 트리거되는지 정의. 이 경우에는 Push 이벤트
on:
push:
# 다양한 Job들을 설정
jobs:
lint:
# 사람이 읽을 수 있는 Job Name
name: Lint Code Base
# runner 설정. 이 경우에는 깃허브 제공 기본 러너중 하나인 Ubuntu 최신버전
runs-on: ubuntu-latest
# 다양한 스텝을 정의
steps:
# 먼저, 레포에서 체크아웃
- uses: actions/checkout@v2
# Super Linter 깃허브 액션 플러그인 사용
- uses: github/super-linter@v3
env:
# GitHub Secret을 읽어서 사용
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}