pipedawg 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9167728fbd620f0098099ff53a90fb1d85336a8a771b24cc3059b8dc03144285
4
- data.tar.gz: 6f1d59f9fb1ca2de1a49d04520f6a9cd7f171f569c72a372899f9f28749ead34
3
+ metadata.gz: b54013025d872389b0b01408fb78b39c63fcfc9b0d7b06d87559ae3c88e0f538
4
+ data.tar.gz: 1d0242a83a9dc068accbe107369950d8bdc4d040e0706bd00cd9b1f40e6112de
5
5
  SHA512:
6
- metadata.gz: f53e89a60305aaa04c14443c404e3bcfa0fa24274503751c927ff6ace5f9cabbeb87f3bc2e87ca81d04a9c14aa280ca2942b381eeecbbae23db4bfd4c4c2165e
7
- data.tar.gz: a3f7acd6b467e21fee88fa2e2b22ef55e60030311355fb3074ae0f4eac0a52674c0027c0b4ebb0b21dfb1317ee5d1e3a753ece8f96c098183699c53d04a703ae
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
- docker_job = Pipedawg::Job.new(
46
- 'build:docker',
47
- image: 'docker',
48
- needs: ['build:gem'],
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, docker_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:docker:
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
- - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
97
- - docker pull $CI_REGISTRY_IMAGE || true
98
- - docker build --pull --cache-from $CI_REGISTRY_IMAGE -t $CI_REGISTRY_IMAGE .
99
- - docker push $CI_REGISTRY_IMAGE
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
@@ -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 update_stages
32
+ def update
32
33
  stages = []
33
34
  opts[:jobs].each do |job|
34
35
  stage = stage_from_needs(opts[:jobs], job.name)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pipedawg
4
- VERSION = '0.1.1'
4
+ VERSION = '0.2.0'
5
5
  end
data/lib/pipedawg.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'pipedawg/job'
4
+ require 'pipedawg/kaniko_job'
4
5
  require 'pipedawg/pipeline'
5
6
  require 'pipedawg/version'
6
7
 
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.1.1
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