1. Git 설치
git 다운로드 https://git-scm.com/download/win
전부 다음만 누르면 됨
2. CICD (Git, Github, 젠킨스) 이론
Git과Github의 이해
가. Ci/CD 파이프라인 이해
CI/CD 파이프라인은 새 버전의 소프트웨어를 제공하기 위해 수행해야 할 일련의 단계이다.
지속적 통합/지속적 배포(CI/CD) 파이프라인은 DevOps 또는 사이트 신뢰성 엔지니어(SRE) 방식을 통해 더 효과적으로 소프트웨어를 제공하는 데 초점 을 맞춘 방법이다.
CI/CD 파이프라인은 특히 통합 및 테스트 단계와 제공 및 배포 단계에서 모니터링 및 자동화를 도입하여 애플리케이션 개발 프로세스를 개선한다.
CI/CD 파이프라인의 각 단계를 수동으로 실행할 수도 있지만, CI/CD 파이프라인의 진가는 자동화할 때 드러난다.
CI/CD 파이프라인의 단계는 각기 다른 태스크 하위 집합으로 이루어져 있다.
파이프라인 단계(pipeline stage)
• 빌드(Build) - 애플리케이션을 컴파일하는 단계
• 테스트(Test) - 코드를 테스트하는 단계. 이 단계를 자동화하여 시간과 수고를 줄일 수 있다.
• 릴리스(Release) - 애플리케이션을 리포지토리에 제공하는 단계
• 배포(Deploy) - 코드를 프로덕션에 배포하는 단계
• 검증 및 컴플라이언스(Validation & compliance) - 빌드 검증 단계는 해당 조직의 필요에 따라 결정된다. Clair와 같은 이미지 보안 스캔 툴을 사용하여 알려진 취약점(CVE)과 비교하는 방법으로 이미지의 품질을 보장할 수 있다.
나. Git과 GitHub 개념 및 환경 설정
Git이란 소스코드를 효과적으로 관리하기 위해 개발된 '분산형 버전 관리 시스템이다. 원래는 Linux 소스코드를 관리할 목적으로 개발 되었다. Git에서는 소스 코드가 변경된 이력을 쉼게 확인할 수 있고, 특정 시점에 저장된 버전과 비교
하거나 특정 시점으로 되돌아갈 수도 있다. 또 내가 올리려는 파일이 누군가 편집한 내용과 충돌한다면, 서버에 업로드 할 때 경고 메시지가 발생된다.
GitHub란 파일이나 폴더를 저장해 두는 곳이다. 그런데 Git 저장소가 제공하는 좋은 점 중 하나는 파일이 변경 이력 별로 구분되어 저장된다는 점입니다. 비슷한 파일 이라도 실제 내용 일부 문구가 서로 다르면 다른 파일로 인식하기 때문에 파일을 변경 사항 별로 구분해 저장할 수 있다.
Jenkins 이해 및 설치
Jenkins는 지속적 통합(continuous integration, Cl)과 지속적 배포(continuous delivery, CD)를 위한 대표적인 도구이다
빌드, 테스트, 배포 프로세스를 자동화하여 소프트웨어 품질과 개발 생산성을 높일 수 있다.
► 편리한 설정 : 웹 기반의 콘솔로 다양한 인증 기반과 결합이 가능하며 권한 관리 기능을 통해 안전한 빌드/배포 환경을 구축할 수 있다.
수많은 플러그인을 사용하여 자동화 할 수 있어 반복되는 작업을 줄일 수 있다.
빌드/배포의 결과에 대해 통지 받을 수 있는 설정이 간편하고 다양한 채널을 통해 빠르게 피드백을 받을 수 있다.
► 안정적인 빌드/배포 환경: 소스 버전 관리 툴과 연동하여 코드 변경을 감지(Poll, Hook)하고, 자동화 테스트를 포함한 빌드를 수행하여 소프트웨어 품질을 향상시킬 수 있다.
자동화 테스트에는 코딩 표준 준수 여부 체크, 유닛 테스트, 통합 테스트 등을 설정 할 수 있고 테스트 결과에 대한 피드백을 받아 잠재적인 오류를 사전에 예방할 수 있다.
빌드 결과물을 지속적으로 배포하도록 설정하여 개발 프로세스 전체를 자동화할 수 있다.
► 다양한 활용 및 손쉬운 확장 : Jenkins는 많이 사용 되고 있는 오픈 소스 소프트웨어로 문서화가 잘 되어 있다.
빌드/배포 이외에도 스케즐링을 이용한 배치 작업에도 활용되는 등 다양한 적용 사례들을 참고할 수 있다.
플러그 인을 직접 개발하여 기능을 확장하는 것도 가능한다. 네이버 클라우드 플랫폼에서 제공하는 다른 DevTools 상품들과도 쉽게 통합할 수 있다.
CI : 소스 코드를 빌드하고 테스트하고 병합(패키징)
CD(Delivery) 깃허브에 올리는 것 - 릴리즈 push
CD(Deployment) 환경에 배포되는 것 - pull
Delivery 수동 vs Deployment 자동
3. Git, Github
Git Bash 실행
$ mkdir git-test && cd $_
$ echo "Hello World" > README.txt
$ git init # Git 로컬 저장소를 생성
$ git config --global user.email "p16331751@gmail.com" # 버전 관리를 위해 내 정보 설정
$ git config --global user.name "peach"
$ git add README.txt # 파일을 스테이지에 올리는 명령어, 스테이징 영역은 커밋할 준비가 된 변경 내용이 로컬 저장소에 기록되기 전에 대기하는 장소
LF will be replaced by CRLF the next time Git touches it 는 OS마다 사용되는 줄바꿈 문자열이 다르기 때문에 git에서 어떤 의미로 받아들여야 할지 몰라 에러 메시지가 나타난 것이다. 에러를 해결하지 않으면 줄바꿈 문자에 의해 커밋 내역이나 설정 파일들이 이상해질 수 있으니 통일시키는 것을 추천한다.
※ core.autocrlf 설정을 통해 해결할 수 있다. Git에 코드를 커밋할 때 LF와 CRLF를 서로 변환해주는 기능이다. 또한 시스템 전체에 적용할 것이라면 global 옵션을 추가해주고, 해당 프로젝트에만 적용한다면 제외하여 작성해주면 된다.
각각의 체제에 맞게 아래의 명령어를 선택하여 입력해준다.
👆 Windows, DOS 명령어
$git config core.autocrlf true
$git config --global core.autocrlf true
$ git status
$ git commit -m "add site" # 변경 사항을 로컬 저장소에 저장하는 명령어
$ git log
# echo "Aloha" >> README.txt # 파일 상태 변경
# git add README.txt
# git status
# git commit -m "add update"
# git log # 커밋 해시(commit hash) : 변경 사항을 검토하거나 이전 상태로 되돌릴 때 사용
# cat README.txt
Hello World
Aloha
# git checkout 2dcd25f # 커밋 롤백(복원). 일부만 넣어줘도 인식함
# cat README.txt # aloha를 업데이트 하기 전으로 롤백됨
Hello World
# git checkout - # 가장 최근 버전으로 돌아감
# cat README.txt
Hello World
Aloha
GitHub 원격저장소 커밋
gitgub 리포지토리(원격 저장소) 생성
리포지토리 이름 'test-dev'
# git remote add origin https://github.com/theci/test-dev.git # Local환경에서 원격 저장소 추가하기
# git push origin master # 릴리즈. Local 저장소에 있는 파일을 올림. 토큰으로 리포지토리 인증해야한다
토큰 생성하기
생성된 토큰 복사해서 붙여넣기. Sign In을 누르면 바로 커밋된다
윈도우에 토큰이 저장되는 위치
제어판 - 사용자 계정 - 자격증명 관리자
4. GitLab 가상머신(CentOS7) 생성
가상머신 생성
가상머신 이름 'gitlab' - CPU 2 core RAM 4GB
# yum install -y bash-completion
# exit
# yum install -y git
# git clone https://github.com/theci/test-dev.git # GitHub 원격저장소 내용을 로컬저장소(리눅스 가상머신)에 내려받기
# cd test-dev/
# ls
# cat README.txt
# git config --global user.email "test@centos.com" # 버전 관리를 위해 내 정보 설정. 커밋할 때 남게 되는 정보
# git config --global user.name "centos"
# echo "NIHAO" >> README.txt
# git add . # '.'은 현재 경로에 있는 모든 파일 스테이징
# git status
# git commit -m "add list"
# git push origin master
Username for 'https://github.com': theci
Password for 'https://theci@github.com': # 토큰 붙여넣기
윈도우 git bash에서
# cat README.txt # 아직 로컬에 있는 내용만 보인다
# git pull origin master 원격저장소의 새로운 커밋을 로컬저장소(윈도우) 에 갱신하기
# cat README.txt
$ ls
$ vi index.html # 문구 test-dev로 수정
$ git add .
$ git status
$ git commit -m "change site"
$ git push origin master
깃허브에서 확인하기
5.
Git Lab 설치 (CentOS7)
프라이빗 git 원격 저장소 구축
# cd ~
# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload
# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
# EXTERNAL_URL="http://192.168.2.216" yum install -y gitlab-ce (엄청 오래걸림)
접속테스트
# cat /etc/gitlab/initial_root_password # root 패스워드
비밀번호 변경하기
다시 root로 로그인해서 프로젝트 만들기
GitLab 프로젝트 만들기 - 깃허브에서 리포지토리 역할과 같다
젠킨스 서버 만들기
인스턴스 이름 'jenkins-server'
#!/bin/bash
timedatectl set-timezone Asia/Seoul
yum install -y httpd git
systemctl enable --now httpd
cd /var/www/html
git clone https://github.com/theci/test-dev.git
mv test-dev/* .
접속테스트
6. Win10(Git bash)에서 GitLab에 소스코드 Push
# cd ~
# mkdir gitlab-test && cd $_
생성한 gitlab-test폴더에 tar 소스코드 업로드하고 압출풀기
# git init
# git config --global user.email "gitlab-test@example.com" # 버전 관리를 위해 내 정보 설정. 커밋시 남게되는 정보
# git config --global user.name "peach"
$ git add .
$ git status
# git commit -m "new gitlab site" # 변경 사항을 로컬 저장소에 저장하는 명령어
# git log
GitLab 원격저장소 커밋
# git remote add origin http://192.168.2.216/root/my-dev.git # gitlab에서 복사한 HTTP주소 붙여넣기
# git push origin master # gitlab에 push. 로그인 창이 뜬다. 위에서 설정한 root와 비밀번호를 입력
GitLab 원격저장소의 커밋을 로컬저장소(CentOS)에 내려받기
# git clone http://192.168.2.216/root/my-dev.git # gitlab 프로젝트에서 복사한거 붙여넣고 클론하기. my-dev 폴더와 .git 폴더가 생긴다. git init을 하지 않았지만 생김
# cd my-dev/
# ls # main 브랜치이기 때문에 아무것도 보이지 않는다
# git branch -a # '*'는 현재 바라보고 있는 브랜치를 나타냄. 현재 main을 가리키고 있다
# git checkout master # master로 바라보고 있는 브랜치를 바꿈
# git config --global user.email "gitlab-test@centos.com" # 버전 관리를 위해 내 정보 설정
# git config --global user.name "centos"
# vi index.html # 소스 코드 수정. It's nice to meet you를 my-dev로 변경
# git add index.html
# git status
# git commit -m "add my-dev"
# git log
# git push origin master
Username for 'http://192.168.2.216': root
Password for 'http://root@192.168.2.216': [GitLab 패스워드]
원격저장소의 새로운 커밋을 로컬저장소(git bash)에 갱신하기
# git pull origin master
잘 수정되었다
7. 원격 저장소 마이그레이션
(Github(test-dev)에서 Gitlab(my-gitlab)으로 마이그레이션)
GitLab에서 새로운 프로젝트 생성
$ cd ~
$ mkdir git-migration
$ git clone --mirror https://github.com/theci/test-dev.git git-migration # github 리포지토리 통째로 지정 폴더에 clone
$ cd git-migration/
$ git push -uf http://192.168.2.216/root/my-gitlab.git --all # 붙여넣기. 마이그레이션
Github가 통째로 복사되었다
aws codecommit = github = gitlab
8. 젠킨스 접속
Route53에 레코드 생성
$ sudo su -
# yum update -y
# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key # 리포내에 있는 내용이 정식이라는 것을 키로 검증
# amazon-linux-extras install epel -y # EPEL 리포지토리를 설치하면 Amazon Linux에서 CentOS 및 RHEL과 호환되는 패키지들을 사용할 수 있게 된다
# amazon-linux-extras install -y java-openjdk11
# yum install -y jenkins
# systemctl enable --now jenkins
젠킨스는 8080포트이기 때문에 방화벽에서 8080 포트번호를 허용해준다
접속테스트
# cat /var/lib/jenkins/secrets/initialAdminPassword # 초기 패스워드로 로그인하기
패스워드 변경하기
BuildStep 'Execute shell' # Build를 눌렀을 때 Shell 명령을 실행하라
echo "Hello World!"
uptime
댓글