如何解决在 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 容器都在同一台主机上运行。
我已经阅读了 here 和 here 的一些建议,但似乎没有找到我需要的答案。
我的问题是如何让 Docker 上的 Jenkins 在主机而不是容器上执行构建? 有什么我可能遗漏的吗?提前致谢
解决方法
据我了解您的问题,您需要将 jenkins 中的主机配置为从机/代理。 Jenkins master 将在主机上的 docker 容器中运行,而主机本身将作为 slave 连接到 jenkins 容器。
,我能够解决它。我还没有尝试过 @Dmitriy Tarasevich 的解决方案,但绝对值得一试。
我最终做的只是将主机中的 Docker 套接字暴露给包含 Jenkins 的 Docker 容器。参考 here。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。