citasks 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/citasks/ci_lib.rb +137 -73
- data/lib/citasks.rb +1 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68e80bae84d161e9ec3395316758e1e24c3295cc
|
4
|
+
data.tar.gz: ad54f1b7d33346ca68d22a3de1e327c81710f2ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2023994cd9fc1842d026939c64c0ae94b24ede895ff15a31cd3e39c0e473b11e76f01e1ddec64b5b5817518f0a943b633856ebf1eb5c63f96290adb2c549cfad
|
7
|
+
data.tar.gz: 713d0e13accb077b129a33514cb312c56a1675e08be3ee3f327abd6db1797fa921830c1380ca071fae9b6c96e6b6c83d5502441fcd28c2cdffb0244a2ed0274c
|
data/lib/citasks/ci_lib.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
require 'gitlab'
|
2
2
|
require 'securerandom'
|
3
|
+
require "erb"
|
4
|
+
|
5
|
+
def _write fullpath, content
|
6
|
+
File.open fullpath, "w" do |fh|
|
7
|
+
fh.puts content
|
8
|
+
end
|
9
|
+
end
|
3
10
|
|
4
11
|
module JenkinsTools
|
5
12
|
WORKFLOW_PLUGIN = ENV["WORKFLOW_PLUGIN"] || "workflow-job@2.14.1"
|
@@ -10,7 +17,7 @@ module JenkinsTools
|
|
10
17
|
# git_repo_url = http://virtuous-porcupine-gitlab-ce/wenzm/icp-static-web.git, gitlab-wenzm-password
|
11
18
|
def self.gen_job_xml job_name, xml_file_name, git_repo_url, repo_credential_id_in_jenkins,token_to_trigger_build_remotely = SecureRandom.uuid
|
12
19
|
secret_token = "{AQAAABAAAAAQ76W/e/wjLSZ6yxDaU6oaB3rUABFZ/jw6NVzpJkLGL/8=}" #empty??? TODO
|
13
|
-
|
20
|
+
_write xml_file_name, <<~EOF
|
14
21
|
<?xml version='1.0' encoding='UTF-8'?>
|
15
22
|
<flow-definition plugin="#{WORKFLOW_PLUGIN}">
|
16
23
|
<actions/>
|
@@ -69,15 +76,10 @@ module JenkinsTools
|
|
69
76
|
<disabled>false</disabled>
|
70
77
|
</flow-definition>
|
71
78
|
EOF
|
72
|
-
|
73
|
-
File.open xml_file_name, "w" do |fh|
|
74
|
-
fh.puts xmls
|
75
|
-
end
|
76
|
-
|
77
79
|
end
|
78
80
|
|
79
81
|
def self.gen_jenkins_file
|
80
|
-
|
82
|
+
_write "Jenkinsfile", <<~EOF
|
81
83
|
//A Jenkinsfile for start
|
82
84
|
podTemplate(label: 'my-pod',
|
83
85
|
containers:[
|
@@ -130,11 +132,6 @@ module JenkinsTools
|
|
130
132
|
}
|
131
133
|
}
|
132
134
|
EOF
|
133
|
-
|
134
|
-
File.open "Jenkinsfile", "w" do |fh|
|
135
|
-
fh.puts content
|
136
|
-
end
|
137
|
-
|
138
135
|
end
|
139
136
|
|
140
137
|
def self.post_new_job job_name, xml_file, base_url, user, token
|
@@ -194,102 +191,175 @@ end
|
|
194
191
|
|
195
192
|
module Builder
|
196
193
|
def self.create_env app_name
|
197
|
-
|
194
|
+
_write ".env.build", <<~EOF
|
198
195
|
IMAGE_NAME=#{app_name}
|
199
196
|
|
200
197
|
PRIVATE_DOCKER_REGISTRY_NAME=master.cfc
|
201
198
|
PRIVATE_DOCKER_REGISTRY_PORT=8500
|
202
199
|
PRIVATE_DOCKER_REGISTRY_IP=#{ENV["ICP_MASTER_IP"]}
|
200
|
+
PRIVATE_DOCKER_REGISTRY_NAMESPACE=default
|
203
201
|
|
204
202
|
PRIVATE_DOCKER_REGISTRY_USER=admin
|
205
203
|
PRIVATE_DOCKER_REGISTRY_USER_PASSWORD=admin
|
206
|
-
|
207
204
|
EOF
|
208
|
-
|
209
|
-
File.open ".env.build", "w" do |fh|
|
210
|
-
fh.puts envs
|
211
|
-
end
|
212
205
|
end
|
213
206
|
|
214
|
-
def self.
|
215
|
-
|
216
|
-
require 'sshkit_addon'
|
217
|
-
require 'dotenv'
|
218
|
-
require "yaml"
|
207
|
+
def self.create_lib_files
|
208
|
+
FileUtils.mkdir_p lib_dir = "build_libs"
|
219
209
|
|
220
|
-
|
210
|
+
_write lib_dir + "/helpers.rb", <<~EOF
|
211
|
+
require "yaml"
|
221
212
|
|
213
|
+
require_relative "docker.rb"
|
214
|
+
require_relative "k8s.rb"
|
215
|
+
|
222
216
|
@task_index=0
|
223
217
|
def next_task_index
|
224
218
|
@task_index += 1
|
225
219
|
sprintf("%02d", @task_index)
|
226
220
|
end
|
227
221
|
|
222
|
+
def rest_task_index
|
223
|
+
@task_index = 0
|
224
|
+
end
|
225
|
+
EOF
|
226
|
+
|
227
|
+
_write lib_dir + "/shell.rb", <<~EOF
|
228
|
+
module ShellCommandConstructor
|
229
|
+
def self.construct_command strings_or_list, connector = " && "
|
230
|
+
list = case strings_or_list
|
231
|
+
when Array
|
232
|
+
strings_or_list
|
233
|
+
when String
|
234
|
+
strings_or_list.split(/\\n/)
|
235
|
+
end
|
236
|
+
list.each_with_object([]) do |line, obj|
|
237
|
+
line.strip!
|
238
|
+
next if line.empty?
|
239
|
+
next if line =~ /^#/
|
240
|
+
obj.push line
|
241
|
+
end.join connector
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
module Shell
|
246
|
+
def self.run cmd
|
247
|
+
unless system(cmd)
|
248
|
+
fail "Failed to execute \#{cmd}"
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
def self.test cmd
|
253
|
+
system cmd
|
254
|
+
end
|
255
|
+
end
|
256
|
+
EOF
|
257
|
+
|
258
|
+
_write lib_dir + "/docker.rb", <<~EOF
|
259
|
+
require_relative "shell"
|
260
|
+
|
261
|
+
module DockerTools
|
262
|
+
def self.add_etc_hosts
|
263
|
+
etc_hosts_entry = sprintf("%s %s", ENV["PRIVATE_DOCKER_REGISTRY_IP"], ENV["PRIVATE_DOCKER_REGISTRY_NAME"])
|
264
|
+
Shell.run %Q(echo "\#{etc_hosts_entry}" >> /etc/hosts)
|
265
|
+
end
|
266
|
+
|
267
|
+
def self.push_to_registry image_name, tag
|
268
|
+
private_registry = sprintf("%s:%s", ENV["PRIVATE_DOCKER_REGISTRY_NAME"], ENV["PRIVATE_DOCKER_REGISTRY_PORT"])
|
269
|
+
namespace = ENV["PRIVATE_DOCKER_REGISTRY_NAMESPACE"]
|
270
|
+
|
271
|
+
cmds = ShellCommandConstructor.construct_command %Q{
|
272
|
+
docker login -u \#{ENV["PRIVATE_DOCKER_REGISTRY_USER"]} -p \#{ENV["PRIVATE_DOCKER_REGISTRY_USER_PASSWORD"]} \#{private_registry}
|
273
|
+
|
274
|
+
docker tag \#{image_name}:\#{tag} \#{private_registry}/\#{namespace}/\#{image_name}:\#{tag}
|
275
|
+
docker push \#{private_registry}/\#{namespace}/\#{image_name}:\#{tag}
|
276
|
+
}
|
277
|
+
Shell.run cmds
|
278
|
+
end
|
279
|
+
end
|
280
|
+
EOF
|
281
|
+
|
282
|
+
_write lib_dir + '/k8s.rb', <<~EOF
|
283
|
+
require "erb"
|
284
|
+
require_relative "shell"
|
285
|
+
|
286
|
+
module KubeTools
|
287
|
+
def self.create_new_yaml yaml_template_file, yaml_file, data = {}
|
288
|
+
erb = ERB.new(File.read(yaml_template_file))
|
289
|
+
b = binding
|
290
|
+
|
291
|
+
data.each_pair do |key, value|
|
292
|
+
b.local_variable_set(key, value)
|
293
|
+
end
|
294
|
+
|
295
|
+
File.open yaml_file, "w" do |fh|
|
296
|
+
fh.puts erb.result(b)
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
300
|
+
def self.deploy_to_k8s deployment, yaml_file, image_name, new_image_name
|
301
|
+
if Shell.test %Q(kubectl get deployment | grep \#{deployment} )
|
302
|
+
Shell.run %Q(kubectl apply -f \#{yaml_file})
|
303
|
+
Shell.run %Q(kubectl set image deployment/\#{deployment} \#{image_name}=\#{new_image_name})
|
304
|
+
|
305
|
+
Shell.run %Q(kubectl rollout status deployment/\#{deployment})
|
306
|
+
else
|
307
|
+
puts "no deployment yet. create it"
|
308
|
+
Shell.run %Q(kubectl create -f \#{yaml_file} --record)
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|
312
|
+
EOF
|
313
|
+
|
314
|
+
end
|
315
|
+
|
316
|
+
def self.create_rakefile
|
317
|
+
_write "build.rb", <<~OUTEOF
|
318
|
+
require 'dotenv'
|
319
|
+
Dotenv.load ".env.build"
|
320
|
+
require_relative "build_libs/helpers"
|
321
|
+
|
228
322
|
image_name = ENV["IMAGE_NAME"]
|
229
323
|
tag=ENV["BUILD_NUMBER"]||"B1"
|
230
324
|
|
231
325
|
namespace "docker" do
|
232
|
-
|
326
|
+
rest_task_index
|
327
|
+
|
233
328
|
desc "build docker image"
|
234
329
|
task "\#{next_task_index}_build_image" do
|
235
|
-
sh %Q(env)
|
236
330
|
sh %Q(docker build -t \#{image_name}:\#{tag} .)
|
237
331
|
end
|
238
332
|
|
239
333
|
desc "push to ICp registry"
|
240
334
|
task "\#{next_task_index}_push_to_ICp_registry" do
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
cmds = ShellCommandConstructor.construct_command %Q{
|
245
|
-
echo "\#{etc_hosts_entry}" >> /etc/hosts
|
246
|
-
docker login -u \#{ENV["PRIVATE_DOCKER_REGISTRY_USER"]} -p \#{ENV["PRIVATE_DOCKER_REGISTRY_USER"]} \#{private_registry}
|
247
|
-
|
248
|
-
docker tag \#{image_name}:\#{tag} \#{private_registry}/default/\#{image_name}:\#{tag}
|
249
|
-
docker push \#{private_registry}/default/\#{image_name}:\#{tag}
|
250
|
-
}
|
251
|
-
sh cmds
|
335
|
+
DockerTools.add_etc_hosts
|
336
|
+
DockerTools.push_to_registry image_name, tag_name
|
252
337
|
end
|
253
338
|
end
|
254
339
|
|
255
340
|
namespace "k8s" do
|
256
|
-
|
341
|
+
rest_task_index
|
342
|
+
|
257
343
|
desc "deploy into k8s"
|
258
344
|
task "\#{next_task_index}_deploy_to_k8s" do
|
259
|
-
|
260
|
-
|
345
|
+
yaml_template_file = "\#{image_name}.k8.template.yaml"
|
346
|
+
yaml_file = "\#{image_name}.yaml"
|
347
|
+
|
261
348
|
private_registry = sprintf("%s:%s", ENV["PRIVATE_DOCKER_REGISTRY_NAME"], ENV["PRIVATE_DOCKER_REGISTRY_PORT"])
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
fh.puts doc.to_yaml
|
270
|
-
end
|
271
|
-
end
|
349
|
+
namespace = ENV["PRIVATE_DOCKER_REGISTRY_NAMESPACE"]
|
350
|
+
full_new_image_name = "\#{private_registry}/\#{namespace}/\#{image_name}:\#{tag}"
|
351
|
+
data = {
|
352
|
+
new_image: full_new_image_name
|
353
|
+
}
|
354
|
+
|
355
|
+
KubeTools.create_new_yaml yaml_template_file, yaml_file, data
|
272
356
|
|
273
357
|
deployment = image_name
|
274
|
-
|
275
|
-
if ok #already exists
|
276
|
-
sh %Q(kubectl apply -f \#{yaml_file})
|
277
|
-
sh %Q(kubectl set image deployment/\#{deployment} \#{image_name}=\#{new_image_name})
|
278
|
-
|
279
|
-
sh %Q(kubectl rollout status deployment/\#{deployment})
|
280
|
-
else
|
281
|
-
puts "no deployment yet. create it"
|
282
|
-
sh %Q(kubectl create -f \#{yaml_file} --record)
|
283
|
-
end
|
284
|
-
end
|
358
|
+
KubeTools.deploy_to_k8s deployment, yaml_file, image_name, full_new_image_name
|
285
359
|
|
286
360
|
end
|
287
361
|
end
|
288
362
|
OUTEOF
|
289
|
-
|
290
|
-
File.open "build.rb", "w" do |fh|
|
291
|
-
fh.puts content
|
292
|
-
end
|
293
363
|
end
|
294
364
|
|
295
365
|
def self.create_dockerfile
|
@@ -305,7 +375,7 @@ module Builder
|
|
305
375
|
end
|
306
376
|
|
307
377
|
def self.create_k8_file app_name
|
308
|
-
|
378
|
+
_write "#{app_name}.k8.template.yaml", <<~EOF
|
309
379
|
apiVersion: extensions/v1beta1
|
310
380
|
kind: Deployment
|
311
381
|
metadata:
|
@@ -322,8 +392,7 @@ module Builder
|
|
322
392
|
spec:
|
323
393
|
containers:
|
324
394
|
- name: #{app_name}
|
325
|
-
|
326
|
-
image: #{app_name}:latest
|
395
|
+
image: <%= new_image %>
|
327
396
|
imagePullSecrets:
|
328
397
|
- name: admin.registrykey
|
329
398
|
---
|
@@ -359,10 +428,5 @@ module Builder
|
|
359
428
|
serviceName: #{app_name}
|
360
429
|
servicePort: http
|
361
430
|
EOF
|
362
|
-
|
363
|
-
File.open "#{app_name}.k8.template.yaml", "w" do |fh|
|
364
|
-
fh.puts content
|
365
|
-
end
|
366
|
-
|
367
431
|
end
|
368
432
|
end
|
data/lib/citasks.rb
CHANGED