fpm-dockery 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ad30556cb4aef21a9c240d15ef05370347bc9ab8
4
- data.tar.gz: 2ec29e04ad95788dc287b69dfa5cbe9e48ce52d3
3
+ metadata.gz: 07381f13b35eb3f6a98665256001b2821d3c00cf
4
+ data.tar.gz: 003bb31babdf01f1745dfd52fa83d863eb6d3fc7
5
5
  SHA512:
6
- metadata.gz: d26d74b4b10abd8dd3b4f0d75608f76acb80413a07586a8551fbb21e8ecbd487e2985380d739b3aa112c72376f867dc4438d52aa32fa9d6f86a14575343fc11d
7
- data.tar.gz: efd7e64c768bfd4d5cd461ba38951f1ff9f1f649fade53d13f736591a5894ebfa634d9308d16cc3268a65a1f4591625afda3f457403d2e4d1dbba0284074bb1f
6
+ metadata.gz: 60727d2485328174fa0d136978d59194a1578e64cda1142080e243e966e19cf616405106adb6916eedca45575584023ce0d28cdfd72d441db4f7f31c7d91c675
7
+ data.tar.gz: ca169f343ca419af204f8da74f54386882f4edefa0e300336d00206067896a11b26c23de42560ee0dd2ce61e9e310dc436c393d369e034a260f2820547882d33
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.8
4
+
5
+ * Added support for supplying extra Docker parameters to the build with `--docker-params`. [@randomvariable](https://github.com/randomvariable)
6
+ * Added support for Centos 6, Centos 7, Ubuntu 15.04. [@randomvariable](https://github.com/randomvariable)
7
+
3
8
  ## 0.1.7
4
9
 
5
10
  * Add the ability to have a local cache dir. [@lloydpick](https://github.com/lloydpick)
data/README.md CHANGED
@@ -4,9 +4,9 @@ Build [fpm-cookery](https://github.com/forward3d/fpm-cookery) recipes with Docke
4
4
 
5
5
  ## What is this?
6
6
 
7
- This is a terribly-named wrapper around [fpm-cookery](https://github.com/forward3d/fpm-cookery)
8
- that allows you to run fpm-cookery builds inside a container. I wrote this to allow me to run package builds
9
- in development on my laptop in the same way that Jenkins runs them, and to allow easy building of packages
7
+ This is a terribly-named wrapper around [fpm-cookery](https://github.com/forward3d/fpm-cookery)
8
+ that allows you to run fpm-cookery builds inside a container. I wrote this to allow me to run package builds
9
+ in development on my laptop in the same way that Jenkins runs them, and to allow easy building of packages
10
10
  for a variety of Linux distributions.
11
11
 
12
12
  ## Why would you use this?
@@ -15,9 +15,9 @@ If you are building your own operating system packages, you should be running th
15
15
  environment every time. fpm-cookery is a superb tool for expressing the process of building and packaging
16
16
  using fpm, but it provides no real functionality for working in a clean environment.
17
17
 
18
- With the advent of [Docker](https://www.docker.com/), it is fast and easy to bring up an isolated
19
- environment (a container) to perform the package building in. It also allows your CI server to perform
20
- a very simple invocation to build packages (`fpm-dockery build recipe.rb ubuntu12.04`), and allows you
18
+ With the advent of [Docker](https://www.docker.com/), it is fast and easy to bring up an isolated
19
+ environment (a container) to perform the package building in. It also allows your CI server to perform
20
+ a very simple invocation to build packages (`fpm-dockery build recipe.rb ubuntu12.04`), and allows you
21
21
  to run the same build on your development machine in the same way.
22
22
 
23
23
  If a build fails, you can easily re-run the container and be dropped into the state where the build failed.
@@ -25,10 +25,10 @@ This makes it very easy to troubleshoot why a build is failing.
25
25
 
26
26
  ## How does it work?
27
27
 
28
- `fpm-dockery` has the notion of 'builder' images. These are specially prepared Docker images that
28
+ `fpm-dockery` has the notion of 'builder' images. These are specially prepared Docker images that
29
29
  contain enough tooling to get `fpm-cookery` working, along with `fpm-cookery` itself.
30
30
 
31
- You can see the Dockerfiles used to generate these images in the
31
+ You can see the Dockerfiles used to generate these images in the
32
32
  [`docker` directory](https://github.com/andytinycat/fpm-dockery/tree/master/docker) of this
33
33
  repository.
34
34
 
@@ -70,16 +70,16 @@ Once you've installed it, you will have access to the `fpm-dockery` command line
70
70
  $ bin/fpm-dockery --help
71
71
  Usage:
72
72
  fpm-dockery [OPTIONS] SUBCOMMAND [ARG] ...
73
-
73
+
74
74
  Parameters:
75
75
  SUBCOMMAND subcommand
76
76
  [ARG] ... subcommand arguments
77
-
77
+
78
78
  Subcommands:
79
79
  create-builder-image Build one of the fpm-dockery Docker 'builder' images
80
80
  package Run fpm-cookery in a Docker container to produce a package
81
81
  list-builders List available builders
82
-
82
+
83
83
  Options:
84
84
  -h, --help print help
85
85
 
@@ -90,7 +90,7 @@ optional argument:
90
90
 
91
91
  fpm-dockery package PATH_TO_RECIPE BUILDER [PACKAGE_DIR]
92
92
 
93
- The builder is one of the supported builder images. If the builder image does not exist on the
93
+ The builder is one of the supported builder images. If the builder image does not exist on the
94
94
  system where Docker is running, it will be automatically created first. The packages will be
95
95
  created in `PATH_TO_RECIPE/pkg`.
96
96
 
@@ -103,7 +103,7 @@ argument `PACKAGE_DIR`:
103
103
 
104
104
  fpm-dockery package example_recipe/recipe.rb ubuntu12.04 /tmp/somedir
105
105
 
106
- If you're building a package from git source, and you're using a private repository
106
+ If you're building a package from git source, and you're using a private repository
107
107
  (on GitHub or BitBucket or wherever), you can supply an SSH private key to build with.
108
108
  The private key __must have no passphrase__. For reasons of security, it would be wise
109
109
  to create a keypair just for your package builds, and give it only read access to the repository.
@@ -118,6 +118,12 @@ If you'd like to make fpm-cookery skip the packaging step, supply the `--skip-pa
118
118
 
119
119
  fpm-dockery package --skip-package example_recipe/recipe.rb ubuntu12.04
120
120
 
121
+ If you'd like to supply more docker run parameters, for example environment variables, supply the `--docker-params` option:
122
+
123
+ fpm-dockery package --docker-params "-e PKG_VER=2.0" example_recipe/recipe.rb ubuntu12.04
124
+
125
+
126
+
121
127
  ### Viewing available builders
122
128
 
123
129
  To see the available builders, run:
@@ -156,8 +162,8 @@ some unpleasant homegrown scripts at [Forward3D](https://github.com/forward3d),
156
162
 
157
163
  ## Acknowledgements
158
164
 
159
- Thanks to [@bernd](https://github.com/bernd) for creating fpm-cookery, and [@sissel](https://github.com/jordansissel)
165
+ Thanks to [@bernd](https://github.com/bernd) for creating fpm-cookery, and [@sissel](https://github.com/jordansissel)
160
166
  for creating FPM, without which life would be less pleasant.
161
167
 
162
- I also used the Redis example recipe from @bernd's repository and placed it in this repository so it can be used
168
+ I also used the Redis example recipe from @bernd's repository and placed it in this repository so it can be used
163
169
  for a quick proof-of-concept.
@@ -0,0 +1,45 @@
1
+ FROM centos:6
2
+
3
+ RUN yum -y update
4
+
5
+ # Additional tooling
6
+ RUN yum install -y git
7
+ RUN yum install -y curl
8
+ RUN yum install -y mercurial
9
+ RUN yum install -y subversion
10
+ RUN yum install -y unzip
11
+ RUN yum install -y tar
12
+
13
+ # Build tools
14
+ RUN yum install -y gcc
15
+ RUN yum install -y gcc-c++
16
+ RUN yum install -y glibc-devel
17
+ RUN yum install -y make
18
+ RUN yum install -y rpm-build
19
+
20
+ # Ruby dependencies
21
+ RUN yum install -y openssl-devel
22
+ RUN yum install -y readline-devel
23
+ RUN yum install -y zlib-devel
24
+
25
+ # Install Ruby via rbenv
26
+ RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
27
+ RUN echo 'export PATH="/root/.rbenv/bin:$PATH"' >> /etc/profile.d/rbenv
28
+ ENV PATH /root/.rbenv/bin:$PATH
29
+ RUN git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
30
+ RUN source /etc/profile
31
+ RUN rbenv install 2.1.5
32
+ ENV PATH /root/.rbenv/versions/2.1.5/bin:$PATH
33
+
34
+ # Update rubygems and don't install docs
35
+ RUN gem update --system --verbose
36
+ RUN echo "gem: --no-document" >> ~/.gemrc
37
+
38
+ # Install fpm-cookery
39
+ RUN gem install fpm-cookery -v 0.27.0
40
+
41
+ # Remove strict host key checking for SSH
42
+ RUN echo 'StrictHostKeyChecking no' >> /etc/ssh/ssh_config
43
+
44
+ # Set an entry point to simplify command execution
45
+ ENTRYPOINT ["/root/.rbenv/versions/2.1.5/bin/fpm-cook"]
@@ -0,0 +1,45 @@
1
+ FROM centos:7
2
+
3
+ RUN yum -y update
4
+
5
+ # Additional tooling
6
+ RUN yum install -y git
7
+ RUN yum install -y curl
8
+ RUN yum install -y mercurial
9
+ RUN yum install -y subversion
10
+ RUN yum install -y unzip
11
+ RUN yum install -y tar
12
+
13
+ # Build tools
14
+ RUN yum install -y gcc
15
+ RUN yum install -y gcc-c++
16
+ RUN yum install -y glibc-devel
17
+ RUN yum install -y make
18
+ RUN yum install -y rpm-build
19
+
20
+ # Ruby dependencies
21
+ RUN yum install -y openssl-devel
22
+ RUN yum install -y readline-devel
23
+ RUN yum install -y zlib-devel
24
+
25
+ # Install Ruby via rbenv
26
+ RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
27
+ RUN echo 'export PATH="/root/.rbenv/bin:$PATH"' >> /etc/profile.d/rbenv
28
+ ENV PATH /root/.rbenv/bin:$PATH
29
+ RUN git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
30
+ RUN source /etc/profile
31
+ RUN rbenv install 2.1.5
32
+ ENV PATH /root/.rbenv/versions/2.1.5/bin:$PATH
33
+
34
+ # Update rubygems and don't install docs
35
+ RUN gem update --system --verbose
36
+ RUN echo "gem: --no-document" >> ~/.gemrc
37
+
38
+ # Install fpm-cookery
39
+ RUN gem install fpm-cookery -v 0.27.0
40
+
41
+ # Remove strict host key checking for SSH
42
+ RUN echo 'StrictHostKeyChecking no' >> /etc/ssh/ssh_config
43
+
44
+ # Set an entry point to simplify command execution
45
+ ENTRYPOINT ["/root/.rbenv/versions/2.1.5/bin/fpm-cook"]
@@ -0,0 +1,33 @@
1
+ FROM ubuntu:15.04
2
+
3
+ RUN apt-get update
4
+
5
+ # Additional tooling
6
+ RUN apt-get install -y git
7
+ RUN apt-get install -y curl
8
+ RUN apt-get install -y mercurial
9
+ RUN apt-get install -y subversion
10
+ RUN apt-get install -y unzip
11
+
12
+ # Build tools
13
+ RUN apt-get install -y build-essential
14
+
15
+ # Install Ruby from Brightbox's PPA
16
+ RUN apt-get -y install software-properties-common
17
+ RUN apt-add-repository ppa:brightbox/ruby-ng
18
+ RUN apt-get update
19
+ RUN apt-get -y install ruby2.1
20
+ RUN apt-get -y install ruby2.1-dev
21
+
22
+ # Update rubygems and don't install docs
23
+ RUN gem update --system --verbose
24
+ RUN echo "gem: --no-document" >> ~/.gemrc
25
+
26
+ # Install fpm-cookery
27
+ RUN gem install fpm-cookery -v 0.27.0
28
+
29
+ # Remove strict host key checking for SSH
30
+ RUN echo 'StrictHostKeyChecking no' >> /etc/ssh/ssh_config
31
+
32
+ # Set an entry point to simplify command execution
33
+ ENTRYPOINT ["/usr/local/bin/fpm-cook"]
@@ -3,17 +3,17 @@ require 'optparse'
3
3
  module FPM
4
4
  module Dockery
5
5
  class CLI < Clamp::Command
6
-
6
+
7
7
  class BaseCommand < Clamp::Command
8
8
  include Logging
9
9
  include Utils
10
-
10
+
11
11
  # List all valid builders by listing the Dockerfile.* files in
12
12
  # the docker directory.
13
13
  def valid_builders
14
14
  Dir.glob("#{FPM::Dockery.root}/docker/Dockerfile.*").map {|f| File.basename(f.gsub('Dockerfile.', ''))}
15
15
  end
16
-
16
+
17
17
  # Check the builder is one we have a Dockerfile for.
18
18
  def validate_builder!
19
19
  unless valid_builders.include?(builder)
@@ -21,7 +21,7 @@ module FPM
21
21
  exit 1
22
22
  end
23
23
  end
24
-
24
+
25
25
  # Create a builder image if it doesn't exist.
26
26
  def create_builder_if_required
27
27
  image_check = Subprocess.run("docker images | awk '{print $1}' | grep fpm-dockery/#{builder}")
@@ -30,7 +30,7 @@ module FPM
30
30
  create_builder(false)
31
31
  end
32
32
  end
33
-
33
+
34
34
  # Create a builder image.
35
35
  def create_builder(no_cache)
36
36
  validate_builder!
@@ -43,24 +43,24 @@ module FPM
43
43
  exit exit_status.exitstatus
44
44
  end
45
45
  end
46
-
46
+
47
47
  end
48
-
48
+
49
49
  class ListBuildersCommand < BaseCommand
50
50
  def execute
51
51
  puts valid_builders.join("\n")
52
52
  end
53
53
  end
54
-
54
+
55
55
  class CreateBuilderImage < BaseCommand
56
56
  parameter "BUILDER", "Type of builder image to build"
57
57
  option "--no-cache", :flag, "Build without cache"
58
-
58
+
59
59
  def execute
60
60
  create_builder(no_cache?)
61
61
  end
62
62
  end
63
-
63
+
64
64
  # The package command implementation.
65
65
  class PackageCommand < BaseCommand
66
66
  parameter "RECIPE", "fpm-cookery recipe to build"
@@ -69,25 +69,28 @@ module FPM
69
69
  option "--skip-package", :flag, "Skip package building (identical to fpm-cook --skip-package)"
70
70
  option "--private-key", "PRIVATE_KEY", "Private key to use with SSH (for example, when cloning private Git repositories)"
71
71
  option "--local-cache-dir", "DIR", "Local cache directory to use (useful if you are working with large source files)"
72
+ option "--docker-params", "DOCKER_PARAMS", "Extra Docker run parameters"
72
73
 
73
74
  def execute
74
75
  recipe_path = File.expand_path(recipe)
75
76
  dir_to_mount = File.dirname(recipe_path)
76
77
  name_of_recipe = File.basename(recipe_path)
77
-
78
+
78
79
  validate_builder!
79
80
  create_builder_if_required
80
-
81
+
81
82
  extra_docker_commands = []
82
83
  extra_fpm_cook_commands = []
83
-
84
+
84
85
  pkg_dir = "/recipe/pkg"
85
-
86
+
86
87
  if package_dir
87
88
  extra_docker_commands << "-v #{File.expand_path(package_dir)}:/output"
88
89
  pkg_dir = "/output"
89
90
  end
90
-
91
+
92
+ extra_docker_commands << docker_params if docker_params
93
+
91
94
  if private_key
92
95
  begin
93
96
  key = IO.read(File.expand_path(private_key))
@@ -109,7 +112,7 @@ module FPM
109
112
  if skip_package?
110
113
  extra_fpm_cook_commands << "--skip-package"
111
114
  end
112
-
115
+
113
116
  command = <<eos
114
117
  docker run \
115
118
  -v #{dir_to_mount}:/recipe \
@@ -130,13 +133,13 @@ eos
130
133
  exit exit_status.exitstatus
131
134
  end
132
135
  end
133
-
136
+
134
137
  end
135
-
136
- subcommand "create-builder-image", "Build one of the fpm-dockery Docker 'builder' images", CreateBuilderImage
138
+
139
+ subcommand "create-builder-image", "Build one of the fpm-dockery Docker 'builder' images", CreateBuilderImage
137
140
  subcommand "package", "Run fpm-cookery in a Docker container to produce a package", PackageCommand
138
141
  subcommand "list-builders", "List available builders", ListBuildersCommand
139
-
142
+
140
143
  end
141
144
  end
142
- end
145
+ end
@@ -1,5 +1,5 @@
1
1
  module FPM
2
2
  module Dockery
3
- VERSION = "0.1.7"
3
+ VERSION = "0.1.8"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fpm-dockery
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Sykes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-10 00:00:00.000000000 Z
11
+ date: 2015-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
@@ -70,8 +70,11 @@ files:
70
70
  - README.md
71
71
  - Rakefile
72
72
  - bin/fpm-dockery
73
+ - docker/Dockerfile.centos6
74
+ - docker/Dockerfile.centos7
73
75
  - docker/Dockerfile.ubuntu12.04
74
76
  - docker/Dockerfile.ubuntu14.04
77
+ - docker/Dockerfile.ubuntu15.04
75
78
  - example_recipe/recipe.rb
76
79
  - example_recipe/redis-server.init.d
77
80
  - fpm-dockery.gemspec