Run The Bridge

DevOps 2일차(git, gitlab) 본문

Cloud/DevOps

DevOps 2일차(git, gitlab)

anfrhrl5555 2021. 9. 27. 17:28
728x90
반응형

0. Git의 상태

  • Untracked 상태 - 파일이 Git에 의해 관리되지 않는 상태 (파일을 생성 후 add 하지 않은 상태)

파일을 새로생성하면 Untracked 상태

 

  • Tracked 상태 - 파일이 Git에 의해 그 변동사항이 추적되는 상태

tarcked라는 메시지는 따로 없다, 변경사항은 .git에 저장된다.

 

  • Unmodified 상태 : 현재 파일이 최신 커밋 파일과 비교하여 바뀐 게 없는 상태

 

  • Modified 상태 : 현재 파일이 최신 커밋 파일과 비교하여 바뀐 게 있는 상태

 

  • Staged 상태 : 파일 수정 후 staging area에 올라가 있는 상태

 

 

파일을 github에 올리는 법

git commit -m "added file.txt"

1. Git으로 하는 일

  • Working Directory에서 파일을 수정한다
  • Staging Area에 파일을 Stage해서 Commit할 스냅샷을 만든다
    (모든 파일을 추가할 수도 있고 선택하여 추가할 수도 있다)
  • Staging Area에 있는 파일들을 Commit해서 Git 디렉터리에 영구적인 스냅샷으로 저장한다

1. 현재디렉토리를 Working Directory라고 보면된다. (.git이 위치함)

2. Working Directory에서 Staging Area로 옮겨주는 행위를 'add' 명령으로 수행한다.

3. 최종적으로 반영하기 위해서는 'commit' 명령으로 수행한다.

 

- git 출력 결과에 색깔 적용하기

git config --global color.branch auto

git config --global color.diff auto

git config --global color.interactive auto

git config --global color.status auto

색깔이 입력되었다.

 

최근 git log 설정해서 보기

# git log -숫자
git log -1

# git log 한 줄로보기
git log --oneline

# 꾸며주기 --decorate
git log --oneline --decorate

2. Git 실습

git commit을 진행한다.

git reset --soft HEAD~  # commit하기 전 상태로 돌아간다.

commit 전 명령으로 돌아갔다.

 

git reset --mixed HEAD~  # add로 돌아간다.

Untracked로 바뀌었다.

 

그림으로 표현하면 다음과같다.

 

git reset --hard HEAD~  # 한 바퀴를 거꾸로 돌아간다 보면된다.

git reset --hard "commit 값"  # 돌아갈 위치를 지정할 수 있다.

soft와는 다른 결과값이 나왔다.

 


3. Git & Github 실습

branch란?

  • 하나의 Repository를 여러 갈래로 나누어 여러 개발자들이 동시에 다양한 작업을 가능하게 해준다
  • 각각의 독립된 branch에서 마음대로 소스코드를 변경하여 작업 한 후 원래 버전과 비교하여 또 하나의 새로운 버전을 만들어 낼 수 있다.

 

git branch 확인하는 법

 

git branch 생성하는 법

git branch "이름"

 

git branch 변경하는 법

git checkout test

 

git branch 삭제하는 법

git branch -d test2

 

push도 branch마다 별도로 할 수 있다.

 git push origin test

test branch가 생성되었다.

 

branch 합치는 방법

git merge "branch 명"

merge 후 hello.py가 생성된 모습

 

근데 만약 같은 이름에 같은 줄의 파일이 변경되면 어떻게될까?

# test branch에 있는 파일
def hello():
    print('Hello, world! on branch test')

hello()
# main branch에 있는 파일
def hello():
    print('Hello, world!')

hello()

 

충돌을 일으키기 위해 main branch에 있는 hello.py도 수정한다. 그리고 add, commit을 진행한다.

def hello():
    print('Hello, world! on branch main')

hello()

 

충돌이 발생하면, 어떤 부분에 충돌이 났는지 비교를 해준다.

 

수정을 해준다.

def hello():
    print('Hello, world! on branch main')

hello()

git add or git commit -a 명령을 써줘라.

 

git commit -a

자동으로 commit message를 달아준다.


4. GitLab으로 나만의 git 서버 만들기

처음에는 Worker Node의 사양을 늘려줘야한다. 나는 4core 8RAM으로 잡아주었다. 사양이 좋으면 더 많이 잡아도 무방하다.(Worker2번은 사양문제로 삭제하고, Worker1번으로 옮겨주었다.)

Master1 / Worker1

Gitlab의 성질

Gitlab은 서버 설치를 목적으로 나온 호스팅 서비스로 다른 호스팅 사이트와 다르게 Community 버전으로 설치한다면 Private 서비스를 무료로 인원 제한 없이 이용할 수 있다. 또한 모든 Repository의 코드는 개인 서버에 저장된다

 

  • gitlab 서버를 kubernetes에서 실행하기 위한 준비
    • gitlab 환경 및 데이터 저장용 볼륨(PV, PVC)
    • gitlab root 패스워드를 저장할 secret
  • 사용자가 접속하기 위한 service
    • service는 NodePort type이며 30080:80, 30443:443, 30022:22 로 매핑
  • gitlab 이미지 배포용 deployment

 

Gitlab을 올리기위한 yaml파일은 다음 4개의 파일이 있다.

# gitlab.yaml
# 권한문제 발생시 NFS서버 권한을 777로 준다.
# kubectl create cicd, namespace 생성해줘야함
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitlab
  namespace: cicd
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gitlab
  template:
    metadata:
      labels:
        app: gitlab
    spec:
      nodeName: kube-worker1
      containers:
      - image: gitlab/gitlab-ce
        name: gitlab
        env:
        - name: GITLAB_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: gitlab-secret
              key: Password
        - name: GITLAB_OMNIBUS_CONFIG
          value: |
            external_url 'http://192.168.245.22:30080'  # 본인환경에 맞춰준다. VM_IP를 넣어주면된다
            nginx['listen_port'] = 80
        ports:
        - containerPort: 80
        - containerPort: 443
        - containerPort: 22
        volumeMounts:
        - mountPath: /etc/localtime
          name: tz
          readOnly: true
        - mountPath: /etc/gitlab
          name: vol
          subPath: config
        - mountPath: /var/log/gitlab
          name: vol
          subPath: logs
        - mountPath: /var/opt/gitlab
          name: vol
          subPath: data
      volumes:
        - name: vol
          persistentVolumeClaim:
            claimName: gitlab-data
        - hostPath:
            path: /etc/localtime
            type: ""
          name: tz
# secret.yaml
apiVersion: v1
data:
  Password: cGFzc3dvcmQ=
kind: Secret
metadata:
  name: gitlab-secret
  namespace: cicd
type: Opaque
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: gitlab-service
  namespace: cicd
spec:
  type: NodePort
  ports:
  - name: gitlab-http
    port: 80
    targetPort: 80
    nodePort: 30080
    protocol: TCP
  - name: gitlab-https
    port: 443
    targetPort: 443
    nodePort: 30443
    protocol: TCP
  - port: 22
    targetPort: 22
    nodePort: 30022
    protocol: TCP
    name: ssh
  selector:
    app: gitlab
#volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: gitlab-data-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.245.21  # 자기 nfs서버에 맞춰야한다, NFS서버가 존재해야함!
    path: /nfs/gitlab  # 디렉토리 생성해야한다.
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: gitlab-data
  namespace: cicd
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  volumeName: gitlab-data-pv

 

kubectl apply -f 로 올리고나면 다음과같이 나온다.

 

한참동안 설치가 되고 GitLab이 모습을 들어냈따!!!

Gitlab 설치완료 ID: root, PW: secert에 적혀있다.

 

root권한 말고 일반사용자의 계정을 하나 만들어준다. 그리고 승인이 필요하다는 메시지가 나온다.

 

root로 다시 들어가 허락해준다.

 

Menu - admin - User - Pending approval

 

톱니바퀴 모양 - Approve를 눌러준다. 그리고 testuser01로 접속하면 성공!

 

이제 project를 만들어본다.

Create a project, Create blank project 클릭

 

간략하게 채운다. 그 후 생성!

Repository가 생성된 모습

그 후 사용법은 Github와 크게 차이가 없다.

728x90
반응형

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

DevOps 1일차(git)  (0) 2021.10.02
DevOps 3일차(GitLab, Jenkins)  (0) 2021.09.28
Comments