allow multiple destinations, error handling for each push

This commit is contained in:
jesusofsuburb1a 2018-05-17 09:35:41 +02:00
parent 7d0466db37
commit 4c190a7037
2 changed files with 29 additions and 21 deletions

View File

@ -85,10 +85,9 @@ var RootCmd = &cobra.Command{
os.Exit(1) os.Exit(1)
} }
for _, destination := range destinations { if err := executor.DoPush(ref, image, destinations, tarPath); err != nil {
if err := executor.DoPush(ref, image, destination, tarPath); err != nil { logrus.Error(err)
logrus.Error(err) os.Exit(1)
}
} }
}, },

View File

@ -170,26 +170,35 @@ func DoBuild(dockerfilePath, srcContext, snapshotMode string, args []string) (na
return nil, nil, err return nil, nil, err
} }
func DoPush(ref name.Reference, image v1.Image, destination, tarPath string) error { func DoPush(ref name.Reference, image v1.Image, destinations []string, tarPath string) error {
// Push the image // continue pushing unless an error occurs
destRef, err := name.NewTag(destination, name.WeakValidation) for _, destination := range destinations {
if err != nil { // Push the image
return err destRef, err := name.NewTag(destination, name.WeakValidation)
} if err != nil {
return err
}
if tarPath != "" { if tarPath != "" {
return tarball.WriteToFile(tarPath, destRef, image, nil) return tarball.WriteToFile(tarPath, destRef, image, nil)
} }
wo := remote.WriteOptions{} wo := remote.WriteOptions{}
if ref != nil { if ref != nil {
wo.MountPaths = []name.Repository{ref.Context()} wo.MountPaths = []name.Repository{ref.Context()}
}
pushAuth, err := authn.DefaultKeychain.Resolve(destRef.Context().Registry)
if err != nil {
return err
}
err = remote.Write(destRef, image, pushAuth, http.DefaultTransport, wo)
if err != nil {
logrus.Error(fmt.Errorf("Failed to push to destination %s", destination))
return err
}
} }
pushAuth, err := authn.DefaultKeychain.Resolve(destRef.Context().Registry) return nil
if err != nil {
return err
}
return remote.Write(destRef, image, pushAuth, http.DefaultTransport, wo)
} }
func saveStageDependencies(index int, stages []instructions.Stage, buildArgs *dockerfile.BuildArgs) error { func saveStageDependencies(index int, stages []instructions.Stage, buildArgs *dockerfile.BuildArgs) error {
// First, get the files in this stage later stages will need // First, get the files in this stage later stages will need