我是Jenkins的新手,我想我在设置Jenkins时错过了一个步骤。我在本地Docker容器中运行Jenkins 2.401.3。我在本地Linux机器上有一个git repo。
基本的hello world示例,例如这里的“Through the classic UI”,可以按预期工作:https://www.jenkins.io/doc/book/pipeline/getting-started/
当我试图拉入源代码时,我开始遇到麻烦。我希望我的Jenkins管道使用git repo中的Dockerfile来构建其余的代码。
我想做一些类似的例子从https://www.jenkins.io/doc/book/pipeline/docker/#dockerfile
pipeline {
agent { dockerfile true }
stages {
stage('Test') {
steps {
sh 'node --version'
sh 'svn --version'
}
}
}
}
当我尝试运行示例代码时,Jenkins找不到我的dockerfile。当我添加一个新阶段来 checkout 我的代码时,它似乎确实找到了我的代码,但不会在下一阶段使用dockerfile。
pipeline {
agent any
//agent { dockerfile true } //this line doesn't work
stages {
stage('Checkout') {
steps {
checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[url: '/myPath/myRepo/']])
}
}
stage('Build') {
agent { dockerfile true }
steps {
sh 'python3 --version' //this should output the version installed by my Dockerfile
}
}
}
}
我从来没有设置过“源代码库”,也找不到这样做的选项。我需要做什么才能让Pipeline识别我的Dockerfile?
2条答案
按热度按时间ix0qys7i1#
我找到了一个可行的解决方案。如果您使用SCM中的Pipeline脚本,则
agent {dockerfile true}
命令可以找到dockerfile。变更说明:
1.在Jenkins web GUI中,选择Pipeline
1.单击配置
1.将Pipeline脚本的文本从表单窗口复制到存储库中名为Jenkinsfile的新文件中
1.将管道定义从“管道脚本”更改为“SCM中的管道脚本”
1.单击保存
1.单击“立即生成”
我原来的帖子中的“结账”阶段现在是多余的。我不明白为什么我原来的方法不起作用,但使用Jenkinsfile是一个可行的解决方案。
slwdgvem2#
例如,您可以在Jenkins机器上使用dir()来指定workdir
使其易于处理任务,减少Jenkins机器的混乱。