diff --git a/cmd/drone-docker/main.go b/cmd/drone-docker/main.go index c156e00..7ec53af 100644 --- a/cmd/drone-docker/main.go +++ b/cmd/drone-docker/main.go @@ -182,6 +182,46 @@ func main() { Usage: "additional host:IP mapping", EnvVar: "PLUGIN_ADD_HOST", }, + cli.StringFlag{ + Name: "s3-local-cache-dir", + Usage: "local directory for S3 based cache", + EnvVar: "PLUGIN_S3_LOCAL_CACHE_DIR", + }, + cli.StringFlag{ + Name: "s3-bucket", + Usage: "S3 bucket name", + EnvVar: "PLUGIN_S3_BUCKET", + }, + cli.StringFlag{ + Name: "s3-endpoint", + Usage: "S3 endpoint address", + EnvVar: "PLUGIN_S3_ENDPOINT", + }, + cli.StringFlag{ + Name: "s3-region", + Usage: "S3 region", + EnvVar: "PLUGIN_S3_REGION", + }, + cli.StringFlag{ + Name: "s3-key", + Usage: "S3 access key", + EnvVar: "PLUGIN_S3_ACCESS_KEY", + }, + cli.StringFlag{ + Name: "s3-secret", + Usage: "S3 access secret", + EnvVar: "PLUGIN_S3_SECRET", + }, + cli.BoolFlag{ + Name: "s3-use-ssl", + Usage: "Enable SSL for S3 connections", + EnvVar: "PLUGIN_S3_USE_SSL", + }, + cli.BoolFlag{ + Name: "layers", + Usage: "User Layers", + EnvVar: "PLUGIN_LAYERS", + }, } if err := app.Run(os.Args); err != nil { @@ -221,6 +261,14 @@ func run(c *cli.Context) error { NoCache: c.Bool("no-cache"), AddHost: c.StringSlice("add-host"), Quiet: c.Bool("quiet"), + S3CacheDir: c.String("s3-local-cache-dir"), + S3Bucket: c.String("s3-bucket"), + S3Endpoint: c.String("s3-endpoint"), + S3Region: c.String("s3-region"), + S3Key: c.String("s3-key"), + S3Secret: c.String("s3-secret"), + S3UseSSL: c.Bool("s3-use-ssl"), + Layers: c.Bool("layers"), }, } diff --git a/docker.go b/docker.go index c31a97d..db9b08c 100644 --- a/docker.go +++ b/docker.go @@ -45,6 +45,14 @@ type ( NoCache bool // Docker build no-cache AddHost []string // Docker build add-host Quiet bool // Docker build quiet + S3CacheDir string + S3Bucket string + S3Endpoint string + S3Region string + S3Key string + S3Secret string + S3UseSSL bool + Layers bool } // Plugin defines the Docker plugin parameters. @@ -190,6 +198,7 @@ func commandInfo() *exec.Cmd { func commandBuild(build Build) *exec.Cmd { args := []string{ "bud", + "--storage-driver", "vfs", "-f", build.Dockerfile, } @@ -223,6 +232,30 @@ func commandBuild(build Build) *exec.Cmd { if build.Quiet { args = append(args, "--quiet") } + if build.Layers { + args = append(args, "--layers=true") + if build.S3CacheDir != "" { + args = append(args, "--s3-local-cache-dir", build.S3CacheDir) + if build.S3Bucket != "" { + args = append(args, "--s3-bucket", build.S3Bucket) + } + if build.S3Endpoint != "" { + args = append(args, "--s3-endpoint", build.S3Endpoint) + } + if build.S3Region != "" { + args = append(args, "--s3-region", build.S3Region) + } + if build.S3Key != "" { + args = append(args, "--s3-key", build.S3Key) + } + if build.S3Secret != "" { + args = append(args, "--s3-secret", build.S3Secret) + } + if build.S3UseSSL { + args = append(args, "--s3-use-ssl=true") + } + } + } if build.AutoLabel { labelSchema := []string{ @@ -303,14 +336,14 @@ func commandTag(build Build, tag string) *exec.Cmd { target = fmt.Sprintf("%s:%s", build.Repo, tag) ) return exec.Command( - buildahExe, "tag", source, target, + buildahExe, "tag", "--storage-driver", "vfs", source, target, ) } // helper function to create the docker push command. func commandPush(build Build, tag string) *exec.Cmd { target := fmt.Sprintf("%s:%s", build.Repo, tag) - return exec.Command(buildahExe, "push", target) + return exec.Command(buildahExe, "push", "--storage-driver", "vfs", target) } // helper to check if args match "docker prune" @@ -324,7 +357,7 @@ func isCommandRmi(args []string) bool { } func commandRmi(tag string) *exec.Cmd { - return exec.Command(buildahExe, "rmi", tag) + return exec.Command(buildahExe, "--storage-driver", "vfs", "rmi", tag) } // trace writes each command to stdout with the command wrapped in an xml diff --git a/docker/docker/Dockerfile.linux.amd64 b/docker/docker/Dockerfile.linux.amd64 index fab76ef..b992d4e 100644 --- a/docker/docker/Dockerfile.linux.amd64 +++ b/docker/docker/Dockerfile.linux.amd64 @@ -1,22 +1,40 @@ -# Source for dockerfile: -# https://github.com/containers/buildah/blob/master/docs/tutorials/05-openshift-rootless-bud.md -FROM quay.io/buildah/stable:v1.14.8 +FROM fedora -RUN touch /etc/subgid /etc/subuid \ - && chmod g=u /etc/subgid /etc/subuid /etc/passwd \ - && echo build:10000:65536 > /etc/subuid \ - && echo build:10000:65536 > /etc/subgid +RUN dnf -y install \ + make \ + golang \ + bats \ + btrfs-progs-devel \ + device-mapper-devel \ + glib2-devel \ + gpgme-devel \ + libassuan-devel \ + libseccomp-devel \ + git \ + bzip2 \ + go-md2man \ + runc \ + containers-common \ + skopeo-containers -# Use chroot since the default runc does not work when running rootless -RUN echo "export BUILDAH_ISOLATION=chroot" >> /home/build/.bashrc +# Workaround - the first install somehow leaves the golang in a bad state +RUN dnf -y install golang -# Use VFS since fuse does not work -RUN mkdir -p /home/build/.config/containers \ - && echo "driver=\"vfs\"" > /home/build/.config/containers/storage.conf +RUN mkdir /root/buildah && \ + cd /root/buildah && \ + git clone https://github.com/harness/buildah.git ./src/github.com/containers/buildah + +RUN cd /root/buildah/src/github.com/containers/buildah && make && sudo make install + + + +FROM quay.io/buildah/stable:v1.23.0 USER build WORKDIR /home/build - +RUN export STORAGE_DRIVER=vfs # Add plugin binary ADD release/linux/amd64/drone-docker /bin/ -ENTRYPOINT ["/bin/drone-docker"] +COPY --from=0 /root/buildah/src/github.com/containers/buildah/bin/. /bin/ + +ENTRYPOINT ["/bin/drone-docker"] \ No newline at end of file diff --git a/docker/ecr/Dockerfile.linux.amd64 b/docker/ecr/Dockerfile.linux.amd64 index ce594b0..90cbbbc 100644 --- a/docker/ecr/Dockerfile.linux.amd64 +++ b/docker/ecr/Dockerfile.linux.amd64 @@ -1,21 +1,39 @@ -# Source for dockerfile: -# https://github.com/containers/buildah/blob/master/docs/tutorials/05-openshift-rootless-bud.md -FROM quay.io/buildah/stable:v1.14.8 +FROM fedora -RUN touch /etc/subgid /etc/subuid \ - && chmod g=u /etc/subgid /etc/subuid /etc/passwd \ - && echo build:10000:65536 > /etc/subuid \ - && echo build:10000:65536 > /etc/subgid +RUN dnf -y install \ + make \ + golang \ + bats \ + btrfs-progs-devel \ + device-mapper-devel \ + glib2-devel \ + gpgme-devel \ + libassuan-devel \ + libseccomp-devel \ + git \ + bzip2 \ + go-md2man \ + runc \ + containers-common \ + skopeo-containers -# Use chroot since the default runc does not work when running rootless -RUN echo "export BUILDAH_ISOLATION=chroot" >> /home/build/.bashrc +# Workaround - the first install somehow leaves the golang in a bad state +RUN dnf -y install golang -# Use VFS since fuse does not work -RUN mkdir -p /home/build/.config/containers \ - && echo "driver=\"vfs\"" > /home/build/.config/containers/storage.conf +RUN mkdir /root/buildah && \ + cd /root/buildah && \ + git clone https://github.com/harness/buildah.git ./src/github.com/containers/buildah + +RUN cd /root/buildah/src/github.com/containers/buildah && make && sudo make install + + + +FROM quay.io/buildah/stable:v1.23.0 USER build WORKDIR /home/build +RUN export STORAGE_DRIVER=vfs +COPY --from=0 /root/buildah/src/github.com/containers/buildah/bin/. /bin/ # Add plugin binary ADD release/linux/amd64/drone-docker /bin/ diff --git a/docker/gcr/Dockerfile.linux.amd64 b/docker/gcr/Dockerfile.linux.amd64 index f955954..21f3526 100644 --- a/docker/gcr/Dockerfile.linux.amd64 +++ b/docker/gcr/Dockerfile.linux.amd64 @@ -1,21 +1,39 @@ -# Source for dockerfile: -# https://github.com/containers/buildah/blob/master/docs/tutorials/05-openshift-rootless-bud.md -FROM quay.io/buildah/stable:v1.14.8 +FROM fedora -RUN touch /etc/subgid /etc/subuid \ - && chmod g=u /etc/subgid /etc/subuid /etc/passwd \ - && echo build:10000:65536 > /etc/subuid \ - && echo build:10000:65536 > /etc/subgid +RUN dnf -y install \ + make \ + golang \ + bats \ + btrfs-progs-devel \ + device-mapper-devel \ + glib2-devel \ + gpgme-devel \ + libassuan-devel \ + libseccomp-devel \ + git \ + bzip2 \ + go-md2man \ + runc \ + containers-common \ + skopeo-containers -# Use chroot since the default runc does not work when running rootless -RUN echo "export BUILDAH_ISOLATION=chroot" >> /home/build/.bashrc +# Workaround - the first install somehow leaves the golang in a bad state +RUN dnf -y install golang -# Use VFS since fuse does not work -RUN mkdir -p /home/build/.config/containers \ - && echo "driver=\"vfs\"" > /home/build/.config/containers/storage.conf +RUN mkdir /root/buildah && \ + cd /root/buildah && \ + git clone https://github.com/harness/buildah.git ./src/github.com/containers/buildah + +RUN cd /root/buildah/src/github.com/containers/buildah && make && sudo make install + + + +FROM quay.io/buildah/stable:v1.23.0 USER build WORKDIR /home/build +RUN export STORAGE_DRIVER=vfs +COPY --from=0 /root/buildah/src/github.com/containers/buildah/bin/. /bin/ # Add plugin binary ADD release/linux/amd64/drone-docker /bin/ diff --git a/docker/heroku/Dockerfile.linux.amd64 b/docker/heroku/Dockerfile.linux.amd64 index 8073e49..d338bfd 100644 --- a/docker/heroku/Dockerfile.linux.amd64 +++ b/docker/heroku/Dockerfile.linux.amd64 @@ -1,21 +1,39 @@ -# Source for dockerfile: -# https://github.com/containers/buildah/blob/master/docs/tutorials/05-openshift-rootless-bud.md -FROM quay.io/buildah/stable:v1.14.8 +FROM fedora -RUN touch /etc/subgid /etc/subuid \ - && chmod g=u /etc/subgid /etc/subuid /etc/passwd \ - && echo build:10000:65536 > /etc/subuid \ - && echo build:10000:65536 > /etc/subgid +RUN dnf -y install \ + make \ + golang \ + bats \ + btrfs-progs-devel \ + device-mapper-devel \ + glib2-devel \ + gpgme-devel \ + libassuan-devel \ + libseccomp-devel \ + git \ + bzip2 \ + go-md2man \ + runc \ + containers-common \ + skopeo-containers -# Use chroot since the default runc does not work when running rootless -RUN echo "export BUILDAH_ISOLATION=chroot" >> /home/build/.bashrc +# Workaround - the first install somehow leaves the golang in a bad state +RUN dnf -y install golang -# Use VFS since fuse does not work -RUN mkdir -p /home/build/.config/containers \ - && echo "driver=\"vfs\"" > /home/build/.config/containers/storage.conf +RUN mkdir /root/buildah && \ + cd /root/buildah && \ + git clone https://github.com/harness/buildah.git ./src/github.com/containers/buildah + +RUN cd /root/buildah/src/github.com/containers/buildah && make && sudo make install + + + +FROM quay.io/buildah/stable:v1.23.0 USER build WORKDIR /home/build +RUN export STORAGE_DRIVER=vfs +COPY --from=0 /root/buildah/src/github.com/containers/buildah/bin/. /bin/ # Add plugin binary ADD release/linux/amd64/drone-docker /bin/ diff --git a/scripts/build.sh b/scripts/build.sh index 655b8e8..e333c72 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -14,5 +14,4 @@ GOOS=linux GOARCH=amd64 go build -o release/linux/amd64/drone-gcr ./cmd/drone GOOS=linux GOARCH=amd64 go build -o release/linux/amd64/drone-ecr ./cmd/drone-ecr GOOS=linux GOARCH=amd64 go build -o release/linux/amd64/drone-docker ./cmd/drone-docker GOOS=linux GOARCH=amd64 go build -o release/linux/amd64/drone-acr ./cmd/drone-acr -GOOS=linux GOARCH=amd64 go build -o release/linux/amd64/drone-heroku ./cmd/drone-heroku - +GOOS=linux GOARCH=amd64 go build -o release/linux/amd64/drone-heroku ./cmd/drone-heroku \ No newline at end of file