2017-12-16 23 views
3

Jenkinsfile 또는 Jenkins 파이프 라인을 사용하여 새 이미지를 만들고 해당 이미지에서 컨테이너를 시작합니다. 그것은 처음으로 잘 작동합니다. 그러나 후속 실행에서는 이전 컨테이너를 중지하고 제거해야합니다. 내 젠킨스 파일은 다음과 같습니다 :Jenkinsfile에서 실행중인 컨테이너를 중지하려면 어떻게합니까?

node { 
    def commit_id 
    stage('Preparation') { 
    checkout scm 
    sh "git rev-parse --short HEAD > .git/commit-id"       
    commit_id = readFile('.git/commit-id').trim() 
    } 
    stage('docker build/push') { 
    docker.withRegistry('https://index.docker.io/v1/', 'dockerhub') { 
     def app = docker.build("my-docker-id/my-api:${commit_id}", '.').push() 
    } 
    } 
    stage('docker stop container') { 
     def apiContainer = docker.container('api-server') 
     apiContainer.stop() 
    } 
    stage('docker run container') { 
     def apiContainer = docker.image("my-docker-id/my-api:${commit_id}").run("--name api-server --link mysql_server:mysql --publish 3100:3100") 
    } 
} 

'도커 중지 컨테이너'단계가 실패했습니다. 컨테이너를 가져 와서 멈추게하는 올바른 API를 알지 못하기 때문입니다. 감사.

답변

4

in this Jenkinsfile으로 sh 명령을 대신 사용할 수 있습니다.

그런 식으로, 당신이 사용할 수있는 라인 좋아 : 실행중인 경우, 컨테이너 x (여기 zookeper 이름)을 보장 할

sh 'docker ps -f name=zookeeper -q | xargs --no-run-if-empty docker container stop' 
sh 'docker container ls -a -fname=zookeeper -q | xargs -r docker container rm' 

, 중지 및 제거 처음이다.

+0

감사합니다. 저는 더 간단한 것을 사용했습니다. 'sh '도커 컨테이너 rm -f api-server'' – vijayst