将图像从Jenkins管道推送到GCR需要太长时间

8qgya5xd  于 2023-08-03  发布在  Jenkins
关注(0)|答案(1)|浏览(110)

我有我的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

3j86kqsm

3j86kqsm1#

我需要澄清一下你说的“第二次”是什么意思。这是您第二次使用相同的值运行相同的构建吗?如果你正在更新Docker镜像,那么它只会构建需要更新的层,这样显然会更快。你不能在第一次的时候让它更快,因为它需要构建所有的层。
另一方面,如果你把三个块中的每一个都分成平行的阶段,那么所有的图像都将被构建并推到一起。这可能会提高事情的速度(假设您有必要的备用资源)。请参阅docs以了解更多信息。

相关问题