在使用Jenkinsfile中的Dockerfile创建的Docker容器中运行命令

时间:2019-04-03 02:43:08

标签: docker jenkins jenkins-pipeline

我创建了一个Jenkins管道文件并创建了一个Jenkinsfile。在Jenkinsfile内部,我使用了Dockerfile代理,然后运行一些步骤。这些步骤应该在docker内部运行,但它们在主机上运行。 她的代码。

#!/usr/bin/env groovy
@Library(['abc-jenkins','xyz-jenkins-library']) _
pipeline {
agent {
    dockerfile{
        dir 'TEST'
        filename 'dockerfile'
        label 'docker'
    }
}
stages {
    stage('Build Stage') {
        steps {
            echo 'testing stage running'
            sh "ls"
        }
    }
}   
}

3 个答案:

答案 0 :(得分:1)

根据ls的输出,您误解了它。

对于Jenkins管道docker DSL,它将把jenkins作业工作区安装到docker容器,并将docker WORKDIR更改为jenkins作业工作区。

因此,当您在容器中执行ls时,它将在jenkins作业工作区下打印文件和文件。

您可以尝试在主机中不存在的其他cmd或ls其他文件夹批准它实际上是在容器而不是主机中执行的。

答案 1 :(得分:0)

您必须在阶段括号内编写代理创建阶段:

stages {
    stage('Build Stage') {
        agent {
           dockerfile{
           dir 'TEST'
           filename 'dockerfile'
           label 'docker'
        }
        steps {
           echo 'testing stage running'
           sh "ls"
       }
}

答案 2 :(得分:0)

您可以使用-> docker.image('image')。inside {..}

stage('BuildInside') {
         docker.image('ubuntu1804').withRun('-d=true -p 8888:8080') {c ->
            docker.image('ubuntu1804').inside{
               /*  Do something here inside container  */
               sh "ls"
            }
        }
  }
相关问题