docker로 로컬 환경에 jenkins 구축하기


젠킨스 구축하기

1. jenkins docker 이미지를 다운받고 실행한다.

docker run \
  -p 8080:8080 -p 50000:50000 \         # port 설정 
  -v /home/jenkins/:/var/jenkins_home \ # 설정파일 마운트
  --name my-jenkins \                   # 이름 설정
  jenkins/jenkins                       # 이미지 네임 (:jdk11를 붙이면 jdk11 이미지로 다운받음)

# /home/jenkins 폴더안에 jenkins 데이터가 저장되며, uid(1000) 유저 권한을 부여해야 한다. (이 경로는 원하는 경로로 변경할 수 있다.)
# uid/gid가 다른지는 내부 컨테이너에서 id 명령어로 확인
chown 1000:1000 /home/jenkins/

2. jenkins 실행 후 화면에 표시되는 비밀키를 복사하고, http://serverip:8080/ 접속시 표시되는 화면에 입력한다.

복사 못했으면 내부 컨테이너의 cat {젠킨스경로}/secrets/initialAdminPassword 를 확인하면 된다.

3. 최초 사용자를 등록하고, 추천 플러그인들을 설치한다.

http://serverip:8080/jenkins/ 와 같이 context path를 지정하려면 아래 옵션을 추가한다.

docker run \
  -p 8080:8080 -p 50000:50000 \
  -v /home/jenkins/:/var/jenkins_home \
  --name my-jenkins \
  -e "JENKINS_OPTS=--prefix=/jenkins" \
  jenkins/jenkins

4. github 계정 설정 (private 저장소인 경우에만 해당)

Credentials > System > Global credentials > Add Credentials 메뉴 선택

개인키를 만들지 않은 경우 Kind : Username with password 선택 Username, Password : github 로그인 정보 입력

개인키가 있는 경우 Kind : SSH Username with private key 선택 Username : github 계정 Private Key : (Enter directly, Add, 내용 복사)

5. jdk 설정

Global Tool Configuration 페이지

JDK > JDK installations… 클릭

Add JDK 클릭

Name: java8

JAVA_HOME: /usr/local/openjdk-8 입력 (도커 이미지에 포함되어 있다)

Save 클릭

6. 프로젝트 생성

새로운 Item 선택

프로젝트명 입력하고 Free style project 선택

7. General 항목

Github project: 프로젝트 url을 입력하면 바로 이동할 수 있는 링크버튼이 생긴다

소스 코드 관리

Git 을 선택하고 repository url를 입력한다 (git 저장소 주소)

crendentials은 위에서 생성한것을 선택한다

8. 빌드 유발

빌드를 원격으로 유발 (github의 webhook에 이 주소를 입력할 경우 자동빌드하도록 설정할 수 있다)

Build after other projects are built : 다른 프로젝트의 후속으로 자동 빌드되어야할 경우 선택하고 선행 프로젝트명 입력

Build periodically : 주기적으로 빌드되어야할 경우 crontab 형태로 입력

9. Build

  1. Invoke top-level Maven targets 선택방식

    maven version: maven

    goals: clean install 혹은 clean package 등 입력

  2. Execute Shell 방식

    스크립트 커맨드 입력 ex)

     cd xxx ...
     mvn clean package ...
     java -jar xxx ...
    

파이프라인 예시

Pipeline Syntax 덕분에 손쉽게 구성 가능함

직렬/병렬 전부 가능하다. 여러 환경에 동시 또는 순차적 배포해야 할 때 좋다.

// 여러 잡을 순차적으로 처리하는 예시
pipeline {
    agent any
    
    parameters {
        choice(
            name: 'ResourceVersion',
            choices: ['one', 'two', 'three'],
            description: '선택형 인자1' 
        )
        choice(
            name: 'BuildVersion',
            choices: ['one2', 'two2', 'three2'],
            description: '선택형 인자2' 
        )
    }
    
    stages {
        stage('Resource Step') {
            steps {
                // 잡 이름 TestJob2, 파라미터 매개변수 명 job2Version, 대입되는 매개변수는 선택형인자1인 ResourceVersion
                build job: 'TestJob2', parameters: [ string(name: 'job2Version', value: "${params.ResourceVersion}") ]
            }
        }
        stage('Build Step') {
            steps {
                build job: 'TestJob1', parameters: [ string(name: 'job1Version', value: "${params.BuildVersion}") ]
            }
        }
    }
}


기타 - 깃허브 연동 및 자동배포 참고

외부링크

기타 - 깃 태그 기준으로 빌드(Versioning)

Jenkins + Git 태그 기준으로 빌드하기