微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Docker 中授予 Jenkins 访问权限以在主机上部署容器

如何解决在 Docker 中授予 Jenkins 访问权限以在主机上部署容器

我目前正在尝试在 Docker 上使用 Jenkins 部署 Golang API。我已经配置了所有内容,以便 Jenkins 可以访问它应该访问的正确存储库。提供了一个 Jenkinsfile,以便它使用命令 docker-compose 来设置构建。所以这意味着 API 本身将被容器化。

Jenkinsfile 看起来像这样。

pipeline {
    agent any 
    stages {
        stage('deploy') {
            steps {
                dir("swagger/"){
                    sh """
                    sed -i 's/\\/api\\/v1/\\/dev\\/api\\/v1/g' swagger.json && sed -i 's/\\/uploads/\\/dev\\/uploads/g' swagger.json
                    """
                }
                dir("deployments/docker/") {
                    sh "export JENKINS_NODE_COOKIE=dontKillMe && ./start.sh"
                }
            }
        }
    }
    post {
        success { 
            emailext body: 'Good news! The build bare fruits!',recipientProviders: [[$class: 'DevelopersRecipientProvider'],[$class: 'RequesterRecipientProvider']],subject: 'Build Successful'
         }
        failure {
            emailext body: 'Try again probs?',subject: 'Build Failed'
        }
    }
}

部署部分在 Jenkins 尝试运行 ./start.sh 时开始。文件 start.sh 只有一行用于运行命令 docker-compose --compatibility up -d --build

然而,我很快发现,当 Jenkins 尝试构建 API 时,它在 Docker 容器内部而不是在主机上执行构建。我想确保 API 是在主机上构建的,而不是在容器上。

换句话说,这意味着我将在 docker 容器中拥有一个 docker 容器。我不确定,但这不是我特别想要的。我想要的是确保 Jenkins 和 API docker 容器都在同一台主机上运行。

我已经阅读了 herehere 的一些建议,但似乎没有找到我需要的答案。

我的问题是如何让 Docker 上的 Jenkins 在主机而不是容器上执行构建? 有什么我可能遗漏的吗?提前致谢

解决方法

据我了解您的问题,您需要将 jenkins 中的主机配置为从机/代理。 Jenkins master 将在主机上的 docker 容器中运行,而主机本身将作为 slave 连接到 jenkins 容器。

,

我能够解决它。我还没有尝试过 @Dmitriy Tarasevich 的解决方案,但绝对值得一试。

我最终做的只是将主机中的 Docker 套接字暴露给包含 Jenkins 的 Docker 容器。参考 here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。