Jenkinsfile管道:到达主机边车的ip

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkinsfile管道:到达主机边车的ip相关的知识,希望对你有一定的参考价值。

我正在使用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也没有做任何事情。

答案

如果它是一辆边车你不需要$(hostname)你应该能够与localhost:5432连接。 pod中的容器共享相同的地址空间。

另一种选择是在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}是pod中的环境变量。

以上是关于Jenkinsfile管道:到达主机边车的ip的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins:是不是可以使用 Jenkinsfile 创建常春藤工作? (管道即代码)

什么是微服务上下文中的边车?

DEVOPS技术实践_08:Jenkins多分支管道

使用 Jenkinsfile 构建 Jenkins 管道没有失败

Jenkinsfile管道构造JSON对象并写入文件

我怎样才能使 cppcheck.xml 使用 jenkinsfile 本身在 jenkins 上发布?