簡體   English   中英

在使用Jenkinsfile中的Dockerfile創建的Docker容器中運行命令

[英]Running commands inside docker container created using Dockerfile in Jenkinsfile

我創建了一個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"
        }
    }
}   
}

您可以使用-> 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"
            }
        }
  }

您根據ls的輸出誤解了它。

對於Jenkins管道docker DSL,它將把jenkins作業工作區安裝到docker容器,並將docker WORKDIR更改為jenkins作業工作區。

因此,當您在容器內執行ls時,它將在jenkins作業工作區下打印文件和文件。

您可以嘗試在主機中不存在的其他cmd或ls其他文件夾批准它確實在容器而不是主機中執行。

您必須在階段括號內編寫代理創建階段:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM