목차

Jenkins CI/CD

Java runtime 환경으로 구성된 소프트웨어 구축, 테스트, 전달 또는 배포와 관련되 모든 종류의 작업의 자동화를 목적으로 사용되는 독립형 OpenSource CI Server이다.

  • 웹기반 콘솔로 다향한 plug을 통한 편리한 설정 지원
  • 소스 버전 관리 도구와 연동하여 코드 변경을 감지, 자동 테스트, 빌드를 수행하는 안정적 빌드/배포 환경 지원
  • 다양한 소프트웨어 활용에 대한 문서화 구성이 잘되어있음. plugin 개발도 가능
  • 주요 plugin(https://plugins.jenkins.io)
    • credentials plugin: 인증 관련으로 VM환경에서 ssh key, AWS/Git 등에서 token 활용
    • git plugin: GitHub source code 접근을 통한 빌드 수행 지원
    • pipline plugin: CI 구축 플러그인
    • docker plugin & pipeline: Jenkins가 docker를 사용 하게 지원
    • blue/ocean plugin: CD pipeline의 시각화지원 구조 파악에 용이
    • Amazon EC2 plugin: EC2 인스턴스 스케일링 가능한 빌드 클러스터 구성 지원
    • Metric plugin: Metric(지표) 측정을 위한 Java library 제공

용도에 맞게 plugin을 조합하여 원하는 CI/CD 자동화를 구성하는 것

  • Pipeline은 자동화 순서를 정의한 스크립트 언더
  • Declarative(선언적), Scripted pipeline 구성 방식이 있음

Declarative(가독성 → 빠른업데이트)

# Declarative(가독성 → 빠른업데이트)
pipeline {
    agent { docker  'node:6.3'}
    stages {
        stage('build') {
            steps {
                sh 'npm version'
            }
        }
    }
}

Scripted pipeline

# scripted pipeline
node('docker'){
    checkout scm
    stage('build') {
        docker.image('node:6.3').inside {
            sh 'npm version'
        }
    }
}
  • Agent section
    • 여러 Slave node사용시에 노드 지정
    • docker container 수행 명령 지정 가능
  • Stage section
    • 어떤 일을 처리할 것인지 정의(category)
    • ex: backend배포를 위한 stage 정의
  • Steps section
    • 특정 stage안에서 작업 단계(step)를 정의
    • plugin 설치 관련 step 생성
  • Post section
    • stage 결과에 따른 후속 조치
    • 성공이면 Email 전동, 실패시 중단 및 skip 등 작업에 따른 조치 지정
  • Jenkins 설치
#docker compose
version: "3.9"
services:
  jenkins:
    image: jenkins/jenkins:lts-jdk17
    container_name: jenkins
    restart: always
    ports:
      - "8088:8080" #원하는 포트:Jenkins포트
      - "50000:50000"
    environment:
      privileged: true
      user: root
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock#고정
      - /data/docker_volumes/jenkins:/var/jenkins_home#원하는 볼륨과 연결
networks:
  jenkins:
    name: jenkins
    driver: bridge

 #docker
 docker run -itd --name=fc-jenkins -p 8088:8080 -p 50000:50000 \\
 --privileged=true -u root \\
 --restart=always
 -v /var/run/docker.sock:/var/run/docker.sock \\#고정
 -v //data/docker_volumes/jenkins:/var/jenkins_home \\#원하는 볼륨
 jenkins/jenkins:lts
  • 로그인 키 획득
docker logs jenkins

  • web 접속(ip:8088)
    • Administrator passsword에 위의 키값 입력
    • 계정 생성
    • 첫 설치라면 Install suggested plugins로 설정하여 진행(약 3~5분 진행)