20240809 개발자 git 협업 수행 가이드
각자가 선호하는 개발 업무환경 및 도구가 존재한다. 다음은 가이드는 기본적으로 터미널을 기반으로 제공된다. 따라서 전체 업무 프로세스에 대해 참고하여 각자의 상황에 맞도록 활용하도록 한다.
Overview
Remote Branch 현황
구분 | 용도 | 비고 | |
Remote | master또는main | TEST 및PROD 환경에 배포 가능한 상태로 관리되는 브랜치 | dev 브랜치로부터의 PullRequest를 통해서만 변경 가능 |
Remote | dev | 개발자가 로컬환경에서 구현한 기능을 반영하여DEV 환경에서 검증하기 위한 브랜치 | mater 브랜치의 코드 변경을위해 활용 |
Local | master또는 main | Remote master브랜치로부터 clone한 로컬의master브랜치 | 최초 소스 변경 작업 전Remote로부터 동기화 수행필요 |
Local | dev | 개발자가 로컬환경에서 기능을 구현하는용도로 사용되는 임시 브랜치 | 최초 소스 변경 작업 전Remote로부터 동기화 수행필요 |
개발자 작업
소스 가져오기
리모트 Azure Repos 화면에서 Clone을 선택한다.
소스 URL 을 복사한다.
git clone 명령 뒤에 복사한 URL 정보를 붙여 넣어 실행하고 해당 디렉토리로 이동한다.
git clone <소스 URL> cd <복제 디렉토리> |
---|
youngdae.kim@youngdae_kim MINGW64 ~ $ git clone https://zerobig-devops4demo@dev.azure.com/zerobig-devops4demo/AKSAppModDemo/_git/ZerobigAppModDemo Cloning into 'ZerobigAppModDemo'... remote: Azure Repos remote: Found 448 objects to send. (20 ms) Receiving objects: 100% (448/448), 153.23 KiB | 2.47 MiB/s, done. Resolving deltas: 100% (139/139), done. youngdae.kim@youngdae_kim MINGW64 ~ $ cd ZerobigAppModDemo/ youngdae.kim@youngdae_kim MINGW64 ~/ZerobigAppModDemo (main) $ ls -rlht total 50K -rw-r--r-- 1 youngdae.kim 1049089 131 Sep 8 13:08 Dockerfile -rw-r--r-- 1 youngdae.kim 1049089 344 Sep 8 13:08 README.md -rw-r--r-- 1 youngdae.kim 1049089 771 Sep 8 13:08 build.gradle -rw-r--r-- 1 youngdae.kim 1049089 1.1K Sep 8 13:08 dev-azure-pipelines.yml drwxr-xr-x 1 youngdae.kim 1049089 0 Sep 8 13:08 gradle/ -rwxr-xr-x 1 youngdae.kim 1049089 5.9K Sep 8 13:08 gradlew* -rw-r--r-- 1 youngdae.kim 1049089 3.0K Sep 8 13:08 gradlew.bat drwxr-xr-x 1 youngdae.kim 1049089 0 Sep 8 13:08 k8s/ -rwxr-xr-x 1 youngdae.kim 1049089 11K Sep 8 13:08 mvnw* -rw-r--r-- 1 youngdae.kim 1049089 6.7K Sep 8 13:08 mvnw.cmd -rw-r--r-- 1 youngdae.kim 1049089 1.6K Sep 8 13:08 pom.xml drwxr-xr-x 1 youngdae.kim 1049089 0 Sep 8 13:08 src/ -rw-r--r-- 1 youngdae.kim 1049089 1.3K Sep 8 13:08 test-prod-azure-pipelines.yml youngdae.kim@youngdae_kim MINGW64 ~/ZerobigAppModDemo (main) $
(옵션) 로컬 및 리모트 브랜치 확인를 확인한다.
git branch git branch -a |
---|
youngdae.kim@youngdae_kim MINGW64 ~/ZerobigAppModDemo (main) $ git branch * main youngdae.kim@youngdae_kim MINGW64 ~/ZerobigAppModDemo (main) $ git branch -a * main remotes/origin/HEAD -> origin/main remotes/origin/dev remotes/origin/main youngdae.kim@youngdae_kim MINGW64 ~/ZerobigAppModDemo (main) $
소스 수정하여 푸시하기
소스 수정에 앞서 다음 명령을 수행하여 로컬에 최신화된 dev 브랜치를 생성한다.
git checkout --track origin/dev git branch |
---|
youngdae.kim@youngdae_kim MINGW64 ~/ZerobigAppModDemo (main) $ git checkout --track origin/dev Switched to a new branch 'dev' Branch 'dev' set up to track remote branch 'dev' from 'origin'. youngdae.kim@youngdae_kim MINGW64 ~/ZerobigAppModDemo (dev) $ youngdae.kim@youngdae_kim MINGW64 ~/ZerobigAppModDemo (dev) $ git branch * dev main youngdae.kim@youngdae_kim MINGW64 ~/ZerobigAppModDemo (dev) $
임의의 소스를 변경하고 저장한다.
git add, commit 및 push 명령을 수행하여 리모트 dev 브랜치로 코드를 푸시한다.
git add . git commit -m "<커밋 메시지>" git push |
---|
youngdae.kim@youngdae_kim MINGW64 ~/ZerobigAppModDemo (dev) $ git add . youngdae.kim@youngdae_kim MINGW64 ~/ZerobigAppModDemo (dev) $ git commit -m "Update Application.java" [dev d18f0c8] Update Application.java 1 file changed, 1 insertion(+), 1 deletion(-) youngdae.kim@youngdae_kim MINGW64 ~/ZerobigAppModDemo (dev) $ git push Enumerating objects: 13, done. Counting objects: 100% (13/13), done. Delta compression using up to 8 threads Compressing objects: 100% (5/5), done. Writing objects: 100% (7/7), 540 bytes | 90.00 KiB/s, done. Total 7 (delta 2), reused 0 (delta 0), pack-reused 0 remote: Analyzing objects... (7/7) (7 ms) remote: Storing packfile... done (60 ms) remote: Storing index... done (53 ms) To https://dev.azure.com/zerobig-devops4demo/AKSAppModDemo/_git/ZerobigAppModDemo ac5dd9a..d18f0c8 dev -> dev youngdae.kim@youngdae_kim MINGW64 ~/ZerobigAppModDemo (dev) $
Azure CI/CD 파이프라인 실행 결과 모니터링
자동으로 CI 파이프라인이 트리거 되어 실행된다.
이상이 없다면 파이프라인 실행결과는 다음과 같다.
곧 자동으로 CD 파이프라인이 트리거 되어 실행된다.
이상이 없다면 파이프라인 실행결과는 다음과 같다.
DEV 환경 배포 결과 확인
현재 시점에서 TEST 환경의 AKS 클러스터에는 변경된 코드 결과가 반영되어야 한다.
Pull Request 수행 (dev → main)
요청자 작업
이제 dev와 main 브랜치의 코드 내용이 상이하므로 Azure Repos 화면으로 이동하면 다음과 같이 Create a pull request 수행 유도 메시지가 전시된다.
git diff 명령을 통해 dev와 main 브랜치간 차이를 비교할 수 있다.
git diff [<options>] <commit>...<commit>] |
---|
- 5e2c0bf : dev 브랜치 최신 커밋
- 10d99f0 : main 브랜치 최신 커밋
Create a pull request 를 선택한다.
Pull Request 요청 정보를 선택/등록 한다.
1) 병합 관계를 설정한다. dev → main 으로의 병합 요청이므로 기본값을 유지한다.
2) 제목을 기입한다. PR 요청을 승인할 사람이 이해하기 쉬운 의미 있는 이름으로 제목을 기입한다.
3) 설명을 기입한다. PR 요청을 승인할 사람이 이해하기 쉽도록 자세한 변경 내역 및 사유 등을 기입한다.
4) 사전 지정/협의된 검토자를 등록한다,
5) Create를 눌러 요청을 생성한다.
승인자/검토자 작업
PR 요청을 수신한 승인자 또는 검토자는 다음 화면으로 이동하게 된다.
기본적으로 Overview 탭에서 병합 요청에 대한 개요를 살펴본다.
Files 탭으로 이동하면 파일의 변경사항을 검토할 수 있다,
라인 번호를 클릭하여 해당 라인에 대해 커멘트를 생성할 수 있다.
커멘트 입력
커멘트 확인
병합 요청에 특이사항이 없다면 Approve를 선택하여 승인한다.
Complete를 선택하여 병합을 완료한다.
이때 선택가능한 PR 옵션은 다음과 같다.
Azure CI/CD 파이프라인 실행 결과 모니터링
자동으로 CI 파이프라인이 트리거 되어 실행된다.
이상이 없다면 파이프라인 실행결과는 다음과 같다.
곧 자동으로 CD 파이프라인이 트리거 되어 실행된다.
TEST 환경 배포 결과 확인
TEST 환경에 배포가 이루어졌다, View logs를 선택하여 배포 로그를 확인하고 TEST 환경에 대한 동작 검증을 시행한다.
시행 결과 이상이 있다면 커멘트를 입력하고 Reject을 선택한다.
정상이라면 커멘트를 입력하고 Approve를 선택한다.
커멘트를 입력하고 Approve를 선택한다.
이제 PROD 환경에 배포 승인 대기 상태가 된다.
PROD 환경 배포
TEST 환경에 대한 동작 검증이 완료되었으므로 특별한 내용이 없다면 승인을 진행한다.
최종 PROD에 배포가 이루어졌다,
PR 완료 이후 소스 비교 및 로컬 소스 최신화 확인 방법
PR 승인/완료 이후 main 브랜치의 커밋 이력을 확인하면 다음과 같다,
로컬에서 git diff 명령을 통해 dev와 리모트 main 브랜치간 차이를 비교할 수 있다.
병합이 이루어졌으므로 차이점이 없음을 알 수 있다,