본 글은 Bryant Son 님의 "GitHub를 통해서 배워보는 기업용 파일 버전관리, 데브옵스 (DevOps)" 를 듣고 정리한 포스트입니다.

DevOps 입문

DevOps란?

소프트웨어 개발이란 뜻을 가진 Development, 그리고 IT 운영/관리의 Operations, Ops를 합친 단어로 시스템 개발 수명 주기(System Development Life Cycle) 혹은 SDLS에 포함되는 소프트웨어 개발 방법론이라고 볼 수 있습니다.

누군가 DevOps가 무엇인지 물어본다면?

  • DevOps는 툴만 필요한게 아니라 문화도 중요하다.
    • Fact: Agile은 툴이 없어도 가능하지만 DevOps는 툴이 없으면 불가능합니다.
  • DevOps는 자동화가 중요하지만 자동화가 전부는 아니다.
    • Fact: 하지만 기술적인 핵심은 자동화 툴에 있습니다.
  • DevOps는 그냥 또다른 과장된 유행이다.
    • Maybe: DevOps를 성공적으로 사용해서 큰 효과를 거둔 회사들이 많습니다.

DevOps는 정말 과장된 유행일까요?

누구나 DevOps가 과장된 유행이라고 주장할 수는 있습니다.

하지만 아마존같은 회사가 DevOps 프로세스를 사용해서 하루에 23,000 번 이상 Production 환경에 배포하고 구글도 DevOps 프로세스를 통해서 매일 5,500번 이상 배포를 하는 건 부인할 수 없는 팩트입니다.

DevOps를 사람들에게 설명하는 방법

#1: DevOps 목적 관점

DevOps는 Development의 Dev 그리고 Operations의 Ops를 합친 언어입니다.

Dev: 개발자의 목적은 자신들이 만든 코드나 업데이트를 더 빨리 Merge하고 Production 환경에 배포하기입니다.

Ops: 운영의 목적은 365일 24시간 문제없이 안전하게 돌리기 위한 것입니다.

이 두가지 상반된 역할을 해결하기 위해 만든 개념입니다. 그래서 더 빠르게 배포하는 동시에 더 안전하게 운영하는 게 가능해지는 것입니다.

#2: SDLC(Software Development Life Cycle)와 문화적인 관점

Agile같이 소프트웨어를 효율적으로 관리하기 위해 필요한 시스템 개발 수명 주기 관점.

그리고 툴 뿐만 아니라 자주 commit하고 배포하는 등 문화적인 변화가 필요하다고 설명합니다.

#3: 자동화에 관한 관점

CI/CD(Continuous Integration & Continuous Delivery/Deployment) 이나 Configuration Management 툴들을 사용해서 원래 수동으로 했던 작업들을 자동화시키는 게 핵심

CI/CD

GitHub Actions, TEKTON, Azure DevOps, Jenkins, argo, cirleci, flux, Travis CI, Atlassian Bamboo, ...

Configuration Management

ANSIBLE, Pulumi, Terraform, AWS CloudFormation, CHEF, SALTSTACK ,...

Hosting

kubernetes, AWS EC2, HashCorp Nomad, Red Hat OpenShift, Apache MESOS, heroku

이 외에도 굉장히 많은 툴들이 있다. - https://landscape.cncf.io/

CI/CD는 뭔가요?

CI/CD란?

Continuous Integration 그리고 Continuous Delivery/Deployment의 약자로 파이프라인을 통해 코드나 인프라를 스테이지별로 나누어 빌드, 테스트, 배포 등등 실행하는 걸 뜻합니다.

인프라 관련 DevOps 프로세스 액티비티의 예

  • 클러스터를 프로비저닝
  • 클러스터를 삭제
  • 클러스터를 변경
  • 가상머신 빌드
  • 패키지를 인스톨하거나 인스톨 후 액티비티
  • 네트워크를 변경
  • 저장공간 변경 및 프로비저닝
  • 현재 환경의 백업
  • 현재 환경의 복구

앱데브 DevOps가 필요한 다양한 태스크들의 예

  • 소프트웨어 소스코드를 컴파일하고 빌드
  • 코드 테스트를 실행하고 결과 Output
  • 코드 패키지를 가상머신이나 컨테이너에 배포
  • 코드를 SCM Branch로 merge
  • Agile 시스템에서 유저 스토리나 태스크 관리

SRE(Site Reliability Engineer)는 뭔가요?

Site Reliability Engineer or Site Reliability Engineering

Google이 만든 분야 & 포지션으로 데브옵스는 전체적인 자동화와 배포를 목적으로 하는 데, 더 세부적으로 Production 환경을 문제없이 돌아가게 하기 위해 만든 DevOps의 Specialized한 분야 혹은 포지션

GitHub Actions 입문

GitHub Actions란?

GitHub Action은 워크플로우를 자동화시켜주는 GitHub 서비스입니다.

  • 워크플로우는 YML 파일로 저장됩니다.
  • GitHub 안에 완벽하게 내재되어 있습니다.
  • GitHub Event에 반응합니다.
  • Live Log와 워크플로우 실행을 시각화합니다.
  • 워크플로우는 커뮤니티가 직접 기여할 수 있습니다.
  • GitHub 제공 기본 Runner가 기본으로 제공되지만 직접 호스팅하는 Runner를 쓸 수 있습니다.
  • 암호나 시크릿을 저장할 수 있는 기능이 내재되어 있습니다.

GitHub Actions Marketplace란?

회사 및 다양한 커뮤니티가 만든 깃허브 액션 그리고 깃허브 앱을 찾을 수 있는 앱스토어같은 웹 사이트

  • 다양한 파일들을 커버하는 오픈소스 Action들을 찾을 수 있습니다.
  • 대기업이 만든 안전하고 인증된 Plugin도 찾을 수 있습니다.
  • 워크플로우에 이 액션들을 직접 레퍼런스할 수 있습니다.
  • GitHub Editor에 자동적으로 내재되어 있습니다.

GitHub Actions Architecture

  • 이벤트를 통해 깃허브 워크플로우가 실행됩니다.
  • 워크플로우가 제일 상위 레이어이고 그 밑에 Jobs, 그 밑에는 여러 Step을 정의할 수 있습니다.
  • Job 마다 Runner를 둘 수 있는데, GitHub가 제공하는 GitHub hosted runner, 그리고 직접 가져오는 BYOD 형식의 self-hosted runner가 있습니다.

GitHub Action에서 몇 가지 알아야할 점들

  • GitHub Actions가 인식되기 위해선 .github/workflows라는 곳에 YAML 형태의 파일이 만들어져야 합니다.
  • 파일 이름은 .yaml이나 .ymlYAML 파일을 만듭니다. indentation이 중요합니다.
  • GitHub에서 plaintext 즉 그대로 저장해도 되는 값이 아닌 내용은 GitHub Secrets에 저장하면 됩니다. 예: ${{ secrets.CUSTOM_SECRET }}
  • GitHub Event는 다양한 형태가 있는데 매뉴얼 방식으로 시작할 수 있는 workflow_dispatch, push, Pull Request같은 깃허브에서 발생되는 이벤트, 혹은 cron같은 스케쥴 이벤트도 있습니다.

기본 문법

# 워크플로우 이름
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 }}
            

GitHub Action 마켓플레이스에 있는 액션 사용하기

  • GitHub Action을 사용하기 위한 keyword는 uses입니다.
  • 일반적으로 GitHub Action Marketplace에 있는 Action을 자동으로 인식하고 씁니다.
  • 하지만 레포에 있는 파일을 체크아웃한 다음 repo에 있는 GitHub Action을 쓸 수도 있습니다.

GitHub Context와 GitHub Secrets

GitHub Context란?

  • GitHub Context는 깃허브 액션이 실행될 때 그 워크플로우에 관한 다양한 정보로 어떤 내용을 수집해서 다음 액션을 취하려고 할 때 유용할 수 있습니다.

GitHub Secrets란?

  • GitHub Secrets는 깃허브 리포나 Organization 레벨에서 지정할 수 있는 암호로 안전하게 보호되어 있는 정보를 워크플로우에 사용하기 위해 저장하는 개념입니다.
  • GitHub Secrets는 한번 만들면 값을 바꿀 순 있지만 읽을 수 있는 API는 없습니다.
  • GitHub Secrets 를 레포에 만드는 방법
    • Settings -> Secrets -> Actions -> New repository secret
profile
The Wandering Caretaker

0개의 댓글