Как настроить базу данных postgres в конвейере Jenkins? - PullRequest
0 голосов
/ 08 января 2019

Я использую docker для имитации базы данных postgres для моего приложения. Я тестировал его в Cypress в течение некоторого времени, и он отлично работает. Я хочу настроить Дженкинса для дальнейшего тестирования, но я застрял.

На моем устройстве я бы использовал команды

docker create -e POSTGRES_DB=myDB -p 127.0.0.1:5432:5432 --name myDB postgres docker start myDB

чтобы создать его. Как я могу смоделировать это в конвейере Jenkins? Мне нужна БД для работы приложения.

Я использую Dockerfile в качестве агента и пытался поместить туда переменные ENV, но он не работает. Докер не установлен на конвейере.

Я вижу это так:

  1. Создание изображения с помощью
  2. Каким-то образом установить докер внутри конвейера и использовать те же команды
  3. Может быть, с ведущими / ведомыми узлами? Я их пока плохо понимаю.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Для декларативных трубопроводов:

pipeline {
  agent any
  environment {
    POSTGRES_HOST = 'localhost'
    POSTGRES_USER = myuser'
  }

  stages {
    stage('run!') {
      steps {
        script {
            docker.image('postgres:9.6').withRun(
                "-h ${env.POSTGRES_HOST} -e POSTGRES_USER=${env.POSTGRES_USER}"
            ) { db ->
// You can your image here but you need psql to be installed inside
                docker.image('postgres:9.6').inside("--link ${db.id}:db") {
                  sh '''
psql --version
until psql -h ${POSTGRES_HOST} -U ${POSTGRES_USER} -c "select 1" > /dev/null 2>&1 || [ $RETRIES -eq 0 ]; do
  echo "Waiting for postgres server, $((RETRIES-=1)) remaining attempts..."
  sleep 1
done
'''
                  sh 'echo "your commands here"'
                }
              }
            }
      }
    }
  }
}

Относится к Docker ожидает запуска postgresql

0 голосов
/ 08 января 2019

Это может быть сценарий использования одной из расширенных функций Jenkins Pipeline .

.

Например (с сайта выше):

node {
    checkout scm
    docker.image('mysql:5').withRun('-e "MYSQL_ROOT_PASSWORD=my-secret-pw"') { c ->
        docker.image('mysql:5').inside("--link ${c.id}:db") {
            /* Wait until mysql service is up */
            sh 'while ! mysqladmin ping -hdb --silent; do sleep 1; done'
        }
        docker.image('centos:7').inside("--link ${c.id}:db") {
            /*
             * Run some tests which require MySQL, and assume that it is
             * available on the host name `db`
             */
            sh 'make check'
        }
    }
}

В приведенном выше примере используется объект с помощью withRun, который имеет идентификатор работающего контейнера доступен через свойство id. С использованием ID контейнера, конвейер может создать ссылку, передавая пользовательский Аргументы Docker для метода inside ().

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

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