📚 Study
Jenkins + GitLab Webhook + Springboot + EC2 자동배포
Flow
- EC2 Docker 설치
- EC2 Jenkins container 설치 및 docker 실행
- 브라우저에서 Jenkins 기본 세팅
- Jenkins Item 생성(feature/be, feature/fe 브랜치 모두)
- GitLab Webhook 생성
- Jenkins Item ~ GitLab Webhook 연결
- 배포파일 생성, Dockerfile 생성, Docker 배포는 다음에…
1. EC2 Docker 설치
1. 커널 버전 확인 : 리눅스 커널이 최소 3.10 버전 이상이어야함
⇒
uname -r
명령어를 통해 확인!2. apt package index 업데이트하고, HTTPS를 통해 repository를 이용하기 위해 package들을 설치
sudo apt-get update
sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
3. Official GPG Key 등록(우분투에서 필요한 과정)
gpg란?
GNU Privacy Guard (GnuPG)의 줄임말로서 배포 파일의 인증을 확인하는데 사용되는 자유 소프트웨어 패키지
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
4. stable repository 등록
echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5. Doker Engine 설치
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
- 설치가 완료되었다면
docker --version
으로 확인할 수 있습니다.
굳이 Docker 로 설치하는 이유?
Jenkins는 Java 기반의 CI tool이기 때문에 EC2에 자바까지 설치해야함
EC2 환경에 구애받지 않고 젠킨스와 스프링 서버를 돌리기 위하여 Docker 위에서 돌리는 것이 좋음
2. EC2 Jenkins 설치
2-1. EC2 Jenkins container 설치 및 docker 실행
1. Docker 허브로부터 jenkins 이미지 pull
docker pull jenkins/jenkins:lts
2. docker.sock - Permission denied 되면
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.socreate?fromImage=jenkins%2Fjenkins&tag=lts": dial unix /var/run/docker.sock: connect: permission denied
$ sudo groupadd docker
$ sudo gpasswd -a $USER docker
$ newgrp docker
3. Jenkins container 실행
docker run -d --name jenkins -p 8080:8080 -v /jenkins:/var/jenkins_home -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins/jenkins:lts
- v /jenkins:/var/jenkins_home젠킨스 컨테이너의 설정을 호스트 서버와 공유함으로써, 컨테이너가 삭제되는 경우에도 설정을 유지할수 있게 해줍니다.
- v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock젠킨스 컨테이너에서도 호스트 서버의 도커를 사용하기 위한 바인딩입니다.이렇게 컨테이너 내부에서 설치없이, 외부의 도커를 사용하는 방식을 DooD(Dock out of Docker) 라고 합니다.[1]
- p 8080:8080젠킨스의 defaul port 인 8080 을 호스트 서버와 매핑해줍니다.
2-2. 브라우저에서 Jenkins 설치
1. 호스트서버 URL:8080 으로 젠킨스 브라우저 접속
ex) {server_domain}:8080
2. 설치에 필요한 키값 입력
$ docker logs jenkins
터미널에 위와 같이 입력시 나오는 설치키값 입력
3. suggested plugins 설치, 계정 생성
3. Jenkins 세팅
3-1. GitLab 사용을 위한 세팅
1. Gitlab 플러그인 설치
Dashboard > Jenkins 관리 > 플러그인 관리
Git, Gitlab 설치
2. Gitlab Access Token 발급
Gitlab > Preferences > Access Tokens
- Token name : 아무거나 하고 싶은 이름
- Select scopes : read_repository 허용
3. Gitlab credential 생성
Dashboard > Jenkins 관리 > Manage Credentials > (global) > Add Credentials
- Username : Gitlab 로그인 아이디
- Password : Gitlab 로그인 비밀번호 혹은 위에서 생성한 Gitlab Access Token
3-2. 빌드 후 배포를 위한 세팅
1. 배포를 위한 플러그인 Pulish over SSH 설치
publish over SSH
2. SSH Server 생성
Dashboard > Jenkins 관리 > 시스템 설정 > Published over SSH
- SSH Server
- Name : 확인할 수 있는 이름
- Hostname : 배포할 host server IPv4 (나의 경우, EC2 IP)
- Username : ubuntu
- Key
- .pem 파일 메모장으로 열면 나오는 Key 입력
Test Configuration 으로 연결 확인
4. Jenkins Item 생성 및 Gitlab Web hook 연결
4-1. 소스코드 관리
소스코드 관리 - Gitlab 연결
- Repository URL : Gitlab 레포지토리 링크
- Credentials : 4-1. 에서 생성한 credential 연결
- Branches to build : 접근할 브랜치
4-2. 빌드 유발
1. 빌드 유발 - Webhook URL 생성, Secret token 생성
- Build when a change is pushed ~ : webhook URL 기억!
- 고급 > Secret token
Generate
- 생성 후 Apply 혹은 저장을 눌러야 활성화됨!
2. Gitlab Webhooks 생성 및 연결
Gitlab > Setting > Webhooks
- URL : 위에서 생성한 젠킨스 Webhook URL
- Secret token : 위에서 생성한 젠킨스 Secret token
4-3. 빌드
Execute shell 작성
Add build step > Execute shell
해당 레포지토리에서 빌드하는 방법에 대한 shell scrip 작성
4-4. 빌드 후 조치
1. SSH를 통해 EC2로 빌드파일 보내기
Dashboard > {Item} > Configuration > 빌드 후 조치 > Send build artifacts over SSH
- SSH Server : 2-2번에서 생성한 SSH server
- Source files : 전송될 파일의 경로(있는 곳)
- Remove prefix : 전송할 파일 경로(어디까지 보낼지, 상위폴더까지 보낼 것인지 혹은 해당 파일만 보낼 것인지 등)
- Remote directory : 전송할 위치(EC2의 S08~/back 하위에 파일을 저장하겠다는 뜻)
- Exec commend : 그 후 실행할 commend
2. Dockerfile 사용하여 container 실행
- Dockerfile도 EC2로 전송
- 기존 컨테이너 중지 및 삭제 후 컨테이너 이미지 재빌드
- 도커 컨테이너 실행