Jenkinsfile Pipeline: добраться до ip коляски хоста - PullRequest
0 голосов
/ 29 октября 2018

Я использую Jenkins на GKE с плагином Kubernetes. Я добавил контейнер postgres в качестве коляски с контейнером агента jnlp. Он доступен на localhost:5432 от агента. Я также монтирую в агенте сокет Docker узла GKE и мусорное ведро, чтобы я мог раскрутить «родственные» контейнеры. Это тоже работает нормально.

Теперь я хочу сделать следующее:

pipeline {

    stages {

        stage('pytest') {

            agent {
                docker {
                    image "<image created in a previous stage>"
                    args '--add-host=database:\$(hostname\\ -i)'
                }
            }

            steps {
                // use postgres in sidecar of jnlp agent
                // e.g. on `database:5432`
            }
        }
    }
}

Выполнение этого вручную прекрасно работает, но в Jenkins вышеописанное не работает с:

Error: invalid argument "database:$(hostname -i)" for --add-host=database:$(hostname -i): invalid IP address in add-host: "$(hostname -i)"

У кого-нибудь есть идеи о том, как избежать вышеуказанного? Или, может быть, совершенно другой подход к этой проблеме?

У меня нет доступного Docker 18.03+ на GKE (застрял на 17.03.2-ce), поэтому я не могу сделать host.docker.internal

docker run --network host тоже ничего не делает.

1 Ответ

0 голосов
/ 29 октября 2018

Если это коляска, вам не нужно $(hostname), у вас должна быть возможность соединиться с localhost:5432. Контейнеры в контейнерах имеют одинаковое адресное пространство.

Другой вариант - использовать initContainers в спецификации вашего модуля для настройки нужного файла. Вы можете написать bash-скрипт так:

#!/bin/bash
cat <<EOF
pipeline {

    stages {

        stage('pytest') {

            agent {
                docker {
                    image "<image created in a previous stage>"
                    args "--add-host=database:${HOSTMAME}"
                }
            }

            steps {
                // use postgres in sidecar of jnlp agent
                // e.g. on `database:5432`
            }
        }
    }
}
EOF > /your-config-file

${HOSTNAME} - переменная окружения в модуле.

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