当前,我正在访问一个外部数据库以在管道中执行单元测试。我想通过在管道中实施本地测试来增加构建的运行时间。
我正在尝试使用this格式。
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
添加到主容器和sidecar mysql容器中。
我尝试将-u 0
添加到两个容器中。
Docker Version 18.09
Jenkins Version 2.164
K8s Version 1.11
不确定下一步该怎么做。有建议吗?
答案 0 :(得分:0)
不确定这里出了什么问题,但是最后使用withRun
作为第一辆小车,并使用docker exec
进行ping操作。这样就解决了。