pipedawg 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +11 -25
- data/lib/pipedawg/kaniko_job.rb +90 -0
- data/lib/pipedawg/pipeline.rb +2 -1
- data/lib/pipedawg/version.rb +1 -1
- data/lib/pipedawg.rb +1 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b54013025d872389b0b01408fb78b39c63fcfc9b0d7b06d87559ae3c88e0f538
|
4
|
+
data.tar.gz: 1d0242a83a9dc068accbe107369950d8bdc4d040e0706bd00cd9b1f40e6112de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5fb6c7365461b7d70ffdcc96cf18c7fafb686433683f236748735be10916e9f21e7635e3b1b7744d9d4010c2c57497423a0bca645f519f9b2bd968dbdaf6394
|
7
|
+
data.tar.gz: 338a5bb1a1fa767fc5610ee92a534eb37e41289e39c18106c8ae3b549011e09f198fc936cf2dded73fe96c50c4dbdaf84f4d96e02b5020aaab5f84bba3b87856
|
data/README.md
CHANGED
@@ -42,25 +42,13 @@ gem_job = Pipedawg::Job.new(
|
|
42
42
|
script: ['bundle install', 'gem build *.gemspec']
|
43
43
|
)
|
44
44
|
|
45
|
-
|
46
|
-
'build:
|
47
|
-
|
48
|
-
|
49
|
-
retry: 2,
|
50
|
-
script: [
|
51
|
-
'docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY',
|
52
|
-
'docker pull $CI_REGISTRY_IMAGE || true',
|
53
|
-
'docker build --pull --cache-from $CI_REGISTRY_IMAGE -t $CI_REGISTRY_IMAGE .',
|
54
|
-
'docker push $CI_REGISTRY_IMAGE'
|
55
|
-
],
|
56
|
-
services: ['docker:dind']
|
45
|
+
kaniko_job = Pipedawg::KanikoJob.new(
|
46
|
+
'build:kaniko',
|
47
|
+
{needs: ['build:gem'], retry: 2},
|
48
|
+
{context:'${CI_PROJECT_DIR}/docker',external_files: {'*.gem':'gems'}}
|
57
49
|
)
|
58
50
|
|
59
|
-
pipeline = Pipedawg::Pipeline.new 'build:image', jobs: [gem_job,
|
60
|
-
|
61
|
-
# Automatically calculates stages of jobs based on 'needs'
|
62
|
-
pipeline.update_stages
|
63
|
-
|
51
|
+
pipeline = Pipedawg::Pipeline.new 'build:image', jobs: [gem_job, kaniko_job]
|
64
52
|
puts pipeline.to_yaml
|
65
53
|
```
|
66
54
|
|
@@ -84,23 +72,21 @@ build:gem:
|
|
84
72
|
- gem build *.gemspec
|
85
73
|
stage: '1'
|
86
74
|
tags: []
|
87
|
-
build:
|
75
|
+
build:kaniko:
|
88
76
|
artifacts: {}
|
89
77
|
cache: {}
|
90
|
-
image: docker
|
91
78
|
needs:
|
92
79
|
- build:gem
|
93
80
|
retry: 2
|
94
81
|
rules: []
|
95
82
|
script:
|
96
|
-
-
|
97
|
-
|
98
|
-
-
|
99
|
-
- docker
|
83
|
+
- echo "{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}"
|
84
|
+
> "/kaniko/.docker/config.json"
|
85
|
+
- cp "*.gem" "${CI_PROJECT_DIR}/docker/gems"
|
86
|
+
- '"/kaniko/executor" --context "${CI_PROJECT_DIR}/docker" --dockerfile "Dockerfile"
|
87
|
+
--no-push'
|
100
88
|
stage: '2'
|
101
89
|
tags: []
|
102
|
-
services:
|
103
|
-
- docker:dind
|
104
90
|
```
|
105
91
|
|
106
92
|
## Development
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Pipedawg
|
4
|
+
# kaniko_job class
|
5
|
+
class KanikoJob < Job
|
6
|
+
attr_accessor :kaniko_opts
|
7
|
+
|
8
|
+
def initialize(name = 'build', opts = {}, kaniko_opts = {}) # rubocop:disable Metrics/MethodLength
|
9
|
+
@kaniko_opts = {
|
10
|
+
build_args: {},
|
11
|
+
config: {
|
12
|
+
'$CI_REGISTRY': {
|
13
|
+
username: '$CI_REGISTRY_USER',
|
14
|
+
password: '$CI_REGISTRY_PASSWORD'
|
15
|
+
}
|
16
|
+
},
|
17
|
+
config_file: '/kaniko/.docker/config.json',
|
18
|
+
context: '${CI_PROJECT_DIR}',
|
19
|
+
destinations: [],
|
20
|
+
dockerfile: 'Dockerfile',
|
21
|
+
executor: '/kaniko/executor',
|
22
|
+
external_files: {},
|
23
|
+
flags: [],
|
24
|
+
ignore_paths: [],
|
25
|
+
insecure_registries: [],
|
26
|
+
kaniko_image: {
|
27
|
+
entrypoint: [''],
|
28
|
+
name: 'gcr.io/kaniko-project/executor:debug'
|
29
|
+
},
|
30
|
+
options: {},
|
31
|
+
registry_certificates: {},
|
32
|
+
registry_mirrors: [],
|
33
|
+
skip_tls_verify_registry: [],
|
34
|
+
trusted_ca_cert_source_files: [],
|
35
|
+
trusted_ca_cert_target_file: '/kaniko/ssl/certs/ca-certificates.crt'
|
36
|
+
}.merge(kaniko_opts)
|
37
|
+
super name, opts
|
38
|
+
update
|
39
|
+
end
|
40
|
+
|
41
|
+
def update # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
42
|
+
require 'json'
|
43
|
+
opts[:image] = kaniko_opts[:image]
|
44
|
+
script = ["echo #{kaniko_opts[:config].to_json.inspect} > \"#{kaniko_opts[:config_file]}\""]
|
45
|
+
cert_copies = Array(kaniko_opts[:trusted_ca_cert_source_files]).map do |cert|
|
46
|
+
"cat \"#{cert}\" >> \"#{kaniko_opts[:trusted_ca_cert_target_file]}\""
|
47
|
+
end
|
48
|
+
script.concat cert_copies
|
49
|
+
file_copies = kaniko_opts[:external_files].map do |source, dest|
|
50
|
+
"cp \"#{source}\" \"#{kaniko_opts[:context]}/#{dest}\""
|
51
|
+
end
|
52
|
+
script.concat file_copies
|
53
|
+
flags = kaniko_opts[:flags].clone
|
54
|
+
flags << 'no-push' if kaniko_opts[:destinations].empty?
|
55
|
+
flags_cli = flags.uniq.map { |f| "--#{f}" }.join(' ')
|
56
|
+
options_cli = kaniko_opts[:options].map { |k, v| "--#{k}=\"#{v}\"" }.join(' ')
|
57
|
+
build_args_cli = kaniko_opts[:build_args].map { |k, v| "--build-arg #{k}=\"#{v}\"" }.join(' ')
|
58
|
+
ignore_paths_cli = Array(kaniko_opts[:ignore_paths]).map { |p| "--ignore-path #{p}" }.join(' ')
|
59
|
+
insecure_registries_cli = Array(kaniko_opts[:insecure_registries]).map do |r|
|
60
|
+
"--insecure-registry #{r}"
|
61
|
+
end.join(' ')
|
62
|
+
registry_certificates_cli = kaniko_opts[:registry_certificates].map do |k, v|
|
63
|
+
"----registry-certificate #{k}=\"#{v}\""
|
64
|
+
end.join(' ')
|
65
|
+
registry_mirrors_cli = Array(kaniko_opts[:registry_mirrors]).map { |r| "--registry-mirror #{r}" }.join(' ')
|
66
|
+
skip_tls_verify_registrys_cli = Array(kaniko_opts[:skip_tls_verify_registry]).map do |r|
|
67
|
+
"--skip-tls-verify-registry #{r}"
|
68
|
+
end.join(' ')
|
69
|
+
destinations_cli = kaniko_opts[:destinations].map { |d| "--destination #{d}" }.join(' ')
|
70
|
+
kaniko_cmds = [
|
71
|
+
"\"#{kaniko_opts[:executor]}\"",
|
72
|
+
'--context',
|
73
|
+
"\"#{kaniko_opts[:context]}\"",
|
74
|
+
'--dockerfile',
|
75
|
+
"\"#{kaniko_opts[:dockerfile]}\"",
|
76
|
+
flags_cli,
|
77
|
+
options_cli,
|
78
|
+
build_args_cli,
|
79
|
+
ignore_paths_cli,
|
80
|
+
insecure_registries_cli,
|
81
|
+
registry_certificates_cli,
|
82
|
+
registry_mirrors_cli,
|
83
|
+
destinations_cli,
|
84
|
+
skip_tls_verify_registrys_cli
|
85
|
+
].reject(&:empty?)
|
86
|
+
script << kaniko_cmds.join(' ')
|
87
|
+
opts[:script] = script
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/lib/pipedawg/pipeline.rb
CHANGED
@@ -12,6 +12,7 @@ module Pipedawg
|
|
12
12
|
stages: ['build'],
|
13
13
|
workflow: {}
|
14
14
|
}.merge(opts)
|
15
|
+
update
|
15
16
|
end
|
16
17
|
|
17
18
|
def to_yaml
|
@@ -28,7 +29,7 @@ module Pipedawg
|
|
28
29
|
File.write(file, to_yaml)
|
29
30
|
end
|
30
31
|
|
31
|
-
def
|
32
|
+
def update
|
32
33
|
stages = []
|
33
34
|
opts[:jobs].each do |job|
|
34
35
|
stage = stage_from_needs(opts[:jobs], job.name)
|
data/lib/pipedawg/version.rb
CHANGED
data/lib/pipedawg.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pipedawg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- harbottle
|
@@ -21,6 +21,7 @@ files:
|
|
21
21
|
- README.md
|
22
22
|
- lib/pipedawg.rb
|
23
23
|
- lib/pipedawg/job.rb
|
24
|
+
- lib/pipedawg/kaniko_job.rb
|
24
25
|
- lib/pipedawg/pipeline.rb
|
25
26
|
- lib/pipedawg/version.rb
|
26
27
|
homepage: https://github.com/liger1978/pipedawg
|