Избегайте базы данных ip, user и передавайте в jenkinsfile, используя docker - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть Jenkinsfile, использующий скриптовый синтаксис, на последнем шаге (развертывание) я просто выполняю «запуск докера» (я буду переходить к ansible в будущем).

Мое изображение докера должно указывать на базу данных через переменную среды, поэтому я использую это:

 docker run -d --env DATABASE_EASYREC_HOST="somehost.com.br" \
 --env DATABASE_EASYREC_PORT="5432" \
 --env DATABASE_EASYREC_NAME="easyrec_stage" \
 --env DATABASE_EASYREC_USER="postgres" \
 --env DATABASE_EASYREC_PASS="Ronaldo1986" \
  -p 8080:8080 --rm --name easyrecadm-stage namespace/myimage:prod

Как вы можете видеть, я использую somehost.com.br , чтобы найти мою базу данных, но я не думаю, что это хорошая практика - устанавливать IP, Port, User и Pass напрямую в Jenkinsfile, потому что, если в будущем база данных изменится на другую машину, мне нужно изменить свой Jenkinsfile.Итак, я думаю, что в некоторых решениях:

  1. Используйте переменную окружения из операционной системы в jenkinsfile, поэтому там, где работает jenkins, эта переменная должна быть создана.
  2. Создайте шаг в Jenkinsfile дляпопросите порт, хост, пользователя и пароль для базы данных
  3. Не изменяйте ничего, потому что это хорошая практика, указывающая на базу данных в Jenkinsfile

1 Ответ

0 голосов
/ 12 декабря 2018

Вы можете использовать управляемый файл (1), плагин пользовательского провайдера файлов (2) и плагин шагов утилиты конвейера (3)

С управляемым файлом как database.json, с идентификатором «база данных»

{"DATABASE_EASYREC_HOST": "somehost.com.br"}

Этот код будет читать соответствующую пользовательскую конфигурацию:

def DB_HOST
configFileProvider(
    [configFile(fileId: 'database', targetLocation: 'database.json')]) {
    def db = readJSON file: 'database.json'
    DB_HOST = db.DATABASE_EASYREC_HOST ?: 'default_value'
}
sh 'docker ...'

(1) https://wiki.jenkins.io/display/JENKINS/Config+File+Provider+Plugin#ConfigFileProviderPlugin-FileTypes (2) https://wiki.jenkins.io/display/JENKINS/Config+File+Provider+Plugin#ConfigFileProviderPlugin-UsingtheconfigurationfilesinJenkinsPipelines (3) https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readjson-read-json-from-files-in-the-workspace

Несколько более глубокий случай использования описан в https://www.linkedin.com/pulse/jenkins-shared-pipeline-libraries-custom-runtime-delgado-garrido/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...