Jenkins 구축

문철환·2024년 3월 11일
post-thumbnail

젠킨스란?

  • 지속적인 통합 및 지속적인 배포(CI/CD)를 관리하기 위한 오픈 소스 자동화 도구입니다.
  • 젠킨스를 사용하면 소프트웨어 개발 프로세스를 자동화하여 개발자가 코드를 통합하고 테스트하며, 빌드하고 배포하는 등의 작업을 자동으로 수행할 수 있습니다.
  • Job(작업)
    • Jenkins에서 실행하는 각각의 작업을 나타냅니다.
    • Job은 소프트웨어 빌드, 테스트, 배포 등 다양한 작업을 수행할 수 있습니다.
  • Build(빌드)
    • 소스 코드를 실행 가능한 소프트웨어로 변환하는 과정을 의미합니다.
    • Jenkins를 사용하여 빌드 작업을 자동화할 수 있습니다.
  • Pipeline(파이프라인)
    • 여러 단계의 작업을 연결하여 자동화 프로세스를 구성하는 도구입니다.
    • 소프트웨어 개발 및 배포 과정을 단계별로 정의하고 실행할 수 있습니다.
  • Plugin(플러그인)
    • Jenkins의 기능을 확장하기 위해 사용되는 확장 모듈입니다.
    • 다양한 프로젝트 유형 및 환경에 맞게 Jenkins를 사용할 수 있습니다.

젠킨스 설치 (Docker)

  • Jenkins 이미지 받기
    • Java 17 버전 이용
docker pull jenkins/jenkins:jdk17
  • Jenkins 컨테이너 실행
docker run -d --restart always --env JENKINS_OPTS=--httpPort=8080 -v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Seoul -p 8080:8080 -v /jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose --name jenkins -u root jenkins/jenkins:jdk17
  • 위 코드 설명
    • -d: 컨테이너를 데몬으로 띄운다.
    • --restart always : 컨테이너가 어떤 이유로 종료되더라도, 자동으로 재시작 하는 옵션
    • -e TZ=Asia/Seoul : 환경변수 설정(내부 시간을 Asia/Seoul 설정)
    • -p 8080:8080 : 컨테이너 외부와 내부 포트에 대해 포워딩
      • 왼쪽 : Host Port
      • 오른쪽 : Container Port
    • -v /tec/localtime:/etc/localtime:ro : Host OS의 localtime을 컨테이너의 localtime과 동기화
    • -v /jenkins:/var/jenkins_home : 도커 컨테이너의 데이터는 컨테이너가 종료되면 사라지기 때문에, 볼륨 마운트 옵션을 이용하여 Jenkins 컨테이너의 /var/jenkins_home 디렉토리를 Host OS의 /jenkins와 연결하여 데이터를 유지한다.
    • --name jenkins : 도커 컨테이너의 이름을 설정하는 옵션
    • -u root : 컨테이너가 실행될 리눅스 사용자 계정 지정(root)
  • Jenkins 종료
docker stop jenkins
  • 포트가 개방되어있는지, 확인하기
netstat -nltp

Jenkins 환경설정 (플러그인 미러서버 변경)

  • Jenkins 데이터가 있는 디렉토리에 update-center-rootCAs 하위 디렉토리 생성
sudo mkdir /jenkins/update-center-rootCAs
  • CA파일 다운로드
sudo wget https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/rootCA/update-center.crt -O /jenkins/update-center-rootCAs/update-center.crt
  • Jenkins 플럭그인 다운로드시 미러사이트로 대체될 수 있도록 설정
sudo sed -i 's#https://updates.jenkins.io/update-center.json#https://raw.githubusercontent.com/lework/jenkins-update-center/master/updates/tencent/update-center.json#' /jenkins/hudson.model.UpdateCenter.xml
  • Jenkins 컨테이너 재시작
docker restart jenkins

Jenkins 접속

  • 해당 url:8080으로 접속하면 젠킨스 화면이 뜬다.
  • 웹 페이지 비밀번호를 확인하기
    • Jenkins 컨테이너의 bash 쉘에 접속

      docker exec -it jenkins /bin/bash

    • 해당하는 디렉토리로 이동한다

      cd /var/jenkins_home/secrets

    • 초기 비밀번호를 확인한다. 이후 exit으로 bash쉘을 나간다.

      cat initialAdminPassword
      exit

젠킨스 기본 설정

Jenkins 내부에 Docker 패키지,Docker-compose 설치

  • 컨테이너 재시작 마다 하는 작업
  • 젠킨스 컨테이너 접속
    docker exec -it jenkins /bin/bash
  • Docker Repository 등록 및 docker-ce 패키지 설치(AMD64)
apt-get update && apt-get -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common && curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable" && apt-get update && apt-get -y install docker-ce
  • Docker Jenkins에서 Host Docker 접근권한 부여
groupadd -f docker
usermod -aG docker jenkins
chown root:docker /var/run/docker.sock

  • Docker Compose 다운로드
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

  • /usr/local/bin/docker-composer 권한 변경
chmod +x /usr/local/bin/docker-compose

젠킨스 파이프라인 설정

플러그인 설치


  • 플러그인 설치 목록
    • SSH Agent : ssh 커멘드 입력에 사용
    • Docker / Docker Commons / Docker Pipeline / Docker API : docker 이미지 생성에 사용
    • Generic Webhook Trigger : 웹훅을 통해 브랜치 merge request 이벤트 발생시 Jenkins 자동 빌드에 사용
    • GitLab / GitLab API / GitLab Authentication : GitLab 레포지토리 이용시 사용
    • NodeJS : Node.js 빌드시 사용

GitLab Credential 등록 (Username with password)

  • GitLab 커넥션 추가


    Test 진행 후 저장!

Jenkins Webhook Integration 설정

  • 젠킨스 파이프라인 아이템 만들기

    아래 이미지 버튼 체크체크 (밑줄 그은, url은 깃랩 웹훅에서 쓰인다)

    고급 > Secret token (Generate 클릭 후 토큰 메모장에 복사)

    저장하기.
  • Gitlab Webhook 지정

도커허브

  • 도커허브 토큰생성
    https://hub.docker.com/
    도커 허브 사이트 로그인

  • 도커허브 레포지토리 생성

  • 도커허브 젠킨스 Credential 추가

Ubuntu Credential 추가

profile
밝고 빛나게

0개의 댓글