All Articles

Jenkins pipeline tutorials - 4. Jenkins Job 생성하기

개요

아래 스펙의 jenkins를 설치하는것을 목적으로 합니다.

  • jenkins(host container)를 docker image를 사용하여 구동합니다.
  • jenkins login을 github auth와 연동합니다.
  • UI로 blueocean을 사용합니다.
  • Jenkins job item 으로 pipeline job(organization, multi branch) 을 사용합니다.
  • Groovy 언어로 작성된 Jenkinsfile 을 사용합니다.
  • 메일발송으로 emailext plugin를 사용합니다.
  • jenkins job을 docker agent를 사용하여 구동합니다.(위의 host container와 구분되는 runner container 입니다)

목차

과정

4. Jenkins Job 생성하기

4-1. Pipeline Organization job 생성하기

  • 이제 jenkins job을 생성할차례입니다.
  • pipeline organization job 을 추가합니다.
    organization 전체를 주기적으로 스캔하고, jenkinsfile이 있는 repository에 자동으로 명시된 task를 수행합니다.
  • 먼저, 등록할 Organization 에 Owner 권한이 있는 계정이 필요합니다.
    스크린샷 2019-05-06 오후 11 42 05

  • new item > GitHub Organization
    스크린샷 2019-05-06 오후 10 53 22

  • Projects > Github Organization > Credentials - username and password 선택
    Behaviors > Add > discovery tags 추가
    681ad0d904675f814e80a97319e5282e

  • Orphaned Item Strategy > Discard old items > Days to keep old items
    저장 용량이 부담스러울것 같아 30일을 지정했습니다.(자유)
    스크린샷 2019-05-06 오후 10 56 09

  • Save 클릭
    스크린샷 2019-05-06 오후 10 56 15

  • 이제 Organization에 가보면 hook이 자동으로 생성된것을 확인할수있습니다.
    https://github.com/organizations/ORGANIZATION-NAME/settings/hooks
    스크린샷 2019-05-06 오후 10 57 19

  • 미리 Jenkinsfile을 넣어놓았던 repository는 CI job 실행까지 완료했네요.
    스크린샷 2019-05-06 오후 11 04 28

  • ref: https://support.cloudbees.com/hc/en-us/articles/115003015711-GitHub-Webhook-Organization-Folder


4-2. tag automatic trigger 문제

  • 위의 설정에는 한가지 문제가 있습니다. tag를 push해도 jenkins는 job을 수행하지않습니다.
  • 위의 사항을 테스트해보기위해, Jenkinsfile을 아래와 같이 두고 tag를 push해봅니다.

    • 아래 jenkinsfile의 의도는 tag를 push햇을때 when { tag '*' } 아래부분을 추가로 수행시키는것입니다.
#!/usr/bin/env groovy

pipeline {
    agent {
        docker { image 'centos/python-36-centos7:1' }
    }

    stages {
        stage('printenv') {
            steps {
                sh 'printenv'
                sh 'python --version'
            }
        }

        stage('minimal test') {
            steps {
                echo 'minimal test'
            }
        }

        stage('full test') {
            when { anyOf { branch 'master'; branch 'PR-*' } }
            steps {
                echo 'full test'
            }
        }

        stage('deploy') {
            when { tag '*' }
            steps {
                echo 'deploy'
            }
        }
    }

    post {
        always {
            echo 'done...'
        }
        success {
            echo 'success'
        }
        failure {
            echo 'failure'
        }
    }
}

4-3. tag automatic trigger 문제해결



  • item > configure > Project를 보면 Build strategies가 새로 생긴걸 확인할 수 있습니다.
    스크린샷 2019-05-06 오후 11 24 14

  • Change requests(PR을 의미합니다), Tags를 추가합니다.
    66f354a89f6c5f134d23b65c03421f49

  • 참고: 이때 Tags에서 ignore tags older than - 7 옵션은 생성된지 7일이 지난 tag는 최초 tag indexing 단계에서 job을 일으키지 않는다는 옵션입니다.
    ddf72692-11b6-11e9-9512-0c795280cef5 Ref: https://github.com/jenkinsci/basic-branch-build-strategies-plugin/blob/master/docs/user.adoc


  • 이번에는 tag push event가 재대로 jenkins job을 유발하는것을 확인할 수 있습니다.
    스크린샷 2019-05-06 오후 11 25 28 스크린샷 2019-05-06 오후 11 25 53

  • deploy stage 를 실행했습니다.
    스크린샷 2019-05-06 오후 11 26 10


Published 6 May 2019

kujyp 개발블로그

ML DevOps, Python, Docker ...
kujyp on Github