Django 이미지를 빌드하고 dockerhub 및 GitHub 웹후크 통합에 푸시하는 Jenkins 파이프라인.

7357 단어
이 시리즈의 네 번째 기사입니다Deploy a Django app to AWS EC2 instance using Jenkins. A gentle guide to Jenkins..

이 기사에서는 학습한 모든 기본 사항을 종합하고 Django 이미지를 빌드하여 Dockerhub에 배포할 전체 Jenkins 파이프라인을 빌드합니다. 이전 기사를 미리 살펴봐야 합니다.

1. 초기화 단계를 추가하고 script.groovy 파일을 로드합니다.



JenkinsFile에서 Groovy 스크립트를 로드하는 초기화 단계를 추가합니다.

def gv // we define this here to make it globally available. 
pipeline { 

    agent any
    stages { 

        stage('Init') { 

            steps { 
                script { 
                    gv = load "script.groovy"
                }
            }
        }
    }
}



프로젝트의 루트에 script.groovy 파일이 있어야 합니다. 그렇지 않은 경우 다음과 같이 친절하게 만드십시오.

touch script.groovy


script.groovy 파일 내에 다음 코드를 추가합니다.

def buildApp() { 
    echo "Building app"
}
return this // returns all the funcs inside the file.



2. JenkinsFile에 테스트 단계를 추가합니다(선택 사항).



이제 JenkinsFile에 테스트 단계를 추가합니다. 그러나 이는 선택 사항이며 일부 테스트를 실행하려는 경우 추가할 수 있습니다.

먼저 testApp 파일에 script.groovy 함수를 추가합니다.

def testApp() { 
    echo "Testing our application" 
    // you can now run your test command here, e.g if using pytest you run 
    sh "pytest"
}

def buildApp() { 
    echo "Building app"
}

return this



이제 JenkinsFile의 테스트 단계에서 testApp 기능을 사용할 수 있습니다.

stage ('test') { 
            steps { 
                script {
                    gv.testApp()
                }
            }
        }



고지 사항: 이 단계는 선택 사항이며 실행하려는 테스트가 없으면 건너뛸 수 있습니다.

3. 파이프라인에 빌드 단계를 추가합니다.



이제 평소와 같이 JenkinsFile에 빌드 단계를 추가할 수 있습니다. 먼저 buildApp 파일에 script.groovy 함수를 추가하는 것으로 시작합니다.

이전에 다룬 withPassword 기능과 이전에 만든 dockerhub 자격 증명을 사용하게 됩니다.

def buildApp() { 
    echo "Building app with build number #${env.BUILD_NUMBER}" // env variables are available and can be accesed in groovy files.
    withPassword([credentialsId:'dockerhub-id', passwordVariable: 'PASS', usernameVariable:'USER']){
        sh "docker build . -t YOUR_REPO_NAME:YOUR_TAG" // replace YOU_REPO_NAME and YOUR_TAG with the respective repo name and tag.
        sh "echo $PASS | docker login -u $USER --password-stdin"
        sh " docker push YOUR_REPO_NAME:YOUR_TAG" // replace YOU_REPO_NAME and YOUR_TAG with the respective repo name and tag.
    }
}



이제 빌드 단계에서 이것을 사용할 수 있습니다.

stage('build') { 
            steps{
                script { 
                    gv.buildApp()
                }
            }
        }



4. Jenkins 파이프라인에 배포 단계를 추가합니다.



먼저 script.groovy 파일에 deployApp를 추가합니다.

def deployApp() { 
    echo "We will handle this in the next article!"
}



JenkinsFile에서 사용하십시오.


stage("deploy"){ 
            steps{
                gv.deployApp()
            }
        }



현재 script.groovy는 다음과 비슷해야 합니다.

// script.groovy
def testApp() { 
    echo "Testing our application" 
    // you can now run your test command here, e.g if using pytest you run 
    sh "pytest"
}

def buildApp() { 
    echo "Building app with build number #${env.BUILD_NUMBER}" // env variables are available and can be accesed in groovy files.
    withPassword([credentialsId:'dockerhub-id', passwordVariable: 'PASS', usernameVariable:'USER']){
        sh "docker build . -t YOUR_REPO_NAME:YOUR_TAG" // replace YOU_REPO_NAME and YOUR_TAG with the respective repo name and tag.
        sh "echo $PASS | docker login -u $USER --password-stdin"
        sh " docker push YOUR_REPO_NAME:YOUR_TAG" // replace YOU_REPO_NAME and YOUR_TAG with the respective repo name and tag.
    }
}
def deployApp() { 
    echo "We will handle this in the next article!"
}
return this



그리고 Jenkins 파일

def gv // define here for it to be globally available
pipeline { 

    agent any
    parameters { 
        choice(name: 'Version', choices:['1.1.0', '1.2.0', '1.3.0'], description:'')
    }
    stages { 

        stage('Init') { 

            steps { 
                script { 
                    gv = load "script.groovy"
                }
            }
        }
        stage ('test') { 
            steps { 
                script {
                    gv.testApp()
                }
            }
        }
        stage('build') { 
            steps{
                script { 
                    gv.buildApp()
                }
            }
        }

        stage("deploy"){ 
            steps{
                gv.deployApp()
            }
        }
    }
}



이제 선택한 버전 제어에 대한 변경 사항을 커밋하고 푸시한 다음 Jenkins 대시보드로 이동하여 빌드할 수 있습니다. 오류 없이 성공적으로 빌드되어야 합니다. 설명이 필요한 경우 댓글을 남겨주시면 최대한 빨리 답변해 드리겠습니다.

5. GitHub와 통합합니다.



지금까지 작업을 수동으로 구축했지만 대규모 개발 팀에서는 매우 비효율적입니다. 이제 작업이 자동으로 실행될 수 있도록 GitHub를 Jenkins 서버와 통합하는 방법을 살펴보겠습니다.

GitHub 대시보드로 이동하여 설정 탭을 클릭하고 웹후크 섹션으로 이동합니다.



페이로드 URL 필드에 Jenkins 환경 URL을 붙여넣습니다. 이 URL 끝에/github-webhook/를 추가합니다. Content type에서 application/json을 선택하고 Secret 필드는 비워둡니다.



페이지에서 이 웹후크를 트리거하려는 이벤트는 무엇입니까? 개별 이벤트 선택을 선택합니다. 그런 다음 풀 요청 및 푸시를 확인합니다. 이 옵션의 끝에서 활성 옵션이 선택되어 있는지 확인하고 웹후크 추가를 클릭합니다.

GitHub에서 구성을 마쳤습니다. 이제 Jenkins 대시보드로 이동하여 처음에 생성한 작업을 선택하고 Build triggers를 클릭한 후 configure 탭을 선택합니다.


GitHub hook trigger for GITScm polling 옵션을 확인하십시오.

이제 GitHub와 Jenkins를 성공적으로 통합했습니다. 코드 편집기로 이동하여 변경하고 GitHub에 푸시하면 빌드가 자동으로 실행되는 것을 볼 수 있습니다.

이 기사에서는 Django 이미지를 dockerhub로 푸시하는 전체 Jenkins 파이프라인을 제시했으며 자동화된 빌드를 위해 GitHub를 Jenkins와 통합했습니다. 다음 글에서는 Multi-branch pipelines , conditionals 사용 방법과 이메일 알림 설정 방법(드디어)에 대해 알아보겠습니다.

행복한 해킹.

좋은 웹페이지 즐겨찾기