Run The Bridge

DevOps 1일차(git) 본문

Cloud/DevOps

DevOps 1일차(git)

anfrhrl5555 2021. 10. 2. 00:00
728x90
반응형

0.  DevOps 모델 개념

일반적으로 개발과 IT 운영 사이의 협업적인 업무 관계(Collaboration)를 지지(support)하는 새로운 문화, 또는 철학이자, 전문적인 운동(movement)을 의미

 

약간 앞선 개념으로 Agile(애자일)개발, 개발문화가 존재한다. == 이렇게 개발하면 좋겠다(개발선언문)

Agile

 

1. DevOps 모델의 장점

  • 속도: 서로의 업무에 대해 더 잘 이해하여 좀 더 신속하게 사용자에게 필요한 업데이트를 수행 가능. 개발자는 소비자가 무엇을 원하는지, 운영자는 애플리케이션을 제공하는데 해결할 문제를 인지할 수 있음
  • 신속한 제공: 컨테이너와 마이크로서비스를 사용하면 더 자주 빠르게 릴리즈하는 것이 가능. 더 빠르게 좋은  기능을 제공할 수 있으며 개발자가 운영에 필요한 인프라와 하드웨어에 대해 잘 몰라도 릴리즈가 가능.
  • 개발과 릴리즈가 편해지므로 안정성이 확보, 협업 강화

 

2. DevOps 엔지니어가 하는 일(https://www.contino.io/insights/devops-engineer-guide)

  • 인프라 환경 자동 구축(IaC) -- Infra As Code
  • Container orchestrators 생성 및 구성
  • CI/CD Pipelines 작성
  • Well-designed MSA 작성을 위해 개발자와 가깝게 일하기
  • DevOps 전략 설계
  • 다양한 팀을 위한 관제 플랫폼 설계와 권장 사항 제공
  • 개발팀에 플랫폼과 인프라 권장 사항 제공 및 조언
  • 워크로드 및 인프라의 보안을 보장
  • ...

 

3. DevOps Roadmap

다음의 사이트를 참조하면 DevOps roadmap을 볼 수 있다.

 

https://roadmap.sh

 

Developer Roadmaps

Community driven roadmaps, articles, guides, quizzes, tips and resources for developers to learn from, identify their career paths, know what they don't know, find out the knowledge gaps, learn and improve.

roadmap.sh


4. CI/CD란?

  • CI - Continuous Integration(지속적인 통합)
  • CD - Continuous Delivery & Deployment(지속적인 제공 & 배포)

CI/CD

CI/CD에 대해 조금 더 심화하게 알아보자.

 

  • CI - Continuous Integration(지속적인 통합)
    • 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합하는 것을 의미합니다. (가능하다면 하루에 여러번까지)
  • CI가 필요한 환경에는 어떤 조건들이?
    • 다수의 개발자가 형상관리(Source Code) 툴(Git, SVN 등) 을 공유하여 사용하는 환경
    • MSA(Micro Service Architecture) 환경
      • MSA 환경에서는 대부분 Agile(소규모 기능 단위로 빠르게 개발 & 적용을 반복하는 개발 방법론) 방법론이 적용되기 때문에, 기능 추가가 매우 빈번하게 발생
  • CI의 핵심 목표
    • 버그를 신속하게 찾아 해결하고,
    • 소프트웨어의 품질을 개선하고,
    • 새로운 업데이트의 검증 및 릴리즈의 시간을 단축시키는 것

- - -

  • CD - Continuous Delivery & Deployment(지속적인 제공 & 배포)
    • Continuous Delivery는 공유 레포지토리로 자동으로 Release 하는 것
    • Continuous Deployment는 Production 레벨까지 자동으로 deploy 하는 것을 의미
  • CD는 개발자의 변경 사항이 레포지토리를 넘어, 고객의 프로덕션(Production) 환경까지 릴리즈 되는 것을 의미
  • MSA와 같은 환경에서 Agile 방법론이 적용될 경우, 서비스의 사용자는 최대한 빠른 시간 내에 최신 버전의 Production을 제공 -> 개발팀과 비즈니스팀(영업, CS팀 등) 간의 커뮤니케이션 부족 문제를 해결

 

Continuous Delivery 와 Continuous Deployment의 차이  # (manual 과 automatic)


5. CI/CD 도구

  • Git - 분산형 버전 관리 시스템(Version Control System)
  • GitHub, GitLab, Bitbucket - Git 호스팅 서비스, Repository 제공 등
    • 온라인 서비스는 Repository 용량, 단일 파일 용량, 인원 등의 제한이 있다
  • Jenkins - 대표적 CI(Continuous Integration) 도구, 다양한 플러그인을 종합해서 CI/CD Pipeline을 만들어서 자동화 작업이 가능
  • SonarQube - 코드 분석 , 보안 취약성 검사 등

CI/CD 도구

6. 버전 관리 시스템이란?

  • 버전 관리
  • filename.txt -> filename_20210924.txt -> filename_20210924_2.txt ...
  • 파일을 수정, 복사, 백업, 저장 등으로 변경 내용을 관리 하는 것
  • 다수의 개발자가 하나의 애플리케이션을 개발할 때 사용
  • 버전 관리 시스템(Version Control System) 의 종류
    • 클라이언트 - 서버 모델
      • 하나의 중앙 서버가 존재하며, 여러 클라이언트들은 중앙 서버에서 각자 맡은 파트만 가져와서 작업하고 다시 중앙으로 통합
      • 대표적으로 CVS, Subversion(SVN) 등
    • 분산 모델
      • 하나의 중앙 서버가 존재하지만, 여러 클라이언트들은 각자의 컴퓨터 저장소에 중앙 서버의 전체 사본을 가지고 작업
      • 대표적으로 Git

 

7. SVN과 Git의 차이점

  • SVN - 중앙 서버에 소스 코드와 히스토리를 저장
    • commit한 내용에 실수가 있을 시에 서버에(다른 개발자에게) 바로 영향을 미친다.
    • 중앙서버에 문제가 생기면 협업 불가능
  • Git - 소스 코드를 여러 개발 PC와 저장소에 분산해서 저장
    • 중앙 서버에 장애가 발생해도 로컬 저장소에 커밋을 할 수 있다.
    • 로컬 저장소들을 이용하여 중앙 저장소의 복원도 가능
    • 사본을 로컬에서 관리하기 때문에 Git이 SVN에 비해 훨씬 빠르다.
      (SVN은 변경 로그 하나 보는 것도 네트워크를 경유해야 한다)


8. Git 기본 용어

  1. Repository - 저장소를 의미하며 저장소는 히스토리, 태그, 소스의 가지치기 혹은 branch에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 히스토리를 확인 할 수 있다.
  2. Working Tree - 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점
  3. Staging Area - 저장소에 커밋하기 전에 커밋을 준비하는 위치
  4. Commit - 의미있는 수정 작업이 끝났을 때 마침을 알리는 작업
  5. Head - 현재 작업중인 Branch를 가리킨다
  6. Branch - 가지 또는 분기점을 의미하며, 작업을 할때에 현재 상태를 복사하여 Branch에서 작업을 한 후에 완전하다 싶을때 Merge를 하여 작업을 한다
  7. Merge - 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다

참고. https://git-scm.com/book/ko/v2


9. Git 실습

yum install -y git  # kube-master1 노드에만

git --version

git config --global user.name "name"  # git의 기본정보를 부여한다, global이 없으면 자동적으로 local
git config --global user.email "name@mail.com"  # git의 기본정보를 부여한다, global이 없으면 자동적으로 local

git config --list  # 기본정보 확인

 

위에서 설정한 'user.anme anfrhrl5555'를 지우는 방법은 '--unset' 명령을 사용한다.

git config --unset --global user.anme

 

git config 명령이 끝났으면 test_repo01 라는 디렉토리를 생성한다.

 mkdir test_repo01

 

이제 이 디렉토리를 git의 관리하게 두어야한다. 'git init' 명령을 사용한다.

git init

 

 

추가로 .git안에는 config파일이 있는데, 여기에 아까 우리가 입력한 git.config 내용은 담겨있지 않다. git config는 --global 옵션을 주었기때문에 홈 디렉토리로 가서 .gitconfig 파일을 봐야만 볼 수 있다.

 

다음 명령은 'git status'이다.

git status  # git의 상태를 확인한다.

 

이제 파일을 하나 만들어서 테스트해보자(ex: 프로젝트를 진행하면서 source file을 만든다)

vi text.txt
text.txt

 

이 파일을 git에 저장하기 위해서는 'git add [filename]' 을 사용한다.

git add .  # 모든 파일 전부 집어넣는다.

새로운 파일이 추가되었다.

 

삭제는 'git rm'을 사용한다

git rm --cached text.txt

 

다시 'git add .'으로 올려주고 이제 commit을 사용한다.

# 현재까지 변경사항 확정 (저장소에 올리는 것이 아님)
git commit -m "[message]"  # -m 으로 메시지 기록을 꼭 남겨야한다.(어떤 작업을 하며, 어떻게 변경되었는지)

 

commit log를 보고싶으면 'git log'을 사용한다.

git log  # 특정 시점의 변화를 추적 및 복구 할 때 사용한다.

 

좀 더 세부적으로 보고싶으면 'git show'을 사용한다.

 git show 78dd291e22e82a30768184ee0a27125d232069a8  # commit hash를 넣으면된다.

 

이제 test.txt파일의 내용을 수정한다.

그러면 modified 되었다고 뜨는데 마찬가지로 'git add .', 'git commit' 을 해준다.

 

그리고 'git diff [hash-value1] [hash-value2]'을 넣어서 두 개의 log를 비교한다.

git diff 26aadcb376ed2e39ca007cf448713cf6b14683fb 78dd291e22e82a30768184ee0a27125d232069a8

test1.txt 와 test.txt 둘 다 볼 수 있다.

 

git은 원복이 가능하다. 'git reset' 명령을 사용한다. test1.txt로 바뀌어져 있는데 test.txt로 reset 해본다.

git reset --hard 78dd291e22e82a30768184ee0a27125d232069a8  # commitID를 넣어주면 복구된다.

test1.txt가 test.txt로 바뀌었다.

 

이제 github에서 실습해본다.

repository 생성완료

 

중간에 'git branch -M main'이 있는데 여기에 대한 내용은 자세히 다루지않겠다. 일단 따라서 바꿔준다.

 

이제 원격저장소 대상을 잡아줘야한다. 현재는 push해도 오류가난다.

git remote add origin https://github.com/anfrhrl5555/test_repo01.git

 

 

이제 push해보자!

git push -u origin main  # remote명, branch명

하지만 오류가난다. github에서 비밀번호 말고 token 사용으로 2021/08/13일에 바꾸었다.

 

토큰 발급 경로는 다음과같다.

Setting - Developer settings - Personal access tokens - Generate해서 생성하면 된다.

그 후 나오는 token값은 한 번 밖에 보여주지않기 떄문에 잘 보관해야한다.

이제 token을 발급받았으니 repush을 해본다.

성공!

할 때 마다 git token을 넣기에는 귀찮다. 다음에 명령을 따르면 최초 1회만 하면 더이상 묻지않는다.

현재 config 파일

git config credential.helper 'store --file .git/.my-credentials'
git push -u origin main  # 여기서 한 번 더 password를 입력하면 저장된다

credential이 추가되었다.

하지만 다른 dir를 생성하면 또 credential을 생성해주어야 하는데, 이 부분은 --global로 해결할 수 있다.

git config credential.helper 'store --file .git/.my-credentials'  # 로컬 및 지정 dir에 저장된다.
git config credential.helper 'store' # 글로벌 및 home dir에 저장된다.

 

만약 github에 올라온 파일들이 바뀌었으면 'git pull' 명령으로 받고 작업 해야한다.

여기까지 github을 만들어서 push, push 하는것을 CI(지속적인 통합)이다.

728x90
반응형

'Cloud > DevOps' 카테고리의 다른 글

DevOps 3일차(GitLab, Jenkins)  (0) 2021.09.28
DevOps 2일차(git, gitlab)  (0) 2021.09.27
Comments