allow multiple destinations, error handling for each push
This commit is contained in:
parent
7d0466db37
commit
4c190a7037
|
|
@ -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)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue