Docker 插件

Docker插件可用于构建镜像并将其发布到Docker注册表。以下流水线配置使用Docker插件来构建和发布Docker镜像:

pipeline:
  docker:
    image: plugins/docker
    settings:
      username: kevinbacon
      password: pa55word
      repo: foo/bar
      tags: latest

使用多个标签的配置示例:

pipeline:
  docker:
    image: plugins/docker
    settings:
      username: kevinbacon
      password: pa55word
      repo: foo/bar
      tags:
        - latest
        - '1.0.1'
        - '1.0'

使用`.tags'文件(逗号分隔的标记列表)的配置示例:

pipeline:
  build:
    image: golang
    commands:
      - go build
      - go test
      - echo -n "5.2.6,5.2.4" > .tags

  docker:  
    image: plugins/docker
    settings:
      username: kevinbacon
      password: pa55word
      repo: foo/bar

使用构建参数的示例配置:

pipeline:
  docker:
    image: plugins/docker
    settings:
      username: kevinbacon
      password: pa55word
      repo: foo/bar
      build_args:
        - HTTP_PROXY=http://yourproxy.com

将机密作为构建参数传递的配置示例:

pipeline:
  build-image:
    image: plugins/docker
    settings:
      username: kevinbacon
      password: pa55word
      repo: foo/bar
      build_args_from_env:
        - TOKEN
    secrets:
      - source: env_token
        target: token

使用备用Dockerfile的配置示例:

pipeline:
  docker:  
    image: plugins/docker
    settings:
      username: kevinbacon
      password: pa55word
      repo: foo/bar
      dockerfile: path/to/Dockerfile

使用自定义注册表的配置示例:

pipeline:
  docker:
    image: plugins/docker
    settings:
      username: kevinbacon
      password: pa55word
      repo: index.company.com/foo/bar
      registry: index.company.com

使用内联凭据的配置示例:

pipeline:
  docker:
    image: plugins/docker
    settings:
      username: kevinbacon
      password: pa55word
      repo: foo/bar

使用机密凭据的配置示例:

pipeline:
  docker: 
    image: plugins/docker
    settings:
      repo: foo/bar
      username:
        from_secret: docker_username
      password:
        from_secret: docker_password

自动标记

Docker插件可以配置为自动标记您的镜像。当启用此功能并且事件类型为标记时,插件将使用标准的主要、次要发布约定自动标记镜像。例如:

  • 1.0.0生成docker标记11.01.0.0
  • 1.0.0-rc.1生成docker标记1.0.0-rc.1

当事件类型为推送并且目标分支为默认分支(例如master)时,插件会自动将镜像标记为“最新”。忽略所有其他事件类型和分支。

配置示例:

pipeline:
  docker:
    image: plugins/docker
    settings:
      repo: foo/bar
      auto_tag: true
      username: kevinbacon
      password: pa55word

带有标记后缀的配置示例:

pipeline:
  docker:
    image: plugins/docker
    settings:
      repo: foo/bar
      auto_tag: true
      auto_tag_suffix: linux-amd64
      username: kevinbacon
      password: pa55word

请注意,自动标记是故意简单和固执己见。我们现在不接受拉取请求,以进一步自定义逻辑。

多阶段构建

Docker插件允许在“Dockerfile”中定义的特定阶段停止构建,如官方文档open in new window中所述。 如果没有定义“target”属性,Docker插件将不会在任何阶段停止并构建完整的Docker镜像。

使用类似“Dockerfile”的文件:

FROM golang as builder
WORKSPACE /go/src/github.com/foo/bar
RUN CGO_ENABLED=0 GOOS=linux go build -o demo main.go

FROM scratch as production
COPY --from=builder /go/src/github.com/foo/bar/demo .
CMD ["./demo"]

FROM alpine as debug
COPY --from=builder /go/src/github.com/foo/bar/demo .
CMD ["./demo"]

允许为生产构建docker镜像的示例配置:

pipeline:
  docker: 
    image: plugins/docker
    settings:
      repo: foo/bar
      target: production
      username: kevinbacon
      password: pa55word

这个将构建调试docker镜像

pipeline:
  docker:  
    image: plugins/docker
    settings:
      repo: foo/bar
      target: debug
      username: kevinbacon
      password: pa55word

参数介绍

registry : 对此注册表进行身份验证

username : 使用此用户名进行身份验证

password : 使用此密码进行身份验证

repo : 镜像的存储库名称

tags : 镜像的存储库标记

dockerfile : 要使用的dockerfile的路径,默认为dockerfile

dry_run : 布尔值 如果为true在末尾推送docker镜像

purge : 布尔值 如果为true在最后清理docker镜像

context : 要使用的上下文路径,默认为git repo的根目录

target : 要使用的构建目标,必须在docker文件中定义

force_tag=false : 替换现有匹配的镜像标记

insecure=false : 启用与该注册表的不安全通信

mirror : 使用一个镜像注册表,而不是直接从central Hub中提取镜像

bip=false : 用于传递桥接IP

custom_dns : 为容器设置自定义dns服务器

custom_dns_search : docker守护进程dns搜索域

storage_driver : 支持“aufs”、“overlay”或“vfs”驱动程序

storage_path : docker守护程序存储路径

build_args : 向docker build传递自定义参数

build_args_from_env : 将envvars作为自定义参数传递给docker build

auto_tag=false : 基于git分支和git标记自动生成标记名

auto_tag_suffix : 用这个后缀生成标签名

debug, launch_debug : 在详细调试模式下启动docker守护程序

mtu : docker守护进程的自定义mtu设置

ipv6 : docker守护进程的IPv6网络

experimental : docker守护进程的实验模式

daemon_off : 不启动docker守护进程

cache_from : 要视为缓存源的镜像

squash : 在构建时压扁各层

pull_image : 在构建时强制拉动基本镜像

compress : 使用gzip压缩构建环境

custom_labels : 附加k=v标签

label_schema : 标签模式的标签

email : docker电子邮件

no_cache : 不使用缓存的中间容器

add_host : 附加主机:IP映射