【问题标题】:Jenkins: Pipeline Docker Job with Jenkins file - Docker groovy syntaxJenkins:使用 Jenkins 文件的管道 Docker 作业 - Docker groovy 语法
【发布时间】:2017-11-11 18:23:42
【问题描述】:

我很难找到有关如何通过 jenkinsfile 为管道作业构建、注册和运行 docker 映像的任何适当示例。这是我到目前为止所拥有的:

node {
    def myService

    stage('Checkout Project') {
        checkout scm
    }

    stage('Build Binary') {
        sh "mvn package -f pom.xml -Dmaven.test.skip=true"
    }

    stage('Build Image') {
        sh "pwd"
        myService = docker.build('myService -f ${pwd}/Dockerfile')
    }

    stage('Test Image') {
        sh "echo Tests Passed :)"
    }

    stage('Run uShip Docker Container') {
        myService.run()
    }
}

我遇到的第一个问题是,当 docker.build() 触发时,它找不到我的 docker 文件,我觉得这很奇怪,因为该命令运行 Dockerfile 的同一目录。接下来,我无法提供任何一致的示例来说明如何注册、推送和运行映像。任何帮助将不胜感激!

更新:很好地解决了 docker 无法找到 docker 文件的问题。这是一个命名问题;我的 docker 文件名为“DockerFile”而不是“Dockerfile”。重命名并且它有效,但现在我收到另一个错误:

存储库名称 (myService) 无效,仅允许 [a-z0-9-_.]

不知道这是指什么。

更新:除了我最初的问题之外,docker-compose 文件必须是 .yml 类型还是可以是 .properties 文件?

【问题讨论】:

  • docker-compose fila 可以有扩展名 yml 或 yaml。存储库名称不正确 - 您可以使用的字母包含在括号中。

标签: docker jenkins dockerfile jenkins-pipeline docker-build


【解决方案1】:

docker.build 命令expects 带有可选标签作为参数的图像名称。

来自documentation

名称组件可能包含小写字母、数字和分隔符。分隔符定义为句点、一个或两个下划线或一个或多个破折号。

所以myService这个名字是无效的,因为S是大写的

另外,docker.build 命令在同一位置查找Dockerfile,因此您不需要参数上的-f ${pwd}/Dockerfile

docker.build('myservice') 应该可以工作

【讨论】:

    【解决方案2】:

    存储库名称 (myService) 无效,仅允许 [a-z0-9-_.]

    在命名 docker 镜像时不要使用大写。这是一个标准。

    docker-compose 文件必须是 .yml 类型还是可以是 .properties 文件?

    docker-compose 文件应该始终是 yaml 文件。

    【讨论】:

    • 那么它必须是 .yml 类型还是可以选择是 .properties 文件?我问的原因是因为我更喜欢 yaml 语法的 .properties 语法。所以如果 docker 只支持 yaml 那我就用 yaml。