Jenkinsfile和Docker最佳实践的多分支管道项目



我是Jenkins和Docker的新手,已经构建了一个新的多分支管道项目,独立于我们的构建服务器配置。我的应用程序包括一个带有多个阶段的Jenkinsfile,并使用了两个docker映像:一个是DockerHub的官方Mongo映像,另一个是我自己创建的docker映像,包括Maven和Mercurial。

Dockerfile:

FROM maven:3.3.9-jdk-8
RUN apt-get update && apt-get install -y -q mercurial

我在第一阶段使用它来签出我的项目,并在第二阶段使用maven构建它。

我的Jenkinsfile如下所示:

node {
    //...
    //CREATE A MONGO DOCKER IMAGE
    def dockerMongoImage = docker.image("mongo");
    // getting our maven container
    def maven = docker.build('my:docker', '../workspace')
    dockerMongoImage.withRun{ mongo ->
        maven.inside("--link=${mongo.id}:mongo") {
            stage "checkout branch '${env.BRANCH_NAME}'"
                def cloneUrl = createScmCloneUrl("https", scmUser, scmPassword, scmHref )
                sh "hg clone ${cloneUrl} -r ${env.BRANCH_NAME} ${workingDir} --insecure"
            stage "build - running clean install"
                runMvn(workingDir, mvnSettingsLocation, "clean install -U -V -DskipTests=true -X")
            // AND SO ON

整个配置运行良好,但我对容器内的结账不太满意。我的问题是,有比在容器内结账更好的解决方案吗。这将防止我遇到DNS的一些问题。有没有人对此有一定的经验,可以告诉我什么是最佳实践。我在谷歌上搜索了很多次,但没有找到任何好的解决方案。谢谢你的帮助。

首先检查节点上的代码,然后使用-v 将该文件夹装载到docker容器中

(-v,--volume=[host src:]container dest[:]:绑定装载卷。)

stage "checkout branch '${env.BRANCH_NAME}'"
def cloneUrl = createScmCloneUrl("https", scmUser, scmPassword, scmHref )
sh "hg clone ${cloneUrl} -r ${env.BRANCH_NAME} ${workingDir} --insecure"
stage "build - running clean install"
dockerMongoImage.withRun{ mongo ->
    maven.inside("--link=${mongo.id}:mongo -v ${workingDir}:/source") {
        runMvn("/source", mvnSettingsLocation, "clean install -U -V -DskipTests=true -X")
    }
}

相关内容

  • 没有找到相关文章

最新更新