Class: Argus::Runner
- Inherits:
-
Object
- Object
- Argus::Runner
- Includes:
- SlackNotifier
- Defined in:
- lib/argus/runner.rb
Instance Method Summary collapse
-
#authenticate_ecr ⇒ Object
authenticate to AWS ECR.
-
#image_name(registry, msg) ⇒ Object
return image tag, or make it out of: repo:branch with / changed to - in branch; prepend registry if none given.
-
#initialize(msg) ⇒ Runner
constructor
A new instance of Runner.
-
#notify(message, color = nil) ⇒ Object
…
-
#SlackNotifier ⇒ Object
override notifier if setup for Slack …
- #symbolize_keys(hash) ⇒ Object
Constructor Details
#initialize(msg) ⇒ Runner
Returns a new instance of Runner.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/argus/runner.rb', line 47 def initialize(msg) msg = symbolize_keys(msg) ## make working directory dir = File.join(ENV.fetch('ARGUS_HOME', '/tmp'), msg[:org], msg[:repo]) FileUtils.mkdir_p(dir) ## github repo to get git = Git.new(msg[:org], msg[:repo], msg[:branch]) ## authenticate to registry registry = authenticate_ecr ## docker image to build img = Image.new(image_name(registry, msg)) Dir.chdir(dir) do img.pull # pull some layers to speed up the build git.pull # get the git repo raise ArgusError, "git sha not found: #{git}" unless git.sha img.build! # build docker image raise ArgusError, 'docker build failed' unless img.is_ok? notify("build complete for #{img} (#{img.build_time.round}s)", :good) img.tag!(git.sha) # tag the image img.push(git.sha) # push to registry notify("push complete for #{img} (#{img.push_time.round}s)", :good) end rescue ArgusError => e notify(e., :danger) raise # re-raise for shoryuken to delete failed job end |
Instance Method Details
#authenticate_ecr ⇒ Object
authenticate to AWS ECR
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/argus/runner.rb', line 19 def authenticate_ecr ## get token and extract creds auth = Aws::ECR::Client.new...first username, password = Base64.decode64(auth.).split(':') ## authenticate our docker client Docker.authenticate!( username: username, password: password, serveraddress: auth.proxy_endpoint ) ## return registry name URI.parse(auth.proxy_endpoint).host end |
#image_name(registry, msg) ⇒ Object
return image tag, or make it out of: repo:branch with / changed to - in branch; prepend registry if none given
38 39 40 41 42 43 44 45 |
# File 'lib/argus/runner.rb', line 38 def image_name(registry, msg) name = msg[:tag] || (msg[:repo] + ':' + msg[:branch].gsub('/', '-')) if name.include?('/') name else "#{registry}/#{name}" end end |
#notify(message, color = nil) ⇒ Object
… else notify stdout
10 11 12 |
# File 'lib/argus/runner.rb', line 10 def notify(, color = nil) puts end |
#SlackNotifier ⇒ Object
override notifier if setup for Slack …
7 |
# File 'lib/argus/runner.rb', line 7 prepend SlackNotifier |
#symbolize_keys(hash) ⇒ Object
14 15 16 |
# File 'lib/argus/runner.rb', line 14 def symbolize_keys(hash) Hash[ hash.map { |k,v| [ k.to_sym, v ] }] end |