miniexec 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/miniexec.rb +32 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6097e4b1de5d81d2e75d5817d9fd6a722ad40c9add96a1ff817cbbe64614f5e2
|
4
|
+
data.tar.gz: 9d639bc96b249926a411662b4a54027ebbb8381bcda243b56261eb5ed7530077
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 042ac22614eedb274be50d0cbac5f13e1e8bc05bf8421559206dcf433365b205b892dab091aff64dd07ec7da2e782a9a0f4e63ecc0341424032d56a8070755a0
|
7
|
+
data.tar.gz: b62dd5d5dddd6e0abb6057052b25cdcef90f9167c068e7821de9f928a215e06b57593fdced5c3b92f686254afe95cf37fb320cec3aa88531b34e02988840937e
|
data/lib/miniexec.rb
CHANGED
@@ -25,12 +25,14 @@ module MiniExec
|
|
25
25
|
end
|
26
26
|
|
27
27
|
attr_accessor :script
|
28
|
+
attr_reader :runlog
|
28
29
|
|
29
30
|
def initialize(job,
|
30
31
|
project_path: self.class.project_path,
|
31
32
|
docker_url: nil,
|
32
33
|
binds: [],
|
33
|
-
env: {}
|
34
|
+
env: {},
|
35
|
+
mount_cwd: true)
|
34
36
|
@job_name = job
|
35
37
|
@project_path = project_path
|
36
38
|
@workflow = YAML.load(File.read("#{@project_path}/#{MiniExec.workflow_file}"))
|
@@ -38,7 +40,9 @@ module MiniExec
|
|
38
40
|
@job['name'] = job
|
39
41
|
@default_image = @workflow['image'] || 'debian:buster-slim'
|
40
42
|
@image = set_job_image
|
43
|
+
@entrypoint = set_job_entrypoint
|
41
44
|
@binds = binds
|
45
|
+
@mount_cwd = mount_cwd
|
42
46
|
@env = {}
|
43
47
|
[
|
44
48
|
env,
|
@@ -49,6 +53,7 @@ module MiniExec
|
|
49
53
|
@env.merge!(var_set.transform_values { |v| Util.expand_var(v.to_s, @env) }) if var_set
|
50
54
|
end
|
51
55
|
@script = compile_script
|
56
|
+
@runlog = []
|
52
57
|
configure_logger
|
53
58
|
Docker.options[:read_timeout] = 6000
|
54
59
|
Docker.url = docker_url if docker_url
|
@@ -59,26 +64,48 @@ module MiniExec
|
|
59
64
|
@logger.info "Fetching image #{@image}"
|
60
65
|
Docker::Image.create(fromImage: @image)
|
61
66
|
@logger.info 'Image fetched'
|
67
|
+
|
68
|
+
config = Docker::Image.get(@image).info['Config']
|
69
|
+
working_dir = if config['WorkingDir'].empty?
|
70
|
+
'/gitlab'
|
71
|
+
else
|
72
|
+
config['WorkingDir']
|
73
|
+
end
|
74
|
+
binds = @binds
|
75
|
+
binds.push "#{ENV['PWD']}:#{working_dir}" if @mount_cwd
|
62
76
|
Dir.chdir(@project_path) do
|
63
77
|
@logger.info 'Creating container'
|
64
78
|
container = Docker::Container.create(
|
65
|
-
Cmd: ['/bin/bash', script_path],
|
66
79
|
Image: @image,
|
80
|
+
Cmd: ['/usr/bin/env', 'bash', script_path],
|
81
|
+
WorkingDir: working_dir,
|
82
|
+
Entrypoint: @entrypoint,
|
67
83
|
Volumes: @binds.map { |b| { b => { path_parent: 'rw' } } }.inject(:merge),
|
68
84
|
Env: @env.map { |k, v| "#{k}=#{v}" }
|
69
85
|
)
|
70
86
|
container.store_file(script_path, @script)
|
71
87
|
container.start({ Binds: [@binds] })
|
72
|
-
container.tap(&:start).attach { |_, chunk| puts chunk }
|
88
|
+
container.tap(&:start).attach { |_, chunk| puts chunk; @runlog.push chunk}
|
89
|
+
@logger.info 'Job finished. Removing container.'
|
90
|
+
# After running, we want to remove the container.
|
91
|
+
container.remove
|
92
|
+
@logger.info 'Container removed.'
|
73
93
|
end
|
74
94
|
end
|
75
95
|
|
76
96
|
private
|
77
97
|
|
78
98
|
def set_job_image
|
79
|
-
|
99
|
+
if @job['image']
|
100
|
+
image = @job['image'] if @job['image'].instance_of?(String)
|
101
|
+
image = @job['image']['name'] if @job['image'].instance_of?(Hash)
|
102
|
+
end
|
103
|
+
|
104
|
+
image || @default_image
|
105
|
+
end
|
80
106
|
|
81
|
-
|
107
|
+
def set_job_entrypoint
|
108
|
+
@job['image']['entrypoint'] if @job['image'].instance_of?(Hash)
|
82
109
|
end
|
83
110
|
|
84
111
|
# Set gitlab's predefined env vars as per
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: miniexec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Pugh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-05-
|
11
|
+
date: 2021-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A minimal interpretor/executor for .gitlab-ci.yml
|
14
14
|
email: pugh@s3kr.it
|