Ruby: скрипт git-деплоя в Azure

Автор: | 05/21/2016
 

ruby_logoСкрипт запускается из GoCD и использует Git-деплой от Azure — загружает репозиторий из Azure WebApp на билд-агент GoCDrsync-ом копирует в него новые файлы, добавляет файл version.html с номером билда и номером последнего коммита, коммитит, и пушит изменения обратно в репозиторий на WebApp в Azure.

Для авторизации используются переменные из Environment variables в GoCD:

azure_ruby_git_deploy

Сам скрипт:

#!/usr/bin/env ruby

require 'fileutils'

$me = File.basename($0)

$BUILD_NUMBER = ENV['GO_PIPELINE_COUNTER']

if ENV["DEPLOYMENT_USER"] && ENV["DEPLOYMENT_PASSWORD"]
  $DEPLOYMENT_USER = ENV["DEPLOYMENT_USER"]
  $DEPLOYMENT_PASSWORD = ENV["DEPLOYMENT_PASSWORD"]
else
  abort "[#{$me}] ERROR: can not find DEPLOYMENT_USER or DEPLOYMENT_PASSWORD variables.\n"
end

case ARGV.length
when 1
  $AZURE_ENV = $AZURE_REPO = ARGV[0]
when 2
  $AZURE_ENV = ARGV[0]
  $AZURE_REPO = ARGV[1]
else
  abort "\n[#{$me}] You must specify environment you want to deploy to.\n"
end

puts "\n[#{$me}] Going to clone #{$AZURE_ENV} repository using https://#{$DEPLOYMENT_USER}@#{$AZURE_ENV}.scm.azurewebsites.net:443/#{$AZURE_REPO}.git\n"

if File.directory?($AZURE_REPO)
  puts "\n[#{$me}] #{$AZURE_REPO} exist, going to remove it.\n\n"
  FileUtils.rm_rf($AZURE_REPO)
end

system("git clone https://#{$DEPLOYMENT_USER}:#{$DEPLOYMENT_PASSWORD}@#{$AZURE_ENV}.scm.azurewebsites.net:443/#{$AZURE_REPO}.git") or abort "\nERROR: can not clone source. Exit.\n\n"

puts "\n[$me] Executing Rsync\n\n"

# exclude your AZURE_REPO here!
system("rsync -av --delete --exclude '.git' --exclude 'ci' --exclude #{$AZURE_REPO} . #{$AZURE_REPO}/")

Dir.chdir $AZURE_REPO

puts "\n[#{$me}] Working in #{Dir.pwd}\n"
puts "\n[#{$me}] Data to be deployed to #{$AZURE_REPO}:\n\n"

puts Dir.glob("*")

commit = `git rev-parse HEAD`
File.write("version.html", "Build: #{$BUILD_NUMBER} | Commit: #{commit}")

system("git add .")
system("git status")
system("git commit -m \"Release build #{$BUILD_NUMBER}\" || echo \"[#{$me}] Nothing to commit!\"")
system("git push origin master")

puts "\n[#{$me}] Done.\n\n"

Вызов скрипта:

azure_ruby_git_deploy_3

Пример его работы:

azure_ruby_git_deploy_2

И файл version.html с номером задеплоенного билда и коммитом:

$ curl http://azurewebappname.azurewebsites.net/version.html
Build: 6 | Commit: 085f93bd0c19859dbbcfbc61ad25391272fdd8ad