Выполнение команд внутри контейнера Docker, созданного с помощью Dockerfile в Jenkinsfile - PullRequest
0 голосов
/ 03 апреля 2019

Я создал файл конвейера Jenkins и создал файл Jenkinsfile.Внутри Jenkinsfile я использовал агент Dockerfile, а затем выполнил несколько шагов.Шаги должны выполняться внутри докера, но они выполняются на хосте.Ее код.

#!/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 ]

1 голос
/ 03 апреля 2019

Вы неправильно понимаете это в соответствии с выводом ls.

Для DSL-конвейера Jenkins конвейер монтирует рабочую область задания jenkins в контейнер докера и заменяет docker WORKDIR на рабочую область задания jenkins.

Поэтому при выполнении ls внутри контейнера, он распечатает файлы & fodler в рабочей области вашего задания jenkins.

Вы можете попробовать другую cmd или ls другую папку, которая не существует в хосте, чтобы подтвердить, что она действительно выполняется внутри контейнера, а не хоста.

0 голосов
/ 03 апреля 2019

Вы можете использовать -> 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"
            }
        }
  }
0 голосов
/ 03 апреля 2019

Вы должны написать этап создания агента в скобках этапов:

stages {
    stage('Build Stage') {
        agent {
           dockerfile{
           dir 'TEST'
           filename 'dockerfile'
           label 'docker'
        }
        steps {
           echo 'testing stage running'
           sh "ls"
       }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...