Jenkins
Jenkins 개요
- Jenkins is a free and open source automation server
 - It helps automate the parts of software development related to building, testing and deploying, facilitating continuous integration and continuous delivery
 
Jenkins 특징
- 오픈소스인 자동화 서버
 - 다양한 플러그인 제공
- Pipeline
 - Authentication / Authorization
 - Git
 - Docker
 
 - 다양하게 확장
 
Jenkins 설치 및 실행 with Docker-compose
https://github.com/Sanses/devops_06_03_jenkins/blob/master/src/jenkins_local/docker-compose.yml
version: '3.9' services: jenkins: image: jenkins/jenkins:latest #2.60.3 container_name: jenkins environment: - "TZ=Asia/Seoul" ports: - "8080:8080" volumes: - "./data:/var/jenkins_home"
Jenkins Pipeline of Sample
pipeline { agent any stages { stage("Build") { steps { echo "Jenkins Pipeline running" } } } }
Jenkins Pipeline
Jenkins Pipeline 개요
- Jenkins 2.x or later (older versions back to 1.642.3 may work but are not recommended)
 - Required Plugin 'Pipeline plugin'
 - Support CD
 - Pipeline as code (DSL, Jenkinsfile)
 
Jenkins Pipeline Script
Scripted pipeline
- inject groovy script
 - Java API reference
 
Declarative pipeline (recommended)
- Jenkins DSL
 - Isolate complex logic into Jenkins plugin
 
Jenkins Pipeline Syntax
Section
- agent
- pipeline or stage가 실행될 노드 지정
- node
 - any
 - label
 - node
 - docker
 - dockerfile
 - kubernetes
 
 
 - pipeline or stage가 실행될 노드 지정
 - stages
- 순차적인 작업의 명세인 stage들의 묶음
 
 - steps
- stage안에서의 실행되는 단계
 
 - post
- 위치에 따라 stages들의 작업이 끝난 후 추가적인 steps 혹은 stage에 steps들의 작업이 끝난 후 추가적인 step
 - Condition
- always
 - changed
 - fixed
 - regression
 - aborted
 - failure
 - success
 - unstable
 - unsuccessful
 - cleanup
 
 
 
- agent
 Directive
- parameters
- key = value
 - pipeline 내부에서 사용할 환경변수
 - credentials()를 통해 Jenkins credential에 접근 가능
 
 - environments
- pipeline을 trigger할 때 입력 받아야 할 변수를 정의
 - Type
- string
 - text
 - booleanParam
 - choice
 - password
 
 
 - when
- stage를 실핼 할 조건 설정
 
 - ...
 
- parameters
 
Jenkins Pipeline Overview
Jenkins 설치 with Docker
https://github.com/Sanses/devops_06_03_jenkins/blob/master/src/jenkins_remote_docker/Dockerfile
DockerfileFROM jenkins/jenkins:lts ARG DOCKER_GID=1000 USER root # docker install COPY scripts/install_docker.sh /install_docker.sh RUN chmod +x /install_docker.sh && \ /install_docker.sh # aws cli install COPY scripts/install_aws.sh /install_aws.sh RUN chmod +x /install_aws.sh && \ /install_aws.sh # set jenkins user to host docker group RUN /usr/sbin/groupadd -g ${DOCKER_GID:-1000} -f docker && \ /usr/sbin/usermod -aG docker jenkins USER jenkinsdocker-compose.ymlversion: '3.8' services: jenkins: build: context: "" args: DOCKER_GID: ${DOCKER_GID} container_name: jenkins environment: TZ: "Asia/Seoul" JAVA_OPTS: "-Dhudson.model.DownloadService.noSignatureCheck=true" DOCKER_GID: ${DOCKER_GID} ports: - "8080:8080" volumes: - "./data:/var/jenkins_home" - "/var/run/docker.sock:/var/run/docker.sock"


