docker

package module
v1.1.27 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 3, 2025 License: Apache-2.0 Imports: 23 Imported by: 4

README

drone-docker

Build Status Gitter chat Go Doc Go Report

Drone plugin uses Docker-in-Docker to build and publish Docker images to a container registry. For the usage information and a listing of the available options please take a look at the docs.

Updating Buildkit Version

If you want to update the buildkit version that is bundled with the plugin then update the version in the buildkit/version.json file and also run the following pipeline to upload the assets in the correct place: https://harness0.harness.io/ng/account/l7B_kbSEQD2wjrM7PShm5w/all/orgs/PROD/projects/CI/pipelines/Buildkit_Tarball_Uploader/pipeline-studio?storeType=INLINE

Build

buildkit/version.json is the source of truth for the buildkit version to be used for self hosted. Please update this to use a newer buildkit version

Run the release script for buildkit. Give the argument according to the infra you are compiling for

sh buildkit/release.sh linux/amd64

Build the binaries with the following commands:

export GOOS=linux
export GOARCH=amd64
export CGO_ENABLED=0
export GO111MODULE=on

go build -v -a -tags netgo -o release/linux/amd64/drone-docker ./cmd/drone-docker
go build -v -a -tags netgo -o release/linux/amd64/drone-gcr ./cmd/drone-gcr
go build -v -a -tags netgo -o release/linux/amd64/drone-ecr ./cmd/drone-ecr
go build -v -a -tags netgo -o release/linux/amd64/drone-acr ./cmd/drone-acr
go build -v -a -tags netgo -o release/linux/amd64/drone-heroku ./cmd/drone-heroku

Docker

Build the Docker images with the following commands:

docker build \
  --label org.label-schema.build-date=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \
  --label org.label-schema.vcs-ref=$(git rev-parse --short HEAD) \
  --file docker/docker/Dockerfile.linux.amd64 --tag plugins/docker .

docker build \
  --label org.label-schema.build-date=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \
  --label org.label-schema.vcs-ref=$(git rev-parse --short HEAD) \
  --file docker/gcr/Dockerfile.linux.amd64 --tag plugins/gcr .

docker build \
  --label org.label-schema.build-date=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \
  --label org.label-schema.vcs-ref=$(git rev-parse --short HEAD) \
  --file docker/ecr/Dockerfile.linux.amd64 --tag plugins/ecr .

docker build \
  --label org.label-schema.build-date=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \
  --label org.label-schema.vcs-ref=$(git rev-parse --short HEAD) \
  --file docker/acr/Dockerfile.linux.amd64 --tag plugins/acr .

docker build \
  --label org.label-schema.build-date=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \
  --label org.label-schema.vcs-ref=$(git rev-parse --short HEAD) \
  --file docker/heroku/Dockerfile.linux.amd64 --tag plugins/heroku .

Usage

Notice: Be aware that the Docker plugin currently requires privileged capabilities, otherwise the integrated Docker daemon is not able to start.

Using Docker buildkit Secrets
kind: pipeline
name: default

steps:
- name: build dummy docker file and publish
  image: plugins/docker
  pull: never
  settings:
    repo: tphoney/test
    tags: latest
    secret: id=mysecret,src=secret-file
    username:
      from_secret: docker_username
    password:
      from_secret: docker_password

Using a dockerfile that references the secret-file

# syntax=docker/dockerfile:1.2

FROM alpine

# shows secret from default secret location:
RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret

and a secret file called secret-file

COOL BANANAS
Running from the CLI
docker run --rm \
  -e PLUGIN_TAG=latest \
  -e PLUGIN_REPO=octocat/hello-world \
  -e DRONE_COMMIT_SHA=d8dbe4d94f15fe89232e0402c6e8a0ddf21af3ab \
  -v $(pwd):$(pwd) \
  -w $(pwd) \
  --privileged \
  plugins/docker --dry-run

Developer Notes

  • When updating the base image, you will need to update for each architecture and OS.
  • Arm32 base images are no longer being updated.

Release procedure

Run the changelog generator.

docker run -it --rm -v "$(pwd)":/usr/local/src/your-app githubchangeloggenerator/github-changelog-generator -u drone-plugins -p drone-docker -t <secret github token>

You can generate a token by logging into your GitHub account and going to Settings -> Personal access tokens.

Next we tag the PR's with the fixes or enhancements labels. If the PR does not fufil the requirements, do not add a label.

Run the changelog generator again with the future version according to semver.

docker run -it --rm -v "$(pwd)":/usr/local/src/your-app githubchangeloggenerator/github-changelog-generator -u drone-plugins -p drone-docker -t <secret token> --future-release v1.0.0

Create your pull request for the release. Get it merged then tag the release.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DefaultTagSuffix

func DefaultTagSuffix(ref, suffix string) ([]string, error)

DefaultTagSuffix returns a set of default suggested tags based on the commit ref with an attached suffix.

func DefaultTags

func DefaultTags(ref string) ([]string, error)

DefaultTags returns a set of default suggested tags based on the commit ref.

func Run

func Run()

func Tee added in v1.1.6

func Tee(w io.Writer) (*tee, <-chan string)

Tee creates a new tee instance that writes data to the provided io.Writer and sends copies of the written data to a status channel.

func UseDefaultTag

func UseDefaultTag(ref, defaultBranch string) bool

UseDefaultTag for keep only default branch for latest tag

Types

type Build

type Build struct {
	Remote                       string   // Git remote URL
	Name                         string   // Docker build using default named tag
	Dockerfile                   string   // Docker build Dockerfile
	Context                      string   // Docker build context
	Tags                         []string // Docker build tags
	Args                         []string // Docker build args
	ArgsEnv                      []string // Docker build args from env
	ArgsNew                      []string // Docker build args with comma seperated values
	IsMultipleBuildArgs          bool     // env variable for fall back
	Target                       string   // Docker build target
	Squash                       bool     // Docker build squash
	Pull                         bool     // Docker build pull
	CacheFrom                    []string // Docker buildx cache-from
	CacheTo                      []string // Docker buildx cache-to
	Compress                     bool     // Docker build compress
	Repo                         string   // Docker build repository
	LabelSchema                  []string // label-schema Label map
	AutoLabel                    bool     // auto-label bool
	Labels                       []string // Label map
	Link                         string   // Git repo link
	NoCache                      bool     // Docker build no-cache
	Secret                       string   // secret keypair
	SecretEnvs                   []string // Docker build secrets with env var as source
	SecretFiles                  []string // Docker build secrets with file as source
	AddHost                      []string // Docker build add-host
	Quiet                        bool     // Docker build quiet
	Platform                     string   // Docker build platform
	SSHAgentKey                  string   // Docker build ssh agent key
	SSHKeyPath                   string   // Docker build ssh key path
	BuildxLoad                   bool     // Docker buildx --load
	HarnessSelfHostedS3AccessKey string   // Harness self-hosted s3 access key
	HarnessSelfHostedS3SecretKey string   // Harness self-hosted s3 secret key
	HarnessSelfHostedGcpJsonKey  string   // Harness self hosted gcp json region
}

Build defines Docker build parameters.

type BuildKitConfig added in v1.1.23

type BuildKitConfig struct {
	BuildkitVersion string `json:"buildkit_version"`
}

type Builder

type Builder struct {
	Name                          string   // Buildx builder name
	DaemonConfig                  string   // Buildx daemon config file path
	Driver                        string   // Buildx driver type
	DriverOpts                    []string // Buildx driver opts
	DriverOptsNew                 []string // Buildx driver opts new
	RemoteConn                    string   // Buildx remote connection endpoint
	UseLoadedBuildkit             bool     // Use loaded buildkit or no
	AssestsDir                    string   // Assets directory
	BuildkitVersion               string   // Buildkit version
	BuildkitTLSHandshakeTimeout   string   // Buildkit TLS handshake timeout
	BuildkitResponseHeaderTimeout string   // Buildkit response header timeout
}

type CacheMetrics added in v1.1.6

type CacheMetrics struct {
	TotalLayers int                 `json:"total_layers"`
	Done        int                 `json:"done"`
	Cached      int                 `json:"cached"`
	Error       int                 `json:"error"`
	Canceled    int                 `json:"canceled"`
	Layers      map[int]LayerStatus `json:"layers"`
}

type Card

type Card []struct {
	ID             string        `json:"Id"`
	RepoTags       []string      `json:"RepoTags"`
	ParsedRepoTags []TagStruct   `json:"ParsedRepoTags"`
	RepoDigests    []interface{} `json:"RepoDigests"`
	Parent         string        `json:"Parent"`
	Comment        string        `json:"Comment"`
	Created        time.Time     `json:"Created"`
	Container      string        `json:"Container"`
	DockerVersion  string        `json:"DockerVersion"`
	Author         string        `json:"Author"`
	Architecture   string        `json:"Architecture"`
	Os             string        `json:"Os"`
	Size           int           `json:"Size"`
	VirtualSize    int           `json:"VirtualSize"`
	Metadata       struct {
		LastTagTime time.Time `json:"LastTagTime"`
	} `json:"Metadata"`
	SizeString        string
	VirtualSizeString string
	Time              string
	URL               string `json:"URL"`
}

type CustomStringSliceFlag

type CustomStringSliceFlag struct {
	Value []string
}

CustomStringSliceFlag is like a regular StringSlice flag but with semicolon as a delimiter

func (*CustomStringSliceFlag) GetValue

func (f *CustomStringSliceFlag) GetValue() []string

func (*CustomStringSliceFlag) Set

func (*CustomStringSliceFlag) String

func (f *CustomStringSliceFlag) String() string

type Daemon

type Daemon struct {
	Registry         string             // Docker registry
	Mirror           string             // Docker registry mirror
	Insecure         bool               // Docker daemon enable insecure registries
	StorageDriver    string             // Docker daemon storage driver
	StoragePath      string             // Docker daemon storage path
	Disabled         bool               // DOcker daemon is disabled (already running)
	Debug            bool               // Docker daemon started in debug mode
	Bip              string             // Docker daemon network bridge IP address
	DNS              []string           // Docker daemon dns server
	DNSSearch        []string           // Docker daemon dns search domain
	MTU              string             // Docker daemon mtu setting
	IPv6             bool               // Docker daemon IPv6 networking
	RegistryType     drone.RegistryType // Docker registry type
	ArtifactRegistry string             // Docker registry where artifact can be viewed
}

Daemon defines Docker daemon parameters.

type LayerStatus added in v1.1.6

type LayerStatus struct {
	Status string  `json:"status"`
	Time   float64 `json:"time"` // Time in seconds; only set for DONE layers
}

type Login

type Login struct {
	Registry    string // Docker registry address
	Username    string // Docker registry username
	Password    string // Docker registry password
	Email       string // Docker registry email
	Config      string // Docker Auth Config
	AccessToken string // External Access Token
}

Login defines Docker login parameters.

type Plugin

type Plugin struct {
	Login             Login   // Docker login configuration
	Build             Build   // Docker build configuration
	Builder           Builder // Docker Buildx builder configuration
	Daemon            Daemon  // Docker daemon configuration
	Dryrun            bool    // Docker push is skipped
	Cleanup           bool    // Docker purge is enabled
	CardPath          string  // Card path to write file to
	MetadataFile      string  // Location to write the metadata file
	ArtifactFile      string  // Artifact path to write file to
	CacheMetricsFile  string  // Location to write the cache metrics file
	BaseImageRegistry string  // Docker registry to pull base image
	BaseImageUsername string  // Docker registry username to pull base image
	BaseImagePassword string  // Docker registry password to pull base image
}

Plugin defines the Docker plugin parameters.

func (Plugin) Exec

func (p Plugin) Exec() error

Exec executes the plugin step

type TagStruct

type TagStruct struct {
	Tag string `json:"Tag"`
}

Directories

Path Synopsis
cmd
config

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL