도커에서 젠킨스 설치 하기
Jenkins에서 Docker를 설치하는 이유는 CI/CD 파이프라인에서 Docker를 활용하여 애플리케이션 빌드, 테스트, 배포하는 작업을 효율적으로 처리하기 위해서다. Jenkins와 Docker의 조합은 DevOps 환경에서 애플리케이션의 개발부터 배포까지의 전체 수명 주기를 관리하고 자동화하는 데 최적의 솔루션을 제공하기 때문에 이렇게 많이 이용하는 것 같다.
# 도커 설치
1. curl 설치
2. apt가 저장소를 사용할 수 있게 해주기
3. 도커 공식 GPG 키 등록해주기
4. 등록한 키 ID 일치하는지 확인하기
ubuntu@jenkins:~$ sudo apt install -y curl
ubuntu@jenkins:~$ sudo apt-get install -y apt-transport-https ca-cartificates
ubuntu@jenkins:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
ubuntu@jenkins:~$ apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D
5. 도커 안정 버전 저장소를 추가
6. 패키지 인덱스를 업데이트한다.
7. 도커 설치
ubuntu@jenkins:~$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
ubuntu@jenkins:~$ sudo apt update -y
ubuntu@jenkins:~$ sudo apt install -y docker-ce
ubuntu@jenkins:~$ sudo docker run hello-world
도커 서비스는 자동으로 시작되는 것을 볼 수 있었다. 이후에 docker 그룹에 현재 사용 중인 계정을 등록하여 sudo 없이 docker 명령을 사용 가능하게 해줘야한다.
# 도커에 젠킨스 설치
1. APT 패키지 업데이트
2. Java 17 설치하기
ubuntu@jenkins:~$ sudo apt update -y
ubuntu@jenkins:~$ sudo apt install -y openjdk-17-jdk
도커 관련 설정
1. Docker 폴더 생성
2. 젠킨스 이미지를 베이스로 도커를 설치하기 위해서 Dockerfile 생성
ubuntu@jenkins:~$ mkdir jenkins && cd $_
ubuntu@jenkins:~$ vim Dockerfile
>> 도커 파일
FROM jenkins/jenkins:lts
USER root
RUN apt-get update && \
apt-get -y install apt-transport-https \
ca-certificates \
curl \
gnupg2 \
zip \
unzip \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID
3. docker compose 파일 작성 (Jenkins 컨테이너를 실행하기 위한 설정 파일)
version: '3.7'
services:
jenkins:
build:
context: . # 현재 디렉터리(.)에 있는 Dockerfile를 사용하여 이미지를 빌드
container_name: jenkins # 젠킨스 컨테이너 정의
user: root
privileged: true # 컨테이너가 호스트의 Docker 데몬과 상호작용할 수 있도록 허용
ports:
- 8080:8080 # 통신포트
- 50000:50000 # 에이전트 통신 포트
volumes:
- ./jenkins_home:/var/jenkins_home # 젠킨스 데이터를 호스트 디렉터리에 저장
- /var/run/docker.sock:/var/run/docker.sock # 컨테이너에서 호스트 docker 데몬에 접근 저장
4. 젠킨스 컨테이너 설정
ubuntu@jenkins:~$ docker compose up -d
ubuntu@jenkins:~/jenkins$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jenkins-jenkins latest ec9b0806a2ea 29 seconds ago 1.13GB
ubuntu@jenkins:~/jenkins$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
7bd4c28e48f5 jenkins-jenkins "/usr/bin/tini -- /u…" 29 seconds ago Up 29 seconds
0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp jenkins
5. http:// 서버ip:8080 포트로 이동하기
6. 젠킨스 등록하기
root@2edf3b2ac7b6:/# docker stop jenkins
ubuntu@jenkins:~/jenkins$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
깃허브 프로젝트 빌드 및 배포 -1
이 과정에서 git을 사용하여 github에서 spring-petclinic 이라는 프로젝트를 로컬로 클론하여 해당 디렉토리를 이동할 것이다.
1. 레포지토리 로컬 시스템으로 복제 - (깃허브 명령어 : git clone)
git clone 명령어를 사용하여 원격 저장소에서 프로젝트를 로컬 컴퓨터로 복제하여 작업을 할 수 있게 해주었고, 복제한 프로젝트를 작업하기 위해서 프로젝트 디렉토리로 이동했다.
ubuntu@jenkins:~/jenkins$ git clone https://github.com/spring-projects/spring-petclinic.git
Cloning into 'spring-petclinic'...
remote: Enumerating objects: 10645, done.
remote: Total 10645 (delta 0), reused 0 (delta 0), pack-reused 10645 (from 1)
Receiving objects: 100% (10645/10645), 10.18 MiB | 16.12 MiB/s, done.
Resolving deltas: 100% (4046/4046), done.
ubuntu@jenkins:~/jenkins$ cd spring-petclinic/
3. java 개발 환경 openJDK 17설치
ubuntu@jenkins:~/jenkins/spring-petclinic$ sudo apt install -y openjdk-17-jdk
[sudo] password for ubuntu:
4. Maven 사용하여 spring-petclinic 프로젝트 빌드하고 패키징해주기
ubuntu@jenkins:~/jenkins/spring-petclinic$ ./mvnw package
maven은 프로젝트의 의존성을 해결하고, 소스 코드를 컴파일하여 최종 .jar 파일을 생성하게 해준다. 생성된 .jar 파일을 실행하여 docker 이미지로 만드는 역할을 해준다. 자동화하는 데 많이 쓰이는 것 같다. 알아두자
5. spring-petclinic 프로젝트의 구성요소 확인(target)
ubuntu@jenkins:~/jenkins/spring-petclinic$ ls -l
total 104
-rw-rw-r-- 1 ubuntu ubuntu 2993 Nov 18 03:24 build.gradle
-rw-rw-r-- 1 ubuntu ubuntu 547 Nov 18 03:24 docker-compose.yml
drwxrwxr-x 3 ubuntu ubuntu 4096 Nov 18 03:24 gradle
-rwxrwxr-x 1 ubuntu ubuntu 8762 Nov 18 03:24 gradlew
-rw-rw-r-- 1 ubuntu ubuntu 2966 Nov 18 03:24 gradlew.bat
drwxrwxr-x 2 ubuntu ubuntu 4096 Nov 18 03:24 k8s
-rw-rw-r-- 1 ubuntu ubuntu 11360 Nov 18 03:24 LICENSE.txt
-rwxrwxr-x 1 ubuntu ubuntu 10666 Nov 18 03:24 mvnw
-rw-rw-r-- 1 ubuntu ubuntu 6913 Nov 18 03:24 mvnw.cmd
-rw-rw-r-- 1 ubuntu ubuntu 15336 Nov 18 03:24 pom.xml
-rw-rw-r-- 1 ubuntu ubuntu 9966 Nov 18 03:24 README.md
-rw-rw-r-- 1 ubuntu ubuntu 38 Nov 18 03:24 settings.gradle
drwxrwxr-x 5 ubuntu ubuntu 4096 Nov 18 03:24 src
drwxrwxr-x 11 ubuntu ubuntu 4096 Nov 18 03:34 target
위에 디레터리 들은 spring-petclinic 프로젝트의 구성요소들을 포함하고 있으며, 각각의 파일과 폴더는 프로젝트의 빌드, 실행, 배포를 지원해준다. 여러개의 구성요소 중에서 이번에는 프로젝트를 빌드한 결과로 생성된 target(.jar)파일을 실행할 것이다.
6. 생성된 jar 파일을 java -jar 명령어를 실행하여 spring 애플리케이션을 시작
ubuntu@jenkins:~/jenkins/spring-petclinic$ cd target
ubuntu@jenkins:~/jenkins/spring-petclinic/target$ ls
checkstyle-cachefile maven-archiver
checkstyle-checker.xml maven-status
checkstyle-header.txt site
checkstyle-result.xml spring-petclinic-3.3.0-SNAPSHOT.jar
classes spring-petclinic-3.3.0-SNAPSHOT.jar.original
generated-sources surefire-reports
generated-test-sources test-classes
jacoco.exec test-ids
ubuntu@jenkins:~/jenkins/spring-petclinic/target$ java -jar spring-petclinic-3.3.0-SNAPS HOT.jar
# 결과
Spring Petclinic 프로젝트 Git 관리
1. SSH- key 생성
2. 사용자 정보 설정
ubuntu@jenkins:~/jenkins$ cd spring-petclinic
ubuntu@jenkins:~/jenkins/spring-petclinic$ git config --global user.name "깃허브 유저네임"
ubuntu@jenkins:~/jenkins/spring-petclinic$ git config --global user.email "깃허브 사용이메일"
전역적으로 git 사용자 정보를 설정해준다. 이렇게 설정해주면 이후 모든 프로젝트에서 기본적으로 이 정보를 사용하게 될 것이다.
3. GIT 초기화
4. 파일 추가
5. 상태 확인
ubuntu@jenkins:~/jenkins/spring-petclinic$ git init
Initialized empty Git repository in /home/ubuntu/jenkins/spring-petclinic/.git/
ubuntu@jenkins:~/jenkins/spring-petclinic$ git add README.md
현재 디렉터리(spring-petclinic)을 git 저장소로 초기화를 해주면 .git 폴더가 생성되어 git이 해당 디렉터리 파일과 변경 사항을 찾게 된다. 이후 git이 특정 파일(readme.md)를 추적하도록 설정해주고, status 상태를 확인하여 git 저장소 상태를 보여준다.
5. 커밋
ubuntu@jenkins:~/jenkins/spring-petclinic$ git commit -m "first commit"
[master (root-commit) f13df52] first commit
1 file changed, 162 insertions(+)
create mode 100644 README.md
커밋은 현재 상태를 기록하여 저장소에 저장해준다. firtst commit은 커밋 메시지이다.
6. 브랜치 이름 변경
ubuntu@jenkins:~/jenkins/spring-petclinic$ git branch -M main
기본 브랜치를 main으로 변경해준다. 깃허브의 기본 브랜치는 일반적으로 main이다. 최신 git에서는 기본 브랜치 이름이 master에서 main으로 바뀐것을 확인하였다.
7. 원격 저장소 추가
ubuntu@jenkins:~/jenkins/spring-petclinic$ git remote add origin git@github.com:XHIN98/spring-petclinic.git
깃허브 원격저장소를 추가해줬다. 깃허브 저장소의 ssh url이다. ssh 키 설정이 이전에는 해줬으니 가능해질 것이다. 업로드 할 때는 무조건 SSH로 업로드 해줘야한다.
8. 원격 저장소 확인
ubuntu@jenkins:~/jenkins/spring-petclinic$ git remote -v
9. 원격 저장소에 코드 푸시
ubuntu@jenkins:~/jenkins/spring-petclinic$ git push -u origin main
#추가적으로 전부 다 코드를 푸시 하고자 할 때
git add .
commit -m "20241118"
git push -u origin main
# 결과
원격 저장소(깃허브)에 README.md 파일이 업로드 된 것을 볼 수 있다. main 브랜치가 기본 브랜치로 설정이 되었고, 이후 커밋은 main 브랜치에 push 되었다.
'OS > Jenkins' 카테고리의 다른 글
[CI/CD | Jenkins] 빌드 & 배포- 3 (Publish Over SSH를 이용한 원격 서버 배포) (0) | 2024.11.25 |
---|---|
[CI/CD | Jenkins] 빌드 & 배포 - 2 (0) | 2024.11.18 |
[Jenkins/Github] ssh-keygen 생성으로 ssh 접속하기 (0) | 2024.11.18 |
[Jenkins/Github] Github 키 접속 (0) | 2024.11.18 |
[Jenkins] Jenkins 설치 - 3(Tomcat 설치 및 서버 설정) (2) | 2024.11.11 |