DevOps/Jenkins

Jenkins and CI/CD

PHM 2023. 11. 6. 13:30

젠킨스란?

- 자바로 작성된 오픈 소스 지속적 통합 및 지속적 제공 도구

- 소프트웨어 프로젝트를 구축하고, 제공하는 데 사용되는 자동화 서버

 

CI/CD 란?

- 지속적 통합, 즉 CI는 모든 개발자의 작업 복사본을 공유된 메인라인으로 하루에 몇 번식 병합하는 소프트웨어 엔지니어링 작업 방식이다.

- 지속적 제공, CD는 팀이 소프트웨어를 짧은 주기로 만들어 소프트웨어가 언제든지 안정적으로 출시할 수 있는 소프트웨어 엔지니어링 접근법입니다.

- 젠킨스는 소프트웨어를 짧은 주기로 출시하는 데 큰 도움을 줄 수 있습니다.

- 실제로 CI/CD는 자동화된 빌드와 테스트를 진행하여 작업을 검증하고 게시하는 것을 의미한다.

 

docker 란?

- 가장 보편적인 컨테이너 소프트웨어

- docker engine : 도커 이미지를 실행하는 소프트웨어

- docker hub : 도커 이미지를 저장하고 가져오는 온라인 서비스

 

Jenkins Job DSL

- 젠킨스 잡 DSL은 최소한의 작업만으로 프로그래밍 방식으로 작업을 정의할 수 있게 해주는 젠킨스의 플러그인

- example (npm install)

job('NodeJS example') {
    scm {
        git('git://github.com/...') { node ->
            node / gitConfigName('DSL User')
            node / gitConfigEmail('jenkins-dsl@newtech.academy')
        }
    }
    
    trigger {
        scm('H/5 * * * *')
    }
    
    wrapper {
        nodejs('nodejs') // this is the name of the NodeJS installation in
        		// Manage Jenkins -> Configure Tools -> NodeJS Installations -> Name
    }
    
    steps {
        shell("npm install")
    }
}

    ㆍscm에서 깃 저장소부터 찾아야 한다. + 깃클라이언트 설정

    ㆍtrigger : 5분마다 확인, 변경사항이 있으면 NodeJS 다시 구축

    ㆍwrapper을 정의하지 않으면 npm 사용 불가

    ㆍsteps 명령어 수행

 

 

Jenkins Pipeline

- 젠킨스 파이프라인을 사용하면 젠킨스 구축 단계를 코드로 작성할 수 있다.

 

- 젠킨스 잡 DLS 는 사용자가 작성한 코드를 기반으로 새 작업을 생성

- 젠킨스 파이프라인은 작업 유형이다.

    ㆍ한 프로젝트의 구축/테스트/배포를 처리하는 작업을 생성

- example

node {
    def mvnHome
    
    stage('Preparation') {
        ...
    }
    
    stage('Build') {
        ...
    }
    
    stage('Results') {
        ...
    }
}

 

젠킨스 통합

- 이메일 통합

- 슬랙통합

- 깃헙 및 빗버킷 통합

- JFrog 아티팩토리 통합

    ㆍ빌드의 결과 바이너리

    ㆍ빌드의 결과인 이 아티팩트를 어딘가 저장하려면 JFrog 아티팩토리는 빌드에서 생성된 아티팩트를 저장할 수 있는 제품

    ㆍ배포되는 빌드의 모든 아티팩트를 저장하는 것이 제일 좋다 - 개발서버에서 테스트 후 원래대로 되돌릴때!

    ㆍJFrog & Artifactory Plugin 

- 맞춤형 API 통합

- 소나큐브 통합

 

고급 젠킨스 사용

- 젠킨스 슬레이브

- 블루오션

- ssh-agent

- 보안 사용 수칙


젠킨스 시작하기

- 도커에 젠킨스 설치

$docker run -d --name jenkins --restart=on-failure \
-p 8080:8080 \
-v /var/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-e TZ=Asia/Seoul \
-u root \
jenkins/jenkins

    ㆍ--restart : on-failure 옵션은 비정상 종료시 컨테이너를 재실행합니다.

    ㆍ-p : 외부 접속을 위해 호스트의 9999포트를 바인딩

    ㆍ-v : 호스트의 var/jenkins 디렉토리를 호스트 볼륨으로 설정하여 jenkins 컨테이너의 home 디렉토리에 마운트

               docker.sock 파일은 토커 데몬과 통신할 수 있는 소켓파일이다.

               docker.sock 파일을 컨테이너에 마운트 시켜서 도커 명령을 실행할 수 있게 해준다.

               이러한 방식을 dood(docker out of docker)라고한다.

    ㆍ-e : 젠킨스의 timezone을 KST 기준으로 설정

    ㆍ-u : 추후 권한 문제가 발생할 수 있기 때문에 user 옵션을 root 사용자

 

- 초기 비밀번호

$ docker exec -it cfb /bin/bash
$ cat /var/jenkins_home/secrets/initialAdminPassword

 

 

- plugin 정리

    ㆍDocker Build and Publish plugin

    ㆍjob dsl

    ㆍEmail Extension Plugin

    ㆍSlack Notification Plugin

    ㆍGitHub Branch Source Plugin

    ㆍArtifactory Plugin

    ㆍHTTP request plugin