8 Commits

Author SHA1 Message Date
Shubham Agrawal
0bc05d3d59 cleanup codebase 2021-12-10 00:34:33 +05:30
Shubham Agrawal
1ba794cc2c fix manifest 2021-12-10 00:30:33 +05:30
Shubham Agrawal
4322b7a867 fix yml 2021-12-10 00:28:43 +05:30
Shubham Agrawal
a8d69304f4 remove 1803 2021-12-03 13:19:43 +05:30
Shubham Agrawal
64fb40b176 fix yaml 2021-12-03 12:56:42 +05:30
Shubham Agrawal
318241a06c fix yml 2021-12-03 12:50:06 +05:30
Shubham Agrawal
090bbdbb73 fix yaml 2021-12-03 12:48:45 +05:30
Shubham Agrawal
cbbb5d0692 Support for windows images for tags 2021-12-03 12:06:27 +05:30
22 changed files with 167 additions and 521 deletions

View File

@@ -40,7 +40,7 @@ trigger:
---
kind: pipeline
type: ssh
name: windows-1809-docker
name: windows-1809
platform:
os: windows
@@ -53,197 +53,90 @@ server:
from_secret: windows_username
steps:
- name: build_latest
- name: build-docker
commands:
- go build -o release/windows/amd64/drone-docker.exe ./cmd/drone-docker
- docker login -u $env:USERNAME -p $env:PASSWORD
- |
$tag="windows-1809-amd64"
if (Test-Path env:DRONE_SEMVER_SHORT) {
$tag="$env:DRONE_SEMVER_SHORT-windows-1809-amd64"
}
docker build -f docker/docker/Dockerfile.windows.1809 -t plugins/docker:$tag .
docker push plugins/docker:$tag
environment:
VERSION: 1809
REGISTRY: docker
CGO_ENABLED: "0"
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/latest.ps1
when:
event: [ push ]
- name: build_tag
- name: build-gcr
commands:
- go build -o release/windows/amd64/drone-gcr.exe ./cmd/drone-gcr
- docker login -u $env:USERNAME -p $env:PASSWORD
- |
$tag="windows-1809-amd64"
if (Test-Path env:DRONE_SEMVER_SHORT) {
$tag="$env:DRONE_SEMVER_SHORT-windows-1809-amd64"
}
docker build -f docker/gcr/Dockerfile.windows.1809 -t plugins/gcr:$tag .
docker push plugins/gcr:$tag
environment:
VERSION: 1809
REGISTRY: docker
CGO_ENABLED: "0"
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/tag.ps1
when:
event: [ tag ]
depends_on:
- testing
- name: build-ecr
commands:
- go build -o release/windows/amd64/drone-ecr.exe ./cmd/drone-ecr
- docker login -u $env:USERNAME -p $env:PASSWORD
- |
$tag="windows-1809-amd64"
if (Test-Path env:DRONE_SEMVER_SHORT) {
$tag="$env:DRONE_SEMVER_SHORT-windows-1809-amd64"
}
docker build -f docker/ecr/Dockerfile.windows.1809 -t plugins/ecr:$tag .
docker push plugins/ecr:$tag
environment:
CGO_ENABLED: "0"
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
- name: build-acr
commands:
- go build -o release/windows/amd64/drone-acr.exe ./cmd/drone-acr
- docker login -u $env:USERNAME -p $env:PASSWORD
- |
$tag="windows-1809-amd64"
if (Test-Path env:DRONE_SEMVER_SHORT) {
$tag="$env:DRONE_SEMVER_SHORT-windows-1809-amd64"
}
docker build -f docker/acr/Dockerfile.windows.1809 -t plugins/acr:$tag .
docker push plugins/acr:$tag
environment:
CGO_ENABLED: "0"
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
trigger:
ref:
- refs/heads/master
- refs/tags/*
event:
- push
- tag
depends_on:
- testing
---
kind: pipeline
type: ssh
name: windows-1809-ecr
platform:
os: windows
server:
host: windows.1809.amd64.plugins.drone.ci
password:
from_secret: windows_password
user:
from_secret: windows_username
steps:
- name: build_latest
environment:
VERSION: 1809
REGISTRY: ecr
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/latest.ps1
when:
event: [ push ]
- name: build_tag
environment:
VERSION: 1809
REGISTRY: ecr
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/tag.ps1
when:
event: [ tag ]
depends_on:
- testing
- windows-1809-docker
trigger:
ref:
- refs/heads/master
- refs/tags/*
---
kind: pipeline
type: ssh
name: windows-1809-gcr
platform:
os: windows
server:
host: windows.1809.amd64.plugins.drone.ci
password:
from_secret: windows_password
user:
from_secret: windows_username
steps:
- name: build_latest
environment:
VERSION: 1809
REGISTRY: gcr
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/latest.ps1
when:
event: [ push ]
- name: build_tag
environment:
VERSION: 1809
REGISTRY: gcr
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/tag.ps1
when:
event: [ tag ]
depends_on:
- testing
- windows-1809-ecr
trigger:
ref:
- refs/heads/master
- refs/tags/*
---
kind: pipeline
type: ssh
name: windows-1809-acr
platform:
os: windows
server:
host: windows.1809.amd64.plugins.drone.ci
password:
from_secret: windows_password
user:
from_secret: windows_username
steps:
- name: build_latest
environment:
VERSION: 1809
REGISTRY: acr
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/latest.ps1
when:
event: [ push ]
- name: build_tag
environment:
VERSION: 1809
REGISTRY: acr
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/tag.ps1
when:
event: [ tag ]
depends_on:
- testing
- windows-1809-gcr
trigger:
ref:
- refs/heads/master
- refs/tags/*
---
kind: pipeline
type: ssh
name: windows-1909-docker
name: windows-1909
platform:
os: windows
@@ -256,190 +149,86 @@ server:
from_secret: windows_username
steps:
- name: build_latest
- name: build-docker
commands:
- go build -o release/windows/amd64/drone-docker.exe ./cmd/drone-docker
- docker login -u $env:USERNAME -p $env:PASSWORD
- |
$tag="windows-1909-amd64"
if (Test-Path env:DRONE_SEMVER_SHORT) {
$tag="$env:DRONE_SEMVER_SHORT-windows-1909-amd64"
}
docker build -f docker/docker/Dockerfile.windows.1909 -t plugins/docker:$tag .
docker push plugins/docker:$tag
environment:
VERSION: 1909
REGISTRY: docker
CGO_ENABLED: "0"
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/latest.ps1
when:
event: [ push ]
- name: build_tag
- name: build-gcr
commands:
- go build -o release/windows/amd64/drone-gcr.exe ./cmd/drone-gcr
- docker login -u $env:USERNAME -p $env:PASSWORD
- |
$tag="windows-1909-amd64"
if (Test-Path env:DRONE_SEMVER_SHORT) {
$tag="$env:DRONE_SEMVER_SHORT-windows-1909-amd64"
}
docker build -f docker/gcr/Dockerfile.windows.1909 -t plugins/gcr:$tag .
docker push plugins/gcr:$tag
environment:
VERSION: 1909
REGISTRY: docker
CGO_ENABLED: "0"
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
- name: build-ecr
commands:
- powershell.exe scripts/windows/tag.ps1
when:
event: [ tag ]
- go build -o release/windows/amd64/drone-ecr.exe ./cmd/drone-ecr
- docker login -u $env:USERNAME -p $env:PASSWORD
- |
$tag="windows-1909-amd64"
if (Test-Path env:DRONE_SEMVER_SHORT) {
$tag="$env:DRONE_SEMVER_SHORT-windows-1909-amd64"
}
docker build -f docker/ecr/Dockerfile.windows.1909 -t plugins/ecr:$tag .
docker push plugins/ecr:$tag
environment:
CGO_ENABLED: "0"
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
- name: build-acr
commands:
- go build -o release/windows/amd64/drone-acr.exe ./cmd/drone-acr
- docker login -u $env:USERNAME -p $env:PASSWORD
- |
$tag="windows-1909-amd64"
if (Test-Path env:DRONE_SEMVER_SHORT) {
$tag="$env:DRONE_SEMVER_SHORT-windows-1909-amd64"
}
docker build -f docker/acr/Dockerfile.windows.1909 -t plugins/acr:$tag .
docker push plugins/acr:$tag
environment:
CGO_ENABLED: "0"
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
trigger:
event:
- push
- tag
depends_on:
- testing
trigger:
ref:
- refs/heads/master
- refs/tags/*
---
kind: pipeline
type: ssh
name: windows-1909-ecr
platform:
os: windows
server:
host: windows.1909.amd64.plugins.drone.ci
password:
from_secret: windows_password
user:
from_secret: windows_username
steps:
- name: build_latest
environment:
VERSION: 1909
REGISTRY: ecr
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/latest.ps1
when:
event: [ push ]
- name: build_tag
environment:
VERSION: 1909
REGISTRY: ecr
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/tag.ps1
when:
event: [ tag ]
depends_on:
- testing
trigger:
ref:
- refs/heads/master
- refs/tags/*
---
kind: pipeline
type: ssh
name: windows-1909-gcr
platform:
os: windows
server:
host: windows.1909.amd64.plugins.drone.ci
password:
from_secret: windows_password
user:
from_secret: windows_username
steps:
- name: build_latest
environment:
VERSION: 1909
REGISTRY: gcr
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/latest.ps1
when:
event: [ push ]
- name: build_tag
environment:
VERSION: 1909
REGISTRY: gcr
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/tag.ps1
when:
event: [ tag ]
depends_on:
- testing
trigger:
ref:
- refs/heads/master
- refs/tags/*
---
kind: pipeline
type: ssh
name: windows-1909-acr
platform:
os: windows
server:
host: windows.1909.amd64.plugins.drone.ci
password:
from_secret: windows_password
user:
from_secret: windows_username
steps:
- name: build_latest
environment:
VERSION: 1909
REGISTRY: acr
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/latest.ps1
when:
event: [ push ]
- name: build_tag
environment:
VERSION: 1909
REGISTRY: acr
USERNAME:
from_secret: docker_username
PASSWORD:
from_secret: docker_password
commands:
- powershell.exe scripts/windows/tag.ps1
when:
event: [ tag ]
depends_on:
- testing
trigger:
ref:
- refs/heads/master
- refs/tags/*
---
kind: pipeline
name: linux-amd64-docker
@@ -655,8 +444,8 @@ trigger:
- "refs/tags/**"
depends_on:
- windows-1809-docker
- windows-1909-docker
- windows-1809
- windows-1909
- linux-amd64-docker
- linux-arm64-docker
- linux-arm-docker
@@ -861,8 +650,8 @@ trigger:
- "refs/tags/**"
depends_on:
- windows-1809-gcr
- windows-1909-gcr
- windows-1809
- windows-1909
- linux-amd64-gcr
- linux-arm64-gcr
- linux-arm-gcr
@@ -1067,8 +856,8 @@ trigger:
- "refs/tags/**"
depends_on:
- windows-1809-ecr
- windows-1909-ecr
- windows-1809
- windows-1909
- linux-amd64-ecr
- linux-arm64-ecr
- linux-arm-ecr
@@ -1476,10 +1265,11 @@ trigger:
- "refs/tags/**"
depends_on:
- windows-1809-acr
- windows-1909-acr
- windows-1809
- windows-1909
- linux-amd64-acr
- linux-arm64-acr
- linux-arm-acr
...

View File

@@ -1,27 +1,11 @@
# Changelog
## [v20.10.9.1](https://github.com/drone-plugins/drone-docker/tree/v20.10.9.1) (2022-01-13)
[Full Changelog](https://github.com/drone-plugins/drone-docker/compare/v20.10.9...v20.10.9.1)
**Implemented enhancements:**
- Serialize windows 1809 pipelines [\#348](https://github.com/drone-plugins/drone-docker/pull/348) ([shubham149](https://github.com/shubham149))
- Support for windows images for tags [\#346](https://github.com/drone-plugins/drone-docker/pull/346) ([shubham149](https://github.com/shubham149))
**Fixed bugs:**
- Fix ECR & GCR docker publish on windows [\#352](https://github.com/drone-plugins/drone-docker/pull/352) ([shubham149](https://github.com/shubham149))
- Fix windows docker builds [\#351](https://github.com/drone-plugins/drone-docker/pull/351) ([shubham149](https://github.com/shubham149))
- Fix powershell script to publish windows images [\#350](https://github.com/drone-plugins/drone-docker/pull/350) ([shubham149](https://github.com/shubham149))
## [v20.10.9](https://github.com/drone-plugins/drone-docker/tree/v20.10.9) (2021-11-03)
## [v20.10.9](https://github.com/drone-plugins/drone-docker/tree/v20.10.9) (2021-11-02)
[Full Changelog](https://github.com/drone-plugins/drone-docker/compare/v19.03.9...v20.10.9)
**Merged pull requests:**
- bump to version 20.10.9: [\#342](https://github.com/drone-plugins/drone-docker/pull/342) ([eoinmcafee00](https://github.com/eoinmcafee00))
- Upgrade Docker dind to 20.10.9 for 64bit platforms [\#334](https://github.com/drone-plugins/drone-docker/pull/334) ([gzm0](https://github.com/gzm0))
## [v19.03.9](https://github.com/drone-plugins/drone-docker/tree/v19.03.9) (2021-10-13)

View File

@@ -7,9 +7,6 @@ import (
"strings"
"github.com/joho/godotenv"
"github.com/sirupsen/logrus"
docker "github.com/drone-plugins/drone-docker"
)
func main() {
@@ -43,12 +40,12 @@ func main() {
os.Setenv("DOCKER_PASSWORD", password)
// invoke the base docker plugin binary
cmd := exec.Command(docker.GetDroneDockerExecCmd())
cmd := exec.Command("drone-docker")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
logrus.Fatal(err)
os.Exit(1)
}
}

View File

@@ -2,7 +2,6 @@ package main
import (
"os"
"runtime"
"github.com/joho/godotenv"
"github.com/sirupsen/logrus"
@@ -268,26 +267,26 @@ func run(c *cli.Context) error {
Config: c.String("docker.config"),
},
Build: docker.Build{
Remote: c.String("remote.url"),
Name: c.String("commit.sha"),
Dockerfile: c.String("dockerfile"),
Context: c.String("context"),
Tags: c.StringSlice("tags"),
Args: c.StringSlice("args"),
ArgsEnv: c.StringSlice("args-from-env"),
Target: c.String("target"),
Squash: c.Bool("squash"),
Pull: c.BoolT("pull-image"),
CacheFrom: c.StringSlice("cache-from"),
Compress: c.Bool("compress"),
Repo: c.String("repo"),
Labels: c.StringSlice("custom-labels"),
LabelSchema: c.StringSlice("label-schema"),
AutoLabel: c.BoolT("auto-label"),
Link: c.String("link"),
NoCache: c.Bool("no-cache"),
AddHost: c.StringSlice("add-host"),
Quiet: c.Bool("quiet"),
Remote: c.String("remote.url"),
Name: c.String("commit.sha"),
Dockerfile: c.String("dockerfile"),
Context: c.String("context"),
Tags: c.StringSlice("tags"),
Args: c.StringSlice("args"),
ArgsEnv: c.StringSlice("args-from-env"),
Target: c.String("target"),
Squash: c.Bool("squash"),
Pull: c.BoolT("pull-image"),
CacheFrom: c.StringSlice("cache-from"),
Compress: c.Bool("compress"),
Repo: c.String("repo"),
Labels: c.StringSlice("custom-labels"),
LabelSchema: c.StringSlice("label-schema"),
AutoLabel: c.BoolT("auto-label"),
Link: c.String("link"),
NoCache: c.Bool("no-cache"),
AddHost: c.StringSlice("add-host"),
Quiet: c.Bool("quiet"),
},
Daemon: docker.Daemon{
Registry: c.String("docker.registry"),
@@ -328,11 +327,3 @@ func run(c *cli.Context) error {
return plugin.Exec()
}
func GetExecCmd() string {
if runtime.GOOS == "windows" {
return "C:/bin/drone-docker.exe"
}
return "drone-docker"
}

View File

@@ -11,15 +11,12 @@ import (
"strings"
"github.com/joho/godotenv"
"github.com/sirupsen/logrus"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ecr"
docker "github.com/drone-plugins/drone-docker"
)
const defaultRegion = "us-east-1"
@@ -113,11 +110,11 @@ func main() {
os.Setenv("DOCKER_PASSWORD", password)
// invoke the base docker plugin binary
cmd := exec.Command(docker.GetDroneDockerExecCmd())
cmd := exec.Command("drone-docker")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err = cmd.Run(); err != nil {
logrus.Fatal(err)
os.Exit(1)
}
}

View File

@@ -8,9 +8,6 @@ import (
"strings"
"github.com/joho/godotenv"
"github.com/sirupsen/logrus"
docker "github.com/drone-plugins/drone-docker"
)
// gcr default username
@@ -57,12 +54,12 @@ func main() {
os.Setenv("DOCKER_PASSWORD", password)
// invoke the base docker plugin binary
cmd := exec.Command(docker.GetDroneDockerExecCmd())
cmd := exec.Command("drone-docker")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
logrus.Fatal(err)
os.Exit(1)
}
}

View File

@@ -6,7 +6,6 @@ import (
"os"
"os/exec"
"path/filepath"
"runtime"
"strings"
"time"
)
@@ -417,11 +416,3 @@ func commandRmi(tag string) *exec.Cmd {
func trace(cmd *exec.Cmd) {
fmt.Fprintf(os.Stdout, "+ %s\n", strings.Join(cmd.Args, " "))
}
func GetDroneDockerExecCmd() string {
if runtime.GOOS == "windows" {
return "C:/bin/drone-docker.exe"
}
return "drone-docker"
}

View File

@@ -1,35 +0,0 @@
# this script is used by the continuous integration server to
# build and publish the docker image for a commit to master.
$ErrorActionPreference = "Stop"
$env:GOOS="windows"
$env:GOARCH="amd64"
$env:CGO_ENABLED="0"
if (-not (Test-Path env:VERSION)) {
$env:VERSION="1809"
}
if (-not (Test-Path env:REGISTRY)) {
$env:REGISTRY="docker"
}
echo $env:GOOS
echo $env:GOARCH
echo $env:VERSION
echo $env:REGISTRY
# build the binary
Write-Host "+ go build -o release/windows/amd64/drone-${env:REGISTRY}.exe ./cmd/drone-${env:REGISTRY}";
go build -o release/windows/amd64/drone-${env:REGISTRY}.exe ./cmd/drone-${env:REGISTRY}
# build and publish the docker image
docker login -u ${env:USERNAME} -p ${env:PASSWORD}
Write-Host "+ docker build -f docker/${env:REGISTRY}/Dockerfile.windows.amd64.${env:VERSION} -t plugins/${env:REGISTRY}:windows-${env:VERSION}-amd64 .";
docker build -f docker/${env:REGISTRY}/Dockerfile.windows.amd64.${env:VERSION} -t plugins/${env:REGISTRY}:windows-${env:VERSION}-amd64 .
Write-Host "+ docker push plugins/${env:REGISTRY}:windows-${env:VERSION}-amd64"
docker push plugins/${env:REGISTRY}:windows-${env:VERSION}-amd64
# remove images from local cache
Write-Host "+ docker rmi plugins/${env:REGISTRY}:windows-${env:VERSION}-amd64"
docker rmi plugins/${env:REGISTRY}:windows-${env:VERSION}-amd64

View File

@@ -1,66 +0,0 @@
# this script is used by the continuous integration server to
# build and publish the docker image for a tagged revsision.
$ErrorActionPreference = "Stop"
$env:GOOS="windows"
$env:GOARCH="amd64"
$env:CGO_ENABLED="0"
if (-not (Test-Path env:VERSION)) {
$env:VERSION="1809"
}
if (-not (Test-Path env:DRONE_SEMVER_SHORT)) {
echo "missing semver"
exit 1
}
if (-not (Test-Path env:REGISTRY)) {
$env:REGISTRY="docker"
}
# define the image tags
$env:IMAGE_PATCH="plugins/${env:REGISTRY}:${env:DRONE_SEMVER_SHORT}-windows-${env:VERSION}-amd64"
$env:IMAGE_MAJOR="plugins/${env:REGISTRY}:${env:DRONE_SEMVER_MAJOR}-windows-${env:VERSION}-amd64"
$env:IMAGE_MINOR="plugins/${env:REGISTRY}:${env:DRONE_SEMVER_MAJOR}.${env:DRONE_SEMVER_MINOR}-windows-${env:VERSION}-amd64"
echo "build environment:"
echo $env:GOOS
echo $env:GOARCH
echo $env:VERSION
# build the binary
Write-Host "+ go build -o release/windows/amd64/drone-${env:REGISTRY}.exe ./cmd/drone-${env:REGISTRY}"
go build -o release/windows/amd64/drone-${env:REGISTRY}.exe ./cmd/drone-${env:REGISTRY}
# authenticate with the docker registry
docker login -u ${env:USERNAME} -p ${env:PASSWORD}
echo "building images:"
echo ${env:IMAGE_PATCH}
echo ${env:IMAGE_MINOR}
echo ${env:IMAGE_MAJOR}
# build and tag the docker images
Write-Host "+ docker build -f docker/${env:REGISTRY}/Dockerfile.windows.amd64.${env:VERSION} -t ${env:IMAGE_PATCH} ."
docker build -f docker/${env:REGISTRY}/Dockerfile.windows.amd64.${env:VERSION} -t ${env:IMAGE_PATCH} .
Write-Host "+ docker tag ${env:IMAGE_PATCH} ${env:IMAGE_MAJOR}"
docker tag ${env:IMAGE_PATCH} ${env:IMAGE_MAJOR}
Write-Host "+ docker tag ${env:IMAGE_PATCH} ${env:IMAGE_MINOR}"
docker tag ${env:IMAGE_PATCH} ${env:IMAGE_MINOR}
# publish the docker images
Write-Host "+ docker push ${env:IMAGE_MAJOR}"
docker push ${env:IMAGE_MAJOR}
Write-Host "+ docker push ${env:IMAGE_MINOR}"
docker push ${env:IMAGE_MINOR}
Write-Host "+ docker push ${env:IMAGE_PATCH}"
docker push ${env:IMAGE_PATCH}
# remove images after from local cache
Write-Host "+ docker rmi ${env:IMAGE_MAJOR}"
docker rmi ${env:IMAGE_MAJOR}
Write-Host "+ docker rmi ${env:IMAGE_MINOR}"
docker rmi ${env:IMAGE_MINOR}
Write-Host "+ docker rmi ${env:IMAGE_PATCH}"
docker rmi ${env:IMAGE_PATCH}