在 Jenkinsfile 中执行 Dockerfile

Executing Dockerfile in Jenkinsfile

我正在尝试 运行 DockerJenkinsfile 管道中的文件。 我有以下 Docker 文件:

FROM ubuntu:latest
ENV VERSION=1.2.0
RUN apt-get update -y
RUN apt-get install -y python vim zip unzip
RUN mkdir -p /tmp
WORKDIR /tmp
COPY zip_job.py ./
RUN cat /etc/lsb-release
RUN uname -m
RUN ls -l /tmp

这是我的 Jenkins 文件:

pipeline {
    agent { dockerfile true }
    stages { 
        stage('Build') {
            steps {
                sh 'python zip_job.py'
            }
        }
        stage('Publish') {
            steps {
                rtServer (
                    id: 'Artifactory-1',
                    url: 'https://aidock.jfrog.io/artifactory/devops-assignment/',
                    username: 'super-user'
                    password: 'Qw12856!'
                )
                rtUpload (
                    serverId: 'Artifactory-1',
                    spec: '''{
                          "files": [
                            {
                              "pattern": "tmp/*.zip",
                              "target": "binary-storage/1.2.0
                            }
                        ]
                  }''',
                )
            }
        }
        stage('Report') {
            steps {
                echo 'Hello World'
            }
        }
        stage('Cleanup') {
            steps {
                echo 'Hello World'
            }
        }
    }
    
}

我在 Docker 中的工作目录应该是 /tmp。 运行构建时出现以下错误:

 Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/My-Pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Declarative: Agent Setup)
[Pipeline] isUnix
[Pipeline] readFile
[Pipeline] sh
+ docker build -t b96873ea12524b982ef8ce77660ade7f3744e812 -f Dockerfile .
/var/jenkins_home/workspace/My-Pipeline@tmp/durable-f53af459/script.sh: 1: /var/jenkins_home/workspace/My-Pipeline@tmp/durable-f53af459/script.sh: docker: not found
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 127
Finished: FAILURE

几乎尝试了书中的所有技巧,但仍然没有用。 Docker 插件已安装。

感谢您的帮助。 谢谢!

使用从源存储库中包含的 Dockerfile 构建的容器执行管道或阶段。 为了使用此选项,必须从多分支管道或来自 SCM 的管道加载 Jenkinsfile。 按照惯例,这是源存储库根目录中的 Dockerfile:agent { dockerfile true }。 如果在另一个目录中构建 Dockerfile,请使用 dir 选项:agent { dockerfile { dir 'someSubDir' } }。 如果您的 Dockerfile 有其他名称,您可以使用 filename 选项指定文件名。 您可以使用 additionalBuildArgs 选项将其他参数传递给 docker build … 命令,例如 agent { dockerfile { additionalBuildArgs '--build-arg foo=bar' } }。例如,包含文件 build/Dockerfile.build 的存储库,期望构建参数版本:

agent {
    // Equivalent to "docker build -f Dockerfile.build --build-arg version=1.0.2 ./build/
    dockerfile {
        filename 'Dockerfile.build'
        dir 'build'
        label 'my-defined-label'
        additionalBuildArgs  '--build-arg version=1.0.2'
        args '-v /tmp:/tmp'
    }
}