Невозможно связать два контейнера "sidecar" в моем конвейере Jenkins - PullRequest
0 голосов
/ 16 апреля 2019

В настоящее время я использую внешнюю БД для выполнения модульных тестов в моем конвейере.Я хочу увеличить время выполнения сборки за счет локального тестирования в конвейере.

Я пытаюсь использовать этот формат.

docker.image('mysql:5.6').withRun(' -e "MYSQL_ROOT_PASSWORD=pass" ') { c ->

    sh('docker ps -l')

    docker.image('mysql:5.6').inside(" --link ${c.id}:db ") {

        /* Wait until mysql service is up */
        sh ("while ! mysqladmin ping -hdb:3306 -ppass; do sleep 1; done")

    }

    docker.image(imageName).inside(" --link ${c.id}:db ") {
        /*
        * Run some tests which require MySQL, and assume that it is
        * available on the host name `db`
        */
        sh("echo test")
        //run some tests        
    }
}

Код не достигает второго изображения.Это ошибки раньше, потому что это can't connect to the host 'db'.Вот вывод:

+ docker run -d -e MYSQL_ROOT_PASSWORD=pass mysql:5.6
[Pipeline] dockerFingerprintRun
[Pipeline] sh
+ docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED                  STATUS                  PORTS               NAMES
63c18d0dfbd6        mysql:5.6           "docker-entrypoint..."   Less than a second ago   Up Less than a second   3306/tcp            sleepy_haibt2
[Pipeline] sh
+ docker inspect -f . mysql:5.6
.
[Pipeline] withDockerContainer
slave-37188a47f08d1 seems to be running inside container 5e34252...
[Pipeline] {
[Pipeline] sh
+ mysqladmin ping -hdb:3306 -ppass
Warning: Using a password on the command line interface can be insecure.
mysqladmin: connect to server at 'db:3306' failed
error: 'Unknown MySQL server host 'db:3306' (2)'
Check that mysqld is running on db:3306 and that the port is 3306.
You can check this by doing 'telnet db:3306 3306'
+ sleep 1
$ docker run -t -d -u 0:0 --link 63c18d0d...:db -w /home/jenkins/workspace/-database-for-testing-in-jenkins --volumes-from 5e34252... -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** mysql:5.6 cat
$ docker top d003b0649... -eo pid,comm
+ mysqladmin ping -hdb:3306 -ppass
Warning: Using a password on the command line interface can be insecure.
mysqladmin: connect to server at 'db:3306' failed
error: 'Unknown MySQL server host 'db:3306' (2)'
Check that mysqld is running on db:3306 and that the port is 3306.
You can check this by doing 'telnet db:3306 3306'
+ sleep 1

Я пытался удалить :3306 из mysqladmin

Я пытался добавить -p 3306:3306 как в основной контейнер, так и в контейнер mysql коляски.

Я пытался добавить -u 0 в оба контейнера.

Docker Version 18.09

Jenkins Version 2.164

K8s Version 1.11

Не уверен, что делать дальше.Совет

1 Ответ

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

Не уверен, что здесь не так, но в итоге мы использовали withRun для первой коляски и docker exec для запуска пинга. Это исправило это.

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