IT STUDY LOG

[지속적 통합] 04. 릴리스 준비 본문

devops bootcamp 4/클라우드 서비스 운영

[지속적 통합] 04. 릴리스 준비

roheerumi 2023. 4. 21. 10:07

# 학습 목표

  • 지속적 통합의 필요성을 설명할 수 있다.
    • 지속적 통합 개념이 나오게 된 배경을 이해할 수 있다.
    • 지속적 통합의 장점을 설명할 수 있다.
    • 지속적 통합의 원칙을 이해할 수 있다.
  • 빌드/테스트의 개념을 이해할 수 있다.
    • 테스트 주도 개발(TDD)에 대한 정의와 필요성을 설명할 수 있다.
    • 테스트 주도 개발(TDD) 사이클을 설명할 수 있다.
    • 테스트의 종류 (단위 테스트, 통합 테스트, E2E 테스트)를 설명할 수 있다.
  • 릴리스의 개념을 이해할 수 있다.
  • CI 도구(여기서는 GitHub Action)를 이용하여 지속적 통합이 이루어지는 과정을 직접 구현할 수 있다
  • 다양한 CI 도구의 차이점을 이해할 수 있다.
  • 코드와 환경 변수를 분리해야 하는 이유를 설명할 수 있다.

 


# 학습 내용

1.  환경 변수

- 운영체제/소프트웨어가 각기 다른 컴퓨터, 또는 사용자마다 별도로 가질 수 있는 고유한 정보를 담는데 사용하는 변수

 

환경 변수는 왜 필요한가?

배포되는 기능마다 설정이 달라질 수 있기 때문

- 새로운 배포마다 새롤운 기능들을 배포하게 되어 설정값이 변경되므로

- 코드 버전을 관리하듯이 설정값 버전 관리 필요

 

환경변수를 통해 설정을 분리해야 하는 이유

-  환경 변수는 코드 변경 없이 배포 때마다 쉽게 변경 가능

- 설정 파일과 달리, 잘못해서 코드 저장소에 올라갈 가능성이 적음

- 다른 설정 메커니즘과 달리 언어나 OS에 의존하지 않음

 

설정을 환경 변수를 통해 분리해야 하는 이유에 대한 참조 레퍼런스

 

The Twelve-Factor App

III. Config Store config in the environment An app’s config is everything that is likely to vary between deploys (staging, production, developer environments, etc). This includes: Resource handles to the database, Memcached, and other backing services Cr

12factor.net

- DB 연결 등과 같은 자원 관리, third-party 서비스에 대한 자격 증명, 배포에 대한 호스트명 등 "코드 내부"나 "설정 파일" (ex. yaml)에 지정할 경우 의존적이고, 관리가 힘들고, 보안상 취약할 수 있음

 

환경 변수 설정 예

Linux OS 

- export 명령어

 

코드를 통해 환경변수를 설정하는 법 : node.js

- process.env 파일 사용

 

서비스 내에서 환경 변수를 설정하는 법 : GitHub Action

 

Variables - GitHub Docs

About variables Variables provide a way to store and reuse non-sensitive configuration information. You can store any configuration data such as compiler flags, usernames, or server names as variables. Variables are interpolated on the runner machine that

docs.github.com

1. Github에서 설정한 환경 변수 사용 

2. 커스텀 환경 변수 사용

- 하나의 워크플로에서 사용할 경우 env 키를 사용

  • 워크플로 파일 전체에서 사용할 경우 env를 워크플로 파일의 최상위 레벨에서 사용
  • 작업 단위에서 사용할 경우 jobs.<job_id>.env를 사용
  • 단계 단위에서 사용할 경우 jobs.<job_id>.steps[*]. env 사용
name: Greeting on variable day

on:
  workflow_dispatch

env:
  DAY_OF_WEEK: Monday

jobs:
  greeting_job:
    runs-on: ubuntu-latest
    env:
      Greeting: Hello
    steps:
      - name: "Say Hello Mona it's Monday"
        run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
        env:
          First_Name: Mona
  • 운영체제의 환경변수를 사용 가능 : (ex)  echo command: $DAY_OF_WEEK, $Greeting, and $First_Name. 

 

- 여러 워크플로에서 사용할 경우 조직, 레파지토리, 환경 단계에서 정의 가능

  • vars context 사용 : github 웹 브라우저로 접근해 설정 후 yaml 파일에서 해당 변수에 접근 시 사용
  • 레파지토리, 환경의 비밀 차이
    1. 레파지토리 : 주로 소스 코드, 문서, 이미지 및 기타 파일을 저장하는 장소로 이러한 파일은 개발자 및 다른 이들과 공유될 수 있음. 즉 레파지토리에 저장된 비밀 정보는 다른 사람이 액세스 할 가능성 존재
    2. 환경 : 주로 프로그램이 실행될 때 필요한 구성 요소와 설정을 저장하는 장소 (ex. 데이터베이스 비밀 번호, API 키 또는 기타 중요한 인증 정보 등) 환경 변수는 프로그램의 실행에 필요하지만, 일반적으로 누구나 액세스 할 수 없으며 일반적으로 보안 관리자 또는 개발자와 같은 특정 사용자에게만 액세스가 허용
Comments