OSDN Git Service

adds autopilot features. screwdriver-0.8.0
authorwhitestar <whitestar@users.osdn.me>
Mon, 17 Sep 2018 07:30:43 +0000 (16:30 +0900)
committerwhitestar <whitestar@users.osdn.me>
Mon, 17 Sep 2018 07:30:43 +0000 (16:30 +0900)
cookbooks/screwdriver/CHANGELOG.md
cookbooks/screwdriver/README.md
cookbooks/screwdriver/Rakefile
cookbooks/screwdriver/attributes/default.rb
cookbooks/screwdriver/concourse.yml
cookbooks/screwdriver/fly-vars.local.yml [new file with mode: 0644]
cookbooks/screwdriver/fly-vars.yml
cookbooks/screwdriver/recipes/docker-compose.rb
cookbooks/screwdriver/templates/default/etc/cron.d/screwdriver-local [new file with mode: 0644]
cookbooks/screwdriver/version

index 0418097..7410733 100644 (file)
@@ -1,5 +1,9 @@
 # screwdriver CHANGELOG
 
+0.8.0
+-----
+- adds autopilot feature.
+
 0.7.0
 -----
 - fix MySQL data directory's group owner.
index 2fc0b56..48d7ace 100644 (file)
@@ -65,6 +65,7 @@ This cookbook sets up a Screwdriver CI/CD service by Docker Compose.
 |`['screwdriver']['api']['scms_vault_items']`|Hash|This hash contains Chef Vault item definitions of SCM's secrets.|See `attributes/default.rb`|
 |`['screwdriver']['store']['backend']`|String|`nil` (in memory) or `'minio'`.|`nil`|
 |`['screwdriver']['store']['config']`|Hash|This hash object is expanded to a `/config/local.yaml` file in the Store Docker container.|See `attributes/default.rb`|
+|`['screwdriver']['docker-compose']['autopilot']`|Hash|Autopilot configurations.|See `attributes/default.rb`|
 |`['screwdriver']['docker-compose']['import_ca']`|Boolean|whether import internal CA certificates or not.|`false`|
 |`['screwdriver']['docker-compose']['app_dir']`|String|Path string.|`"#{node['docker-grid']['compose']['app_dir']}/screwdriver"`|
 |`['screwdriver']['docker-compose']['bin_dir']`|String|Path string.|`"#{node['screwdriver']['docker-compose']['app_dir']}/bin"`|
index 64191a5..f1c82d7 100644 (file)
@@ -3,6 +3,58 @@ require 'rubocop/rake_task'
 require 'foodcritic'
 require 'stove/rake_task'
 
+tpl_cookbook = '00cookbook'
+cookbook_name = File.basename(Dir.pwd)
+
+desc 'Initialize project'
+task :init do
+  next if cookbook_name == tpl_cookbook
+
+  [
+    '.foodcritic',
+    '.rubocop.yml',
+    'Berksfile',
+    'concourse.yml',
+    'fly-vars.yml',
+    'fly-vars.local.yml',
+    'Gemfile',
+    'Gemfile.lock',
+    'version',
+  ].each {|conf|
+    sh "cp ../#{tpl_cookbook}/#{conf} ./" unless File.exist?(conf)
+  }
+
+  ruby [
+    %(-pne '$_.gsub!(/^cookbook-name: .*$/, "cookbook-name: #{cookbook_name}")'),
+    '-i fly-vars.local.yml',
+  ].join(' ')
+end
+
+desc 'Update project'
+task :update do
+  next if cookbook_name == tpl_cookbook
+
+  [
+    'Rakefile',
+    'concourse.yml',
+    'fly-vars.yml',
+    'Gemfile',
+    'Gemfile.lock',
+  ].each {|conf|
+    sh "cp ../#{tpl_cookbook}/#{conf} ./"
+  }
+end
+
+desc 'fly set-pipeline'
+task :'set-pipeline' do
+  sh [
+    "fly -t $CC_TARGET sp -p #{cookbook_name}-cookbook -c concourse.yml",
+    '-l fly-vars.yml -l fly-vars.local.yml -l ~/sec/credentials-prod.yml',
+  ].join(' ')
+end
+desc 'rake set-pipeline alias'
+task sp: 'set-pipeline'
+
 namespace :style do
   desc 'Run Ruby style checks'
   RuboCop::RakeTask.new(:ruby) do |t|
index ac69c00..902da65 100644 (file)
@@ -279,6 +279,13 @@ default['screwdriver']['store']['config'] = {
 
 # Useless?!
 force_override['screwdriver']['docker-compose']['import_ca'] = false
+default['screwdriver']['docker-compose']['autopilot'] = {
+  'enabled' => false,
+  'log_dir' => '/var/log',
+  'wait_time' => '180s',
+  'docker-compose_opts' => '--no-ansi',
+  #'docker-compose_opts' => '',  # for the old docker-compose
+}
 default['screwdriver']['docker-compose']['app_dir'] = "#{node['docker-grid']['compose']['app_dir']}/screwdriver"
 default['screwdriver']['docker-compose']['bin_dir'] = "#{node['screwdriver']['docker-compose']['app_dir']}/bin"
 default['screwdriver']['docker-compose']['config_dir'] = "#{node['screwdriver']['docker-compose']['app_dir']}/config"
index 302b620..d373185 100644 (file)
@@ -1,5 +1,4 @@
 ---
-# $ fly -t $CC_TARGET sp -p screwdriver-cookbook -c concourse.yml -l fly-vars.yml -l ~/sec/credentials-prod.yml
 resources:
 - name: src-git
   type: git
diff --git a/cookbooks/screwdriver/fly-vars.local.yml b/cookbooks/screwdriver/fly-vars.local.yml
new file mode 100644 (file)
index 0000000..b0a3dfa
--- /dev/null
@@ -0,0 +1,2 @@
+---
+cookbook-name: screwdriver
index 3adec92..76f2fcd 100644 (file)
@@ -1,3 +1,2 @@
 ---
-cookbook-name: screwdriver
 chefdk-version: 1.6.11
index 32036ac..ec6861d 100644 (file)
@@ -591,6 +591,16 @@ template config_file do
   mode '0644'
 end
 
+# autopilot
+srv = 'screwdriver'
+template "/etc/cron.d/#{srv}-local" do
+  source  "etc/cron.d/#{srv}-local"
+  owner 'root'
+  group 'root'
+  mode '0644'
+  action :delete unless node['screwdriver']['docker-compose']['autopilot']['enabled']
+end
+
 log 'screwdriver docker-compose post install message' do
   message <<-"EOM"
 Note: You must execute the following command manually.
diff --git a/cookbooks/screwdriver/templates/default/etc/cron.d/screwdriver-local b/cookbooks/screwdriver/templates/default/etc/cron.d/screwdriver-local
new file mode 100644 (file)
index 0000000..0d3c807
--- /dev/null
@@ -0,0 +1,16 @@
+<%
+name = 'screwdriver'
+
+conf = node['screwdriver']['docker-compose']['autopilot']
+log = "#{conf['log_dir']}/#{name}-local.log"
+wait_time = conf['wait_time']
+
+opts = conf['docker-compose_opts']
+-%>
+PATH=/usr/bin:/bin:/usr/local/bin
+DATE_F='+%Y-%m-%d %H:%M:%S %z'
+LOG=<%= log %>
+APP_HOME=<%= node['screwdriver']['docker-compose']['app_dir'] %>
+OPTS='<%= opts %>'
+
+@reboot root sleep <%= wait_time %> && date "$DATE_F" > $LOG && cd $APP_HOME && docker-compose $OPTS down >> $LOG 2>&1 && docker-compose $OPTS up -d >> $LOG 2>&1 && docker-compose ps >> $LOG 2>&1