我有以下管道:
pipeline {
環境 {
注冊表 = "my-docker"
registryCredential = 'dockerhubcredentials'.
dockerImage = ''
}
代理任何
階段 {
stage('Cloning our Git') {
步驟 {
git 'my-git'
}
}
stage('Building Docker Image') {
步驟 {
腳本 {
dockerImage = docker.build registry ":$BUILD_NUMBER"
}
}
}
stage('Deploy Docker Image to Dockerhub') {
步驟 {
腳本 {
docker.withRegistry(', registryCredential) {
dockerImage.push()
}
}
}
}
stage('Cleaning Up') {
步驟{
sh "docker rmi --force $registry:$BUILD_NUMBER"
}
}
階段('升級docker') {
步驟{
// sh docker stop *Current CONTAINERID* (How do I get it?)
// sh docker run my-container:*NEW_BUILD_NUMBER*.
}
}
}
}
現在我試圖添加升級docker階段,所有其他步驟都作業得很好
。我怎樣才能獲得我所尋找的容器的當前容器ID,以便停止它呢?
在停止之后,我想拉動并啟動新的容器(我需要新的構建號,可能是
$BUILD_NUMBER 1,我想我可以做到這一點--如果我錯了請糾正我。在 jenkins 中升級 docker 容器是一種好的做法嗎?我找不到任何例子,而且我覺得這是一個常見的自動化程序。
uj5u.com熱心網友回復:
如果我們解決了你試圖在管道中實作的兩個步驟,并且實作了它們,那么你的前兩個字面問題就變得無關緊要,因為它們不影響實作。
首先,對于停止容器:
// shocker stop *Current CONTAINERID* (How do I get it?)
你的管道從未運行過容器,所以你沒有容器需要停止,可以安全地跳過這一步方法。
第二,用于運行新的容器:
//shocker run my-container:*NEW_BUILD_NUMBER*
新的容器將來自于你的新鏡像,而你的新鏡像是你的docker.build全域變數方法的回傳物件的一部分。因此,我們可以像這樣運行你的新容器:
//這里有三個方法可用
dockerImage.run([args, command])
dockerImage.withRun[(args[, command])]。{...}
dockerImage.inside[(args)] {...}。
因為你把回傳分配給了dockerImage。
對于第三個問題,構建一個新的Docker鏡像并運行一個新的容器作為管道的一部分是絕對常見的。如果你愿意,你可以為你的管道添加各種其他階段,例如將新鏡像部署到Kubernetes集群。
uj5u.com熱心網友回復:
如果你是通過Jenkins管道進行部署,你通常想直接指定容器的名稱:
sh "docker run -d -name my-container $registry:$BUILD_NUMBER"
一旦你有了這個名字,你就可以用這個名字來清理舊的容器,而不需要知道容器的ID
sh 'docker stop my-container'.
sh 'docker rm my-container'。
另一個重要的推論是,你可能不應該在docker rmi新建立的鏡像之前docker run它。 Docker會拉出你剛剛推送的鏡像,但你一分鐘前剛有過這個東西。 你可能想要清理舊的鏡像,也許可以通過使用docker system prune來清理任何未使用的東西。
將所有這些放在一起,你的管道的終點將是:
標籤: 上一篇:是否有可能用"AsyncRabbitTemplate.RabbitConverterFuture"在java中進行異步呼叫鏈?
environmental and the same.
environment {
...
containerName = 'my-container
}
階段 {
...
stage('Upgrade docker') {
步驟 {
sh腳本。"docker stop $containerName", returnStatus: true
sh 腳本。"docker rm $containerName", returnStatus: true
sh "docker run -d -name $containerName $registry:$BUILD_NUMBER"
}
}
stage('Cleaning up') {
步驟 {
sh "docker system prune --all --force"
}
}
}
