7주차 - EKS CI/CD - Jenkins(기본)

728x90

 

Jenkins란

 

  • 소프트웨어 개발 프로세스의 다양한 단계를 자동화하는 도구로서 중앙 소스 코드 리포지터리에서 최신 코드 가져오기, 소스 코드 컴파일, 단위 테스트 실행, 산출물을 다양한 유형으로 패키징, 산출물을 여러 종류의 환경으로 배포하기 등의 기능을 제공
  • 젠킨스는 아파치 톰캣처럼 서블릿 컨테이너 내부에서 실행되는 서버 시스템이다. 자바로 작성됐고, 소프트웨어 개발과 관련된 다양한 도구를 지원
  • 젠킨스는 파이프라인이라고 부르는 스크립트를 작성할 수 있는데, 이를 사용해서 각 빌드 단계마다 젠킨스가 수행할 태스트 및 하위 태스크의 순서를 정의
  • 다양한 Plugins 연동

 

 설치

# 실습 편리를 위해서 root 계정 전환
sudo su -

# Add required dependencies for the jenkins package
# https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/amazon-linux-install.html
sudo yum install fontconfig java-17-amazon-corretto -y
java -version
alternatives --display java
JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto.x86_64
echo $JAVA_HOME

# 젠킨스 설치
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo yum upgrade
sudo yum install jenkins -y
sudo systemctl daemon-reload
sudo systemctl enable jenkins && sudo systemctl start jenkins   # 다소 시간 걸림
sudo systemctl status jenkins

# 초기 암호 확인
sudo systemctl status jenkins
cat /var/lib/jenkins/secrets/initialAdminPassword

# 접속 주소 확인 
curl -s ipinfo.io/ip | awk '{ print "Jenkins = http://"$1":8080" }'

 

 Jenkins 작업

  • 작업을 수행하는 시점 - Trigger ( 빌드유발 )
    • 작업 수행 태스크 task가 언제 시작될지를 지시
  • 작업을 구성하는 단계별 태스크 - Built step
    • 특정 목표를 수행하기 위한 태스크를 단계별 step로 구성할 수 있다.
    • 이것을 젠킨스에서는 빌드 스텝 build step이라고 부른다.
  • 태스크가 완료 후 수행할 명령 - Post-build action
    • 작업의 결과(성공 or 실패)를 사용자에게 알려주는 후속 동작
    • 자바 코드를 컴파일한 후 생성된 클래스 파일을 특정 위치로 복사 등

 기본 사용법  Tool 설정

 

  • jenkins 관리: jenkins 관리 페이지에서는 다양한 jenkins 설정 및 도구, 프러그인을 설정할 수 있음
  • 실습에 사용 할 JDK installation 화면

 

  • item : 젠킨스에서 사용하는 작업의 최소 단위
  • 새로운 Item 클릭 → Name : burst , Freestyle project ⇒ 하단 OK 클릭

 

  • 빌드 스탭: 빌드 과정 선택
    • 이번 실습에서는 Execute shell 선택
    • Execute shell에 간단한 명령어 입력 → echo "Aws Workshop Study"

  • 하단에 Apply 후 저장
    • 저장 후, 지금 빌드 클릭 시 빌드 진행
    • 좌측 빌드 내역 확인 (#1)

  • Console Output를 선택하여 빌드 내용 확인 → Build Step에서 입력한 echo "Aws Workshop Study" 확인

 

  • 추가 Build Step 설정
    • 추가로 설정한 Bulid step이 순차적으로 진행

 

 

  • 젠킨스 작업 디렉토리 (서버 확인)
    • /var/lib/jenkins/workspace가 기본 jenkins 디렉토리
    • item명으로 디렉토리 생성
      • /var/lib/jenkins/workspace/burst

 

 

젠킨스 - docker build

  • 사전 준비로 jenkins 계정 설정
    • jenkins 계정의 경우 jenkins 설치 시 자동으로 생성되는 계정으로 초기에는 /bin/false → /bin/bash 변경
    • jenkins 계정이 docker를 사용할 수있게 docker 그룹에 추가
    • 미리 Dockerfile 생성
      • 경로: /var/lib/jenkins/myweb2
# jenkins 유저로 docker 사용 가능하게 설정
usermod -s /bin/bash jenkins

chmod 666 /var/run/docker.sock
usermod -aG docker jenkins

# Jeknins 유저 확인
su - jenkins

# Dockerhub로 로그인 하기
docker login
Username: <자신의 계정명>
Password: <자신의 암호>

# myweb:v2.0.0 컨테이너 이미지 생성을 위한 Dockerfile 준비
# 실습을 위한 디렉터리 생성 및 이동
mkdir -p ~/myweb2 && cd ~/myweb2

# Dockerfile 파일 생성
vi Dockerfile
FROM ubuntu:20.04
ENV TZ=Asia/Seoul VERSION=2.0.0 NICK=burst
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
    sed -i 's/archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list && \
    sed -i 's/security.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list && \
    apt-get update && apt-get install -y apache2 figlet && \
    echo "$NICK Web Server $VERSION<br>" > /var/www/html/index.html && \
    echo "<pre>" >> /var/www/html/index.html && \
    figlet AEWS Study >> /var/www/html/index.html && \
    echo "</pre>" >> /var/www/html/index.html
EXPOSE 80
CMD ["usr/sbin/apache2ctl", "-DFOREGROUND"]

# 모니터링
watch -d 'docker images; echo; docker ps'

-----------
# (참고) 이미지 빌드
docker build -t myweb:v2.0.0 -f /var/lib/jenkins/myweb2/Dockerfile

# (참고) 컨테이너 실행
docker run -d -p 80:80 --rm --name myweb myweb:v2.0.0

 

  • jenkins user bash shell 설정

  • docker gorup에 jenkins 계정 추가

  • jenkins 유저에서 docker login

 

  • jenkins item 내 Build Step 설정 및 빌드

 

  • 확인

 

 

 jenkins - 파라미터/빌드유발

 

  • item 설정 / General에서 "이 빌드는 매개변수가 있습니다." 클릭
    • VERSION / NICK

 

  • 소스코드 관리에 Git 클릭
    • 자신의 github repository 주소 입력
    • Branch 설정: main

 

  • 빌드 유발: 빌드 트리거로 다양한 옵션 존재
    • 이번 실습에선 Poll SCM선택(cron설정) / * * * * *
  • Build Step 설정
    • ITEM 경로 이동 /var/lib/jenkins/workspace/Trigger-Project
    • 등록한 git repo에서 Dockerfile 다운
    • 다운받은 Dockerfile을 빌드 및 실행

  • 파라미터와 함께 빌드

 

 

 

728x90