我有我的Jenkins管道代码如下
def app_image
def app_latest
def queue_image
def queue_latest
def migrate_image
def migrate_latest
environment {
project_id="us.gcr.io/staging-123"
artifact_app="app"
artifact_queue="queue"
migration_artifact="backend-migration"
credentials_id="staging_cred"
}
pipeline {
agent any
stages {
stage('Start') {
def git_hash=sh returnStdout:true, script:'git rev-parse HEAD'
version="${git_hash.trim()}.${env.BUILD_NUMBER}"
app_image="${env.project_id}/${env.artifact_app}:${version}"
app_latest="${env.project_id}/${env.artifact_app}:latest"
queue_image="${env.project_id}/${env.artifact_queue}:${version}"
queue_latest="${env.project_id}/${env.artifact_queue}:latest"
migrate_image="${env.project_id}/${env.migration_artifact}:${version}"
migrate_latest="${env.project_id}/${env.migration_artifact}:latest"
}
stage('Build images and push to GCR') {
when { anyOf { branch 'develop'; branch 'qa'; branch 'staging'; branch 'master' } }
steps {
container("docker"){
withDockerRegistry(credentialsId: "gcr:${credentials_id}", url: 'https://us.gcr.io') {
sh """
docker pull ${app_latest}
docker build -f ./Dockerfile.app --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from ${app_latest} --tag ${app_image} --tag ${app_latest} .
docker push ${app_image}
docker push ${app_latest}
docker pull ${queue_latest}
docker build -f ./Dockerfile.queue --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from ${queue_latest} --tag ${queue_image} --tag ${queue_latest} .
docker push ${queue_image}
docker push ${queue_latest}
docker pull ${migrate_latest}
docker build -f ./Dockerfile.migrate --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from ${migrate_latest} --tag ${migrate_image} --tag ${migrate_latest} .
docker push ${migrate_image}
docker push ${migrate_latest}
"""
}
}
}
}
}
}
字符串
每当新的代码合并到任何一个分支管道将采取的代码,它将建立和推动的形象,以GCR。第一次将图像推送到GCR时,每次推送大约需要2分钟,我们有6张图像。仅用于推送映像的总时间约为12分钟,下一个部署阶段将在那里进行,总作业时间约为3分钟15分钟
当我们第二次运行相同的构建时,它会非常快地将图像推送到GCR。
有没有什么方法可以在1分钟左右从流水线第一次将图像推送到GCR
1条答案
按热度按时间3j86kqsm1#
我需要澄清一下你说的“第二次”是什么意思。这是您第二次使用相同的值运行相同的构建吗?如果你正在更新Docker镜像,那么它只会构建需要更新的层,这样显然会更快。你不能在第一次的时候让它更快,因为它需要构建所有的层。
另一方面,如果你把三个块中的每一个都分成平行的阶段,那么所有的图像都将被构建并推到一起。这可能会提高事情的速度(假设您有必要的备用资源)。请参阅docs以了解更多信息。