Конвейер Jenkins для сборки и отправки образа Django в dockerhub и интеграция с GitHub webhook.

Это четвертая статья из цикла Развертывание приложения Django на AWS EC2 instance с помощью Jenkins. Краткое руководство по Jenkins.

В этой статье вы соберете воедино все основы, которые вы изучили, и построите полный конвейер Jenkins, который будет создавать и развертывать Django образ на Dockerhub. Предварительно вам необходимо ознакомиться с предыдущими статьями

1. Добавьте стадию init и загрузите файл script.groovy.

В JenkinsFile добавьте этап init, который загружает наш скрипт 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

Вход в полноэкранный режим Выйдите из полноэкранного режима

Теперь вы можете использовать функцию testApp на этапе тестирования в вашем JenkinsFile.

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.

Сначала вы добавляете deployApp в файл script.groovy.

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

Вход в полноэкранный режим Выйти из полноэкранного режима

А файл JenkinsFile

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, нажмите на вкладку настроек и перейдите в раздел webhooks.

В поле URL полезной нагрузки вставьте URL среды Jenkins. В конце этого URL добавьте /github-webhook/. В поле Тип содержимого выберите: application/json и оставьте поле Секрет пустым.

На странице Какие события должны вызывать этот webhook? выберите Позвольте мне выбрать отдельные события. Затем отметьте Pull Requests и Pushes. В конце убедитесь, что опция Active отмечена, и нажмите на Add webhook.

Вы закончили с конфигурацией на GitHub, теперь перейдите на панель Jenkins, выберите работу, которую вы создали изначально, и выберите вкладку Build triggers после нажатия на configure.

Отметьте опцию GitHub hook trigger for GITScm polling.

Теперь вы успешно интегрировали GitHub с Jenkins. Зайдите в редактор кода, внесите изменения, отправьте их на GitHub, и вы увидите, как автоматически запустится сборка.

В этой статье вы разработали полный конвейер Jenkins, который отправляет образ Django в dockerhub, и интегрировали GitHub с Jenkins для автоматической сборки. В следующей статье вы узнаете, как использовать Многоветвистые конвейеры, условия и как настроить уведомления по электронной почте (наконец-то).

Счастливого взлома.

Оцените статью
devanswers.ru
Добавить комментарий