2017-10-27 5 views
0

나는 Jenkins와 Nexus를 docker swarm에 배치했습니다. Jenkins는 소켓을 통해 호스트 도커에 액세스하도록 구성된 도커를 보유하고 있습니다.득점 기계에 배치되지 않은 도커 컨테이너를 사용하여 도커 웜에서 서비스에 액세스하는 방법은 무엇입니까?

volumes: 
    - /var/run/docker.sock:/var/run/docker.sock 

이 설정을 사용하면 docker swarm에 배포 된 jenkins 내부의 docker를 사용할 수 있으며 정상적으로 작동합니다.

그러나 나는 docker 컨테이너로 jenkins 파이프 라인을 만들고 이후에 nexus 저장소에 액세스하려고 할 때 문제가 있습니다. 기본적으로 jenkins와 함께 뭉치는 것은 jenkins 파이프 라인에서 사용되는 컨테이너에서 액세스 할 수없는 오버레이 네트워크 내에 배포됩니다.

도커 네트워크는 다음과 같습니다

docker network ls: 
... 
wzr8yyx6hki1  ci-cd-network overlay    swarm 
.. 

샘플 젠킨스 파이프 라인 시연 과정 : 젠킨스 파이프 라인 프로세스에 의해 작성

pipeline { 

    agent none 
    triggers { pollSCM('H/15 * * * *') } 
    environment { 
    NODE_IMAGE = 'node:6' 
    } 
    stages { 
    stage('Checkout') { 
     agent any 
      steps { 
      /*generated with jenkins syntax generator*/ 
       checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: '[email protected]:code/project.git']]]) 
       } 
     } 
    stage('Static code check (run lint)') { 
      agent { 
       docker { image '${NODE_IMAGE}' } 
      } 
      steps { 
       sh 'npm install' 
       sh 'npm run lint:ts' 
     } 
    } 
    stage('Unit Test') { 
      agent { 
       docker { image '${NODE_IMAGE}' } 
      } 
      steps { 
       sh 'npm install' 
       sh 'npm publish' 

      } 
    } 
    } 
} 

컨테이너 네트워크 'CI-CD-네트워크'에서 넥서스 서비스에 액세스 할 수 없습니다 군대에 의해 사용되며 넥서스와 젠킨스 기계가 포함됩니다. 기본적으로 nexus 서비스는 도커 웜 (즉, ping nexus)에 배포 된 다른 도커 서비스에서 액세스 할 수 있지만 간단히 컨테이너로 별도로 실행되는 '노드'컨테이너에서 액세스 할 수는 없습니다 (떼로는 안 함)? 넥서스 서비스를 '노드'컨테이너에 '표시'하는 방법을 알려주세요.

답변

0

jenkins 내부에 생성 된 에이전트 컨테이너를 오버레이 네트워크에 연결 한 다음 컨테이너가 서로 통신 할 수 있습니다.

agent { 
    docker { 
     image '${NODE_IMAGE}' 
     args '--network ci-cd-network' 
    } 
}