1
0
mirror of https://github.com/raseels-repos/golang-saas-starter-kit.git synced 2025-08-10 22:41:25 +02:00

devsops remove build tags, only release image

This commit is contained in:
Lee Brown
2019-07-14 12:39:05 -08:00
parent e46c6317e5
commit 95e0d28c3b
3 changed files with 6 additions and 37 deletions

View File

@@ -123,8 +123,7 @@ func exists(path string) (bool, error) {
return true, err return true, err
} }
// execCmds executes a set of commands using the current env variables.
// execCmds executes a set of commands.
func execCmds(log *log.Logger, workDir string, cmds ...[]string) (error) { func execCmds(log *log.Logger, workDir string, cmds ...[]string) (error) {
for _, cmdVals := range cmds { for _, cmdVals := range cmds {
cmd := exec.Command(cmdVals[0], cmdVals[1:]...) cmd := exec.Command(cmdVals[0], cmdVals[1:]...)

View File

@@ -126,7 +126,6 @@ type serviceDeployRequest struct {
DBInstance *rds.CreateDBInstanceInput DBInstance *rds.CreateDBInstanceInput
ReleaseImage string ReleaseImage string
BuildTags []string
flags ServiceDeployFlags flags ServiceDeployFlags
_awsSession *session.Session _awsSession *session.Session
} }

View File

@@ -812,19 +812,16 @@ func ServiceDeploy(log *log.Logger, req *serviceDeployRequest) error {
// Tag of release image will always include one with environment and service name. // Tag of release image will always include one with environment and service name.
tag1 := req.Env + "-" + req.ServiceName tag1 := req.Env + "-" + req.ServiceName
req.BuildTags = append(req.BuildTags, tag1)
// Generate tags for the release image. // Generate tags for the release image.
if v := os.Getenv("CI_COMMIT_REF_NAME"); v != "" { if v := os.Getenv("CI_COMMIT_REF_NAME"); v != "" {
tag2 := tag1 + "-" + v tag2 := tag1 + "-" + v
req.BuildTags = append(req.BuildTags, tag2)
req.ReleaseImage = *awsRepo.RepositoryUri + ":" + tag2 req.ReleaseImage = *awsRepo.RepositoryUri + ":" + tag2
} else { } else {
req.ReleaseImage = *awsRepo.RepositoryUri + ":" + tag1 req.ReleaseImage = *awsRepo.RepositoryUri + ":" + tag1
} }
log.Printf("\t\trelease image: %s", req.ReleaseImage) log.Printf("\t\trelease image: %s", req.ReleaseImage)
log.Printf("\t\ttags: %s", strings.Join(req.BuildTags, " "))
log.Printf("\t%s\tRelease image valid.", tests.Success) log.Printf("\t%s\tRelease image valid.", tests.Success)
log.Println("ECR - Retrieve authorization token used for docker login.") log.Println("ECR - Retrieve authorization token used for docker login.")
@@ -862,32 +859,17 @@ func ServiceDeploy(log *log.Logger, req *serviceDeployRequest) error {
return errors.Wrapf(err, "Failed parse relative path for %s from %s", req.DockerFile, req.ProjectRoot) return errors.Wrapf(err, "Failed parse relative path for %s from %s", req.DockerFile, req.ProjectRoot)
} }
// The initial build command slice.
buildCmd := []string{ buildCmd := []string{
"docker", "build", "docker", "build",
"--file="+dockerFile, "--file="+dockerFile,
"--build-arg", "service="+req.ServiceName, "--build-arg", "service="+req.ServiceName,
"--build-arg", "env="+req.Env, "--build-arg", "env="+req.Env,
"-t", req.ReleaseImage, "-t", req.ReleaseImage,
".",
} }
// Append the build tags.
var builtImageTags []string
for _, t := range req.BuildTags {
if strings.HasSuffix(req.ReleaseImage, ":"+t) {
// skip duplicate image tags
continue
}
imageTag := req.ReleaseImage + ":" + t
buildCmd = append(buildCmd, "-t", imageTag)
builtImageTags = append(builtImageTags, imageTag)
}
// Append the build context to the build command.
buildCmd = append(buildCmd, ".")
log.Println("Starting docker build") log.Println("Starting docker build")
err = execCmds(log, req.ProjectRoot, buildCmd) err = execCmds(log, req.ProjectRoot, buildCmd)
if err != nil { if err != nil {
return errors.Wrap(err, "Failed to build docker image") return errors.Wrap(err, "Failed to build docker image")
@@ -895,29 +877,18 @@ func ServiceDeploy(log *log.Logger, req *serviceDeployRequest) error {
// Push the newly built image of the Docker container to the registry. // Push the newly built image of the Docker container to the registry.
if req.NoPush == false { if req.NoPush == false {
log.Printf("\t\tPush release image %s", req.ReleaseImage)
log.Printf("\t\tDocker Login")
err = execCmds(log, req.ProjectRoot, dockerLoginCmd) err = execCmds(log, req.ProjectRoot, dockerLoginCmd)
if err != nil { if err != nil {
return errors.Wrapf(err, "Failed to push docker image %s", req.ReleaseImage) return errors.Wrapf(err, "Failed to login to AWS ECR")
} }
log.Printf("\t\tPush release image %s", req.ReleaseImage)
err = execCmds(log, req.ProjectRoot, []string{"docker", "push", req.ReleaseImage}) err = execCmds(log, req.ProjectRoot, []string{"docker", "push", req.ReleaseImage})
if err != nil { if err != nil {
return errors.Wrapf(err, "Failed to push docker image %s", req.ReleaseImage) return errors.Wrapf(err, "Failed to push docker image %s", req.ReleaseImage)
} }
// Itererate through the build tags and push the associated Docker container image.
for _, t := range builtImageTags {
log.Printf("\t\tpush tag %s", t)
err = execCmds(log, req.ProjectRoot, []string{"docker", "push", t})
if err != nil {
return errors.Wrapf(err, "Failed to push docker image %s", t)
}
}
} }
log.Printf("\t%s\tbuild complete.\n", tests.Success) log.Printf("\t%s\tbuild complete.\n", tests.Success)