ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Jenkins and CI/CD
    DevOps/Jenkins 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

    댓글

Designed by Tistory.