docker

package module
v0.0.0-...-a807dc9 Latest Latest
Warning

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

Go to latest
Published: Mar 6, 2024 License: Apache-2.0 Imports: 17 Imported by: 2

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
go build -v -a -tags netgo -o release/linux/amd64/drone-gar ./cmd/drone-gar

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 .
  
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/gar/Dockerfile.linux.amd64 --tag plugins/gar .

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
GAR (Google Artifact Registry)
kind: pipeline
name: default
type: docker

steps:
  - name: push-to-gar
    image: plugins/gar
    pull: never
    settings:
      tag: latest
      repo: project-id/repo/image-name
      location: us
      json_key:
        from_secret: gcr_json_key
GAR (Google Artifact Registry) using workload identity (OIDC)
steps:
  - name: push-to-gar
    image: plugins/gar
    pull: never
    settings:
      tag: latest
      repo: project-id/repo/image-name
      location: europe
      project_number: project-number
      pool_id: workload identity pool id
      provider_id: workload identity provider id
      service_account_email: service account email
      oidc_token_id:
        from_secret: token 

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 GetDroneDockerExecCmd

func GetDroneDockerExecCmd() string

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
	TempTag     string   // Temporary tag used during docker build
	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 build cache-from
	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
}

Build defines Docker build parameters.

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 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
	Experimental  bool               // Docker daemon enable experimental mode
	RegistryType  drone.RegistryType // Docker registry type
}

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
	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
	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
internal
gcp

Jump to

Keyboard shortcuts

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