Связи контейнеров в трубопроводе Jenkins

Поскольку docker-compose недоступен для меня в моем конвейере Jenkins, я использую два разных контейнера. Я пытаюсь связать их, но получаю следующую ошибку в Jenkins для первого контейнера

      org.jenkinsci.plugins.scriptsecurity.scripts.UnapprovedUsageException: script not yet approved for use
at org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval.using(ScriptApproval.java:474)
at org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval$using$0.call(Unknown Source)
at com.splunk.splunkjenkins.UserActionDSL.perform(UserActionDSL.groovy:39)
at com.splunk.splunkjenkins.listeners.LoggingRunListener.onCompleted(LoggingRunListener.java:85)
at hudson.model.listeners.RunListener.fireCompleted(RunListener.java:209)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.finish(WorkflowRun.java:610)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.access$800(WorkflowRun.java:137)
at org.jenkinsci.plugins.workflow.job.WorkflowRun$GraphL.onNewHead(WorkflowRun.java:1037)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.notifyListeners(CpsFlowExecution.java:1473)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$3.run(CpsThreadGroup.java:489)
at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$1.run(CpsVmExecutorService.java:38)
at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:136)
at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
GitHub has been notified of this commit’s build result


java.io.IOException: Failed to run image '<REGISTRY>/postgres'. Error: docker: Error response from daemon: Cannot link to a non running container: /wizardly_shaw AS /lucid_franklin/localhost.

Вот мой соответствующий этап Дженкинса

              stage('build & test') {
        environment {
            POSTGRES_DB = 'mytestdb'
            POSTGRES_USER = 'postgres'
            POSTGRES_PASSWORD = 'postgres'
            FLYWAY_URL = 'jdbc:postgresql://localhost:5432/mytestdb'
            FLYWAY_USER = 'postgres'
            FLYWAY_PASSWORD = 'postgres'
        }
        steps {
            checkout scm
            script {
                docker.withRegistry(docker_repository, 'credentials-id') {
                    docker.image('<REGISTRY>/postgres').withRun("") { c ->
                        docker.image('<REGISTRY>/postgres').inside("--link ${c.id}:localhost") {
                            sh '''
                                psql --version
                                echo "$(date) - waiting for database to start"
                                while ! pg_isready -h localhost -p 5432 -d $POSTGRES_DB
                                do
                                    echo "$(date) - waiting for database to start"
                                    sleep 10
                                done
                            '''
                        }
                    }
                    docker.image('<REGISTRY>/flyway/flyway').inside("--link ${c.id}:localhost") {
                        sh '''
                            info
                        '''
                    }
                }
            }                
        }
    }

Кто-нибудь может мне здесь помочь?

1 ответ

Похоже, что это вызывает проблему, потому что вы связываете другой контейнер с именем. попробуйте изменить имя с localhost к чему-то другому.

Взгляните на мой простой пример. В моем примере я запускаю два контейнера Postgres, связывающих друг друга. В одном из них запущен сервер Postgres, а в другом я просто использую psql командная строка.

Если вы обратите внимание на psql 'host=db user=postgres password=mysecretpassword' в другом контейнере, я указал хост как db который связан с идентификатором контейнера сервера postgres

      node {
    docker.image('postgres').withRun('-e POSTGRES_PASSWORD=mysecretpassword') { c ->
        
        docker.image('postgres').inside("--link ${c.id}:db") {
            sh """
                #psql -h db -U postgres
                
                psql 'host=db user=postgres password=mysecretpassword'
                # perform any psql operation here
            """
        }
    }
}
Другие вопросы по тегам