Нет описания
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
Tyler Cipriani bb85ebc796 blubber.yaml: Bump pipeline version 1 месяц назад
.pipeline blubber.yaml: Bump pipeline version 1 месяц назад
api/openapi-spec Bump config version to v4 2 месяцев назад
build Remove support for `sharedvolume` configuration 11 месяцев назад
cmd Bump config version to v4 2 месяцев назад
config Unit tests: PosOf InsertElement 2 месяцев назад
docker Bump config version to v4 2 месяцев назад
docs Tweaked logo to play nice with preview renderer on commons 8 месяцев назад
meta Capture and expose build-time meta data 1 год назад
scripts Provide OpenAPI spec for Blubberoid 9 месяцев назад
vendor Update go-playground validator 3 месяцев назад
.gitignore Use JSON as canonical config format 9 месяцев назад
.gitreview Add .gitreview file 1 год назад
CONTRIBUTING.md Include a basic go.mod that declares the package name 6 месяцев назад
Gopkg.lock Update go-playground validator 3 месяцев назад
Gopkg.toml Update go-playground validator 3 месяцев назад
LICENSE Add Apache License 2.0 2 лет назад
Makefile Make test: add coverage output 2 месяцев назад
README.md Bump config version to v4 2 месяцев назад
VERSION Bump config version to v4 2 месяцев назад
blubber.example.yaml Bump config version to v4 2 месяцев назад
go.mod Include a basic go.mod that declares the package name 6 месяцев назад
policy.example.yaml Update go-playground validator 3 месяцев назад

README.md

Blubber

Very experimental proof of concept.

Blubber is a highly opinionated abstraction for container build configurations and a command-line compiler which currently supports outputting multi-stage Dockerfiles. It aims to provide a handful of declarative constructs that accomplish build configuration in a more secure and determinate way than running ad-hoc commands.

Example configuration

version: v4
base: debian:jessie
apt:
  packages: [libjpeg, libyaml]
lives:
  in: /srv/service
runs:
  environment:
    FOO: bar
    BAR: baz

variants:
  build:
    apt:
      packages: [libjpeg-dev, libyaml-dev]
    node:
      requirements: [package.json, package-lock.json]
    copies: [local]

  development:
    includes: [build]

  test:
    includes: [build]
    apt:
      packages: [chromium]
    entrypoint: [npm, test]

  prep:
    includes: [build]
    node:
      env: production

  production:
    base: debian:jessie-slim
    node:
      env: production
    copies: [prep]
    entrypoint: [node, server.js]

Variants

Blubber supports a concept of composeable configuration variants for defining slightly different container images while still maintaining a sufficient degree of parity between them. For example, images for development and testing may require some development and debugging packages which you wouldn’t want in production lest they contain vulnerabilities and somehow end up linked or included in the application runtime.

Properties declared at the top level are shared among all variants unless redefined, and one variant can include the properties of others. Some properties, like apt:packages are combined when inherited or included.

In the example configuration, the test variant when expanded effectively becomes:

version: v4
base: debian:jessie
apt:
  packages: [libjpeg, libyaml, libjpeg-dev, libyaml-dev, chromium]
node:
  dependencies: true
runs:
  in: /srv/service
  as: runuser
  uid: 666
  gid: 666
entrypoint: [npm, test]

Artifacts

When trying to ensure optimally sized Docker images for production, there’s a common pattern that has emerged which is essentially to use one image for building an application and copying the resulting build artifacts to another much more optimized image, using the latter for production.

The Docker community has responded to this need by implementing multi-stage builds and Blubber makes use of this with its copies configuration property.

In the example configuration, the production variant declares artifacts to be copied over from the result of building the prep image.

Usage

Running the blubber command will be produce Dockerfile output for the given variant.

blubber config.yaml variant

You can see the result of the example configuration by cloning this repo and running (assuming you have go):

make
./bin/blubber blubber blubber.example.yaml development
./bin/blubber blubber blubber.example.yaml test
./bin/blubber blubber blubber.example.yaml production

Contribution

If you’d like to make code contributions to Blubber, see CONTRIBUTING.md.