Add build args
This commit is contained in:
22
README.md
22
README.md
@@ -146,6 +146,28 @@ builder:
|
||||
multiarch: false
|
||||
```
|
||||
|
||||
### Configuring build args for new images
|
||||
|
||||
Some images might need an argument passed in during build time, like a GITHUB_TOKEN to give access to private gem repositories. This can be done like so:
|
||||
|
||||
```yaml
|
||||
builder:
|
||||
args:
|
||||
GITHUB_TOKEN: <create-a-new-token-from-github>
|
||||
```
|
||||
|
||||
This build arg can then be used in the Dockerfile:
|
||||
|
||||
```
|
||||
# Private repositories need an access token during the build
|
||||
ARG GITHUB_TOKEN
|
||||
ENV BUNDLE_GITHUB__COM=x-access-token:$GITHUB_TOKEN
|
||||
|
||||
# Install application gems
|
||||
COPY Gemfile Gemfile.lock ./
|
||||
RUN bundle install
|
||||
```
|
||||
|
||||
## Commands
|
||||
|
||||
### Remote execution
|
||||
|
||||
@@ -10,14 +10,12 @@ class Mrsk::Commands::Builder < Mrsk::Commands::Base
|
||||
|
||||
def target
|
||||
case
|
||||
when config.builder.nil?
|
||||
multiarch
|
||||
when config.builder["multiarch"] == false
|
||||
when config.builder && config.builder["multiarch"] == false
|
||||
native
|
||||
when config.builder["local"] && config.builder["remote"]
|
||||
when config.builder && config.builder["local"] && config.builder["remote"]
|
||||
multiarch_remote
|
||||
else
|
||||
raise ArgumentError, "Builder configuration incorrect: #{config.builder.inspect}"
|
||||
multiarch
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
18
lib/mrsk/commands/builder/base.rb
Normal file
18
lib/mrsk/commands/builder/base.rb
Normal file
@@ -0,0 +1,18 @@
|
||||
require "mrsk/commands/base"
|
||||
|
||||
class Mrsk::Commands::Builder::Base < Mrsk::Commands::Base
|
||||
delegate :argumentize, to: Mrsk::Configuration
|
||||
|
||||
def pull
|
||||
docker :pull, config.absolute_image
|
||||
end
|
||||
|
||||
def build_args
|
||||
argumentize "--build-args", args
|
||||
end
|
||||
|
||||
private
|
||||
def args
|
||||
config.builder["args"] || {}
|
||||
end
|
||||
end
|
||||
@@ -1,6 +1,6 @@
|
||||
require "mrsk/commands/base"
|
||||
require "mrsk/commands/builder/base"
|
||||
|
||||
class Mrsk::Commands::Builder::Multiarch < Mrsk::Commands::Base
|
||||
class Mrsk::Commands::Builder::Multiarch < Mrsk::Commands::Builder::Base
|
||||
def create
|
||||
docker :buildx, :create, "--use", "--name", builder_name
|
||||
end
|
||||
@@ -10,11 +10,7 @@ class Mrsk::Commands::Builder::Multiarch < Mrsk::Commands::Base
|
||||
end
|
||||
|
||||
def push
|
||||
docker :buildx, :build, "--push", "--platform linux/amd64,linux/arm64", "-t", config.absolute_image, "."
|
||||
end
|
||||
|
||||
def pull
|
||||
docker :pull, config.absolute_image
|
||||
docker :buildx, :build, "--push", "--platform linux/amd64,linux/arm64", "-t", config.absolute_image, *build_args, "."
|
||||
end
|
||||
|
||||
def info
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require "mrsk/commands/base"
|
||||
require "mrsk/commands/builder/base"
|
||||
|
||||
class Mrsk::Commands::Builder::Native < Mrsk::Commands::Base
|
||||
class Mrsk::Commands::Builder::Native < Mrsk::Commands::Builder::Base
|
||||
def create
|
||||
# No-op on native
|
||||
end
|
||||
@@ -11,14 +11,10 @@ class Mrsk::Commands::Builder::Native < Mrsk::Commands::Base
|
||||
|
||||
def push
|
||||
combine \
|
||||
docker(:build, "-t", config.absolute_image, "."),
|
||||
docker(:build, "-t", *build_args, config.absolute_image, "."),
|
||||
docker(:push, config.absolute_image)
|
||||
end
|
||||
|
||||
def pull
|
||||
docker :pull, config.absolute_image
|
||||
end
|
||||
|
||||
def info
|
||||
# No-op on native
|
||||
end
|
||||
|
||||
@@ -21,4 +21,19 @@ class BuilderCommandTest < ActiveSupport::TestCase
|
||||
builder = Mrsk::Commands::Builder.new(Mrsk::Configuration.new(@config.merge({ builder: { "local" => { }, "remote" => { } } })))
|
||||
assert builder.remote?
|
||||
end
|
||||
|
||||
test "build args" do
|
||||
builder = Mrsk::Commands::Builder.new(Mrsk::Configuration.new(@config.merge({ builder: { "args" => { "a" => 1, "b" => 2 } } })))
|
||||
assert_equal [ "--build-args", "a=1", "--build-args", "b=2" ], builder.target.build_args
|
||||
end
|
||||
|
||||
test "native push with build args" do
|
||||
builder = Mrsk::Commands::Builder.new(Mrsk::Configuration.new(@config.merge({ builder: { "multiarch" => false, "args" => { "a" => 1, "b" => 2 } } })))
|
||||
assert_equal [ :docker, :build, "-t", "--build-args", "a=1", "--build-args", "b=2", "dhh/app:123", ".", "&&", :docker, :push, "dhh/app:123" ], builder.push
|
||||
end
|
||||
|
||||
test "multiarch push with build args" do
|
||||
builder = Mrsk::Commands::Builder.new(Mrsk::Configuration.new(@config.merge({ builder: { "args" => { "a" => 1, "b" => 2 } } })))
|
||||
assert_equal [ :docker, :buildx, :build, "--push", "--platform linux/amd64,linux/arm64", "-t", "dhh/app:123", "--build-args", "a=1", "--build-args", "b=2", "." ], builder.push
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user