我创建了一个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"
}
}
}
}
答案 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"
}
}
}