2016-07-21 5 views
0

私はJenkinsとDockerの新機能で、新しいマルチブランチパイプラインプロジェクトを構築してbuildserverの設定から控えています。私のアプリケーションにはいくつかの段階のJenkinsfileが含まれていて、2つのドッカー画像を使用しています。ドッカーハブの公式のmongo画像は、他のドッカー画像は自分で作成し、mavenとmercurialが含まれています。 Dockerfile:JenkinsfileとDockerのベストプラクティスを使用したマルチブランチパイプラインプロジェクト

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

私は、ステージ1で私のプロジェクトをチェックアウトと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のいくつかの問題を防ぐでしょう。 これにいくつかの経験があり、ベストプラクティスが何であるか教えてくれる人がいますか?私は何度もGoogleを検索しましたが、そのための素晴らしい解決策はありませんでした。 ありがとうございました。

答えて

0

は、最初のノード上でコードを確認し、-v

(-v、--volume = [ホストSRC:]を使用してドッカー容器にそのフォルダをマウント容器-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") 
    } 
} 
関連する問題