首页 文章

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

提问于
浏览
0

我是Jenkins和Docker的新手,并且构建了一个新的多分支管道项目,以独立于我们的构建服务器配置 . 我的应用程序包括一个具有多个阶段的Jenkins文件,并使用两个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的一些问题 . 有没有人对此有一些经验,可以告诉我最佳实践是什么 . 我通过谷歌多次搜索,但没有得到任何好的解决方案 . 谢谢你的帮助 .

1 回答

  • 2

    首先检查节点上的代码,然后使用-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")
        }
    }
    

相关问题