我正在使用Kubernetes插件在GKE上运行Jenkins。我添加了一个postgres容器作为jnlp代理容器的补充。它可以在localhost:5432
上从代理访问。我还将GKE节点的Docker套接字和bin安装在代理中,以便启动“姐妹”容器。这也很好。
现在我要执行以下操作:
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)"
有人对如何摆脱上述想法有想法吗?还是解决这个问题的完全不同的方式?
我在GKE上没有可用的Docker 18.03+(卡在17.03.2-ce
上),所以我不能host.docker.internal
docker run --network host
也不执行任何操作。
答案 0 :(得分:0)
如果它是一种辅助工具,则不需要$(hostname)
,您应该可以与localhost:5432
连接。容器中的容器共享相同的地址空间。
另一种选择是在pod规范中使用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}
是窗格中的环境变量。