GitHub와 같은 Git 저장소
둘 다 분산 버전 관리 도구 git(깃)이라는 오픈소스를 기반으로 하고 있기 때문에 기본 구성과 인터페이스가 유사합니다.
그리고 같은 Git이기에 branch, remote, repository, staging 등은 똑같습니다.
개발에 적용 시 같은 방법으로 개발 진행이 가능합니다.
Github와 다른 점
GitHub | GitLab | |
비용 | 무료 | 유료 버전과 무료 버전이 존재 유료 버전은 아래 기능을 추가로 제공 - 고급 보안 기능 : 보안 감사, 유출 방지, 데이터 감사 등 - 통합 CI/CD 파이프라인 : 내부 서버에서의 CI/CD 파이프라인 구축 - 고급 권한 관리 : 사용자 권한 부여 및 관리 기능 - 고급 분석 및 모니터링 기능 : 성능 분석, 사용자 양상 분석 등 |
DevOps | 사용자가 원하는 CI/CD 도구를 직접 통합 (젠킨스, CircleCI, TravisCI) | 지속적 통합/지속적 전달인 CI/CD 기능과 데브옵스 워크플로우를 내장함 |
중점 | 속도에 중점을 두어 접근성이 좋음 | 안전에 중점을 두어 대규모 프로젝트에서 사용하기 적합하지만 무료 버전에 경우 개인 프로젝트에도 적합한 기능을 제공 |
깃랩 사이트에서도 깃허브와의 차이점을 제공하고 있습니다
아래 사이트로 확인하실 수 있습니다.
https://about.gitlab.com/devops-tools/github-vs-gitlab/
GitLab의 CI/CD
CI/CD는 지속적 통합 및 지속적 배포의 약자로, 코드의 개발과 테스트 및 배포를 자동화하는 것을 목표로 하는 소프트웨어 엔지니어링 관행입니다, 코드가 제대로 작동하는지 확인하기 위해 빌드 및 테스트를 실행하며 테스트가 통과되면 코드가 서비스 환경에 배포됩니다
GitLab는 해당 기능들을 내장하여 별도의 프로그램 설치 없이 테스트, 빌드, 배포를 할 수 있게 합니다.
Continuous Integration
개발자가 Repository에 푸시할 때마다 스크립트 셋을 생성하여 애플리케이션을 자동으로 빌드하고 테스트할 수 있습니다. 스크립트는 응용 프로그램에 오류가 발생할 가능성을 줄이는 데 도움을 주며 이걸 CI(Continuous Integration) 합니다.
응용 프로그램에 제출된 각 변경 사항은 개발 분기에도 자동으로 지속적으로 빌드되고 테스트됩니다.
이런 테스트는 변경 사항이 애플리케이션에 대해 설정한 모든 테스트, 지침 및 코드 준수 표준을 통과하는지 확인합니다.
GitLab은 프로젝트에 대한 모든 푸시에 대해 일련의 검사를 코드에 실행합니다.
(GitLab은 저장소를 프로젝트라고 부릅니다)
Continuous Delivery
CI의 다음 단계로 빌드, 테스트 후 애플리케이션도 지속적으로 배포합니다.
그러나 코드는 자동으로 체크하지만 변경사항을 배포하려면 사람의 개입이 필요합니다.
Continuous Deployment
CD와 유사하지만 배포를 수동이 아닌 자동으로 하게 하여 사람의 개입을 없앱니다. GitLab CI/CD
GitLab에는 모든 기능을 내장하여 별도의 프로그램 설치 없이 테스트, 빌드, 배포를 할 수 있습니다.
GitLab CI/CD workflow
변경된 코드를 푸시하는 것으로 CI/CD 파이프라인을 트리거 할 수 있습니다.
파이프라인은 아래 부분의 설명을 보시면 됩니다.
workflow (푸시된 후의 로직)
- 자동 스크립트를 실행(pipeline)
- 빌드 및 테스트
- 로컬에서 변경 사항 프리뷰
- 구현이 예상된 것과 같으면 코드 승인
- 해당 브렌치를 병합(GitLab CI/CD는 변경 사항을 프로덕션에 자동 배포)
더 자세히는 아래와 같습니다.
해당 글의 원본은 아래링크로 확인할 수 있습니다.
https://docs.gitlab.com/ee/ci/introduction/index.html
Pipeline architecture
GitLab의 Pipeline은 CI/CD의 기본 빌딩 블록입니다.
리눅스의 Pipe와 비슷한 개념으로 빌드가 끝나면 테스트로로 테스트가 끝나면 배포로 보내는 것입니다.
위 파이프 라인을 아래의 yml로 직접 구성할 수 있는 것입니다.
stages:
- build
- test
- deploy
image: alpine
build_a:
stage: build
script:
- echo "This job builds something."
build_b:
stage: build
script:
- echo "This job builds something else."
test_a:
stage: test
script:
- echo "This job tests something. It will only run when all jobs in the"
- echo "build stage are complete."
test_b:
stage: test
script:
- echo "This job tests something else. It will only run when all jobs in the"
- echo "build stage are complete too. It will start at about the same time as test_a."
deploy_a:
stage: deploy
script:
- echo "This job deploys something. It will only run when all jobs in the"
- echo "test stage complete."
environment: production
deploy_b:
stage: deploy
script:
- echo "This job deploys something else. It will only run when all jobs in the"
- echo "test stage complete. It will start at about the same time as deploy_a."
environment: production
파이프 라인의 종류는 아래로 나눠지며 참고하시기 바랍니다.
GitLab 저장소 생성
https://gitlab.com/dashboard/projects
위 주소로 들어가신 후 New Project를 하시면 됩니다.
프로젝트 생성시 여러 가지 샘플이 있으니 원하시는 대로 작업하면 됩니다.
저는 Template로 고른 후 스프링을 선택했습니다.
정보 기입 후 create project 하면 프로젝트가 생성되었습니다.