docker

package module
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Nov 21, 2023 License: Apache-2.0 Imports: 18 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.

Build

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 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
	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
}

Build defines Docker build parameters.

type Builder

type Builder struct {
	Name       string   // Buildx builder name
	Driver     string   // Buildx driver type
	DriverOpts []string // Buildx driver opts
	RemoteConn string   // Buildx remote connection endpoint
}

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 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
}

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

Jump to

Keyboard shortcuts

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