
이번글은 Jenkins설치에 관한 글이다.
아래 링크에서 왜 CI/CD가 현대 개발 사회에서 필수적인지 설명했다.
이번엔 CI/CD의 점유율 44%를 가지고있어서 래퍼런스가 많고 생태계가 잘 구성되어 있는 Jenkins에 대해서 설치해보자
설치는 Docker를 통한 과정을 보여주겠다. Docker관련 설명또한 블로그에 정리되어있으니 처음 접한다면 선수과정으로 가져가는 것도 좋다.
점유율 출처 및 CI/CD 설명
Jenkins Project Reports Growth of 79% in Jenkins Pipeline, Used to Speed Software Delivery - CD Foundation
Jenkins Pipeline usage grew 79% from June 2021 – June 2023, while total workloads run on Jenkins during the same period grew by 45%. CI/CD pipelines are created to automate and speed the delivery of software, bringing value and competitive advantage to o
cd.foundation
[Dep/Jenkins] CI/CD [1]
이번글은 CI/CD에 관한 글이다.논리적인 접근 및 타당성에 집중해서 글을 작성해보려고 한다.근데왜 Jenkins목록에 있냐면 Jenkins를 공부하는것이 궁극적인 목표이고 이를 위한 초석은 CI/CD에 대한
naturecancoding.tistory.com
Jenkins설치
1. 전제 조건
- 하드웨어 요구 사항 :
설치 환경에 최소 256 Ram, 하드웨어 1GB 정도의 공간 요구 - 소프트웨어 요구 사항 :
필수로 Java가 필요함 JDK 혹은 JRE 버전은 설치할 Jenkins 버전에 따라서 다를 수 있음
빌드 과정에 따라서 다양한 소프트웨어가 필요함 python, docker 등등 - Jenkins Release 유형
- LTS (장기 지원 Release) :
장기 지원은 12주마다 제공된다. 안정적이며 널리 테스트 되었고 최종 사용자를 대상으로 함
- 주간 Release :
이전의 버그를 수정해서 매주 제공됨 이는 주로 Plugin 개발자를 대상으로 함
이번 설치는 Docker Image를 사용한다 버전은아래와 같다. 자바 17이 필요하다.
jenkins/jenkins:2.452.2-lts
다른 버전을 확인하고 싶다면 아래서 확인하면 된다.
https://hub.docker.com/u/jenkins
hub.docker.com
2. Docker
그럼 왜 Docker를 사용하는가?
빠른 설치, 일관된 환경 제공, 확장성 및 유지보수를 용이하게 하기위해서이다.
Jenkins는 컨테이너 기반 인프라와 자연스롭게 통합되어 CI/CD 작업의 효율성을 높일수 있다.
Jenkins또한 공식적으로 Docker를 활용한 설치와 운영을 권장하며 아래 링크는 Dcoker를 사용한 Jenkins 공식 문서이다.
Docker
Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software
www.jenkins.io
DockerFile
# Jenkins 베이스 이미지 설정
FROM jenkins/jenkins:2.452.2-lts
# 루트 사용자로 전환하여 필요한 패키지 설치를 진행한다.
USER root
# 필요한 일반 패키지들을 설치한다.
RUN apt-get update && \
apt-get install -y \
curl \
wget \
python3 \
python3-venv \
zip \
gnupg \
software-properties-common \
vim \
sshpass
# AdoptOpenJDK 8 설치
RUN wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_x64_linux_hotspot_8u292b10.tar.gz && \
tar -xvzf OpenJDK8U-jdk_x64_linux_hotspot_8u292b10.tar.gz && \
mv jdk8u292-b10 /usr/local/jdk8
# AdoptOpenJDK 17 설치
RUN wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.7+7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.7_7.tar.gz && \
tar -xvzf OpenJDK17U-jdk_x64_linux_hotspot_17.0.7_7.tar.gz && \
mv jdk-17.0.7+7 /usr/local/jdk17
# 기본 Java로 Java 17을 설정
RUN ln -sf /usr/local/jdk17/bin/java /usr/bin/java && \
ln -sf /usr/local/jdk17/bin/javac /usr/bin/javac
# Docker 설치를 위한 준비 과정 및 Docker CLI 설치
RUN apt-get update && \
apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
# Docker GPG 키를 추가하고 Docker 리포지토리를 설정한다.
RUN curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list && \
apt-get update && \
apt-get install -y docker-ce-cli
# Docker Compose 설치
RUN curl -L "https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
chmod +x /usr/local/bin/docker-compose
# Docker 그룹 설정
RUN if ! getent group 998; then groupadd -g 998 docker; else groupmod -n docker $(getent group 998 | cut -d: -f1); fi
# Jenkins 사용자를 docker 그룹에 추가
RUN usermod -aG docker jenkins
# JAVA_HOME 환경 변수를 Java 17로 설정
ENV JAVA_HOME=/usr/local/jdk17
ENV PATH=$JAVA_HOME/bin:$PATH
# Java 8 환경 변수 추가 (필요 시 직접 지정해서 사용할 수 있도록)
ENV JAVA8_HOME=/usr/local/jdk8
# 시간대 설정
ENV TZ=Asia/Seoul
# Jenkins 사용자로 다시 전환
USER jenkins
과정은 다음과 같이 정리할 수 있다.
- 기본 이미지 설정
- 루트 사용자 전환
설치 권한이 있는 사용자를 사용해야해서 - 필요한 패키지 설치
추가적으로 원하는 걸 추가하면 된다. 지금 설치 버전은 Debian 운영체제 기반으로 하고있음을 기억하자 - AdoptOpenJDK
Java 8, 17등 CI/CD 과정에 필요한 버전 및 Jenkins를 구동하는데 필요한 Java 버전 설치 - 기본 자바 버전 설정
Java 17을 기본 버전으로 설정 및 심볼릭 링크를 연결 - Docker CLI 설치 준비
GPG 키는 공개되어있는 키이며 패키지 변조를 검사할 때 사용한다.
Docker CLI를 설치해서 Docker관련 명령어를 Jenkins안에서 사용할 수 있도록 한다. - Docker Compose
Docker Compose 명령어 또한 사용할 수 있도록 한다. 권한 설정도 진행한다. - Docker 그룹을 설정
jenkins 사용자 (root 가아닌)이 사용할수 있도록 권한을 설정할때 필요해서 생성한다 - Jenkins 사용자 설정
jenkins 사용자를 만들어서 docker그룹에 추가했으며 컨테이너가 jenkins사용자를 통해서 실행되도록 설정 - 환경 변수 설정
- 시간값 설정
- Root 사용자에서 Jenkins사용자로 변경
Docker-compose
version: "3"
services:
jenkins:
build:
context: .
dockerfile: ./dockerfile/Dockerfile-jenkins # Jenkins Dockerfile 경로 지정
container_name: jenkins
hostname: jenkins
restart: always
ports:
- "9001:8080" # Jenkins의 기본 포트
- "50000:50000" # Jenkins 에이전트 포트
environment:
JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
PATH: $JAVA_HOME/bin:$PATH
TZ: Asia/Seoul
volumes:
- jenkins_home:/var/jenkins_home
volumes:
jenkins_home:
- 버전 설정
version: "3": Docker Compose 버전 3 사용 - 서비스 정의
jenkins 서비스를 설정하며, ./dockerfile/Dockerfile-jenkins을 사용해 빌드 - 컨테이너 설정
컨테이너 이름은 jenkins, 호스트명도 jenkins, 재시작 정책은 always로 설정 - 포트 매핑
9001:8080은 Jenkins 웹 포트(8080은 스프링이 사용중이고 9000은또 다른곳에 사용중), 50000:50000은 에이전트 통신 포트로 설정 (x : y 여기서 x값에 적히는 포트는 상황에 맞게 설정하면 된다. - 환경 변수 설정
JAVA_HOME을 /usr/lib/jvm/java-8-openjdk-amd64로 설정하고 PATH에 추가
시간대는 Asia/Seoul로 설정 - 볼륨 설정
jenkins_home 볼륨을 /var/jenkins_home에 매핑해 데이터 지속 보관 - 볼륨 선언
jenkins_home 볼륨 선언
Jenkins 초기 설정
bash에서 다음 명령어를 실행해서 초기 adimn password를 확인한다
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

http://localhost:9001 로 접속하자
자신이 사용해준 port에 따라서 접속하거나 ip에 따라서 접속하면 된다.

아까 찾았던 초기 비밀번호를 입력해주자

이런화면이 나올텐데 플러그인은 엄청 여러가지가 있으니 직접 선택해도 되고 추천해주는 걸 받아도 된다.
이제 사용자 설정화면이 나올텐데 팀에 맞춘 id를 만들면된다.
pipline관련된 설정은 나중에 설명할꺼 같은데 기약이 없기 떄문에 일단 아래 공식문서를 참고하는게 좋다
Pipeline
Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software
www.jenkins.io
'Deployment > Jenkins' 카테고리의 다른 글
| [Dep/Jenkins] CI/CD [1] (5) | 2024.12.11 |
|---|