Скрипт запускается из GoCD и использует Git-деплой от Azure — загружает репозиторий из Azure WebApp на билд-агент GoCD, rsync-ом копирует в него новые файлы, добавляет файл version.html с номером билда и номером последнего коммита, коммитит, и пушит изменения обратно в репозиторий на WebApp в Azure.
Для авторизации используются переменные из Environment variables в GoCD:
Сам скрипт:
#!/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"
Вызов скрипта:
Пример его работы:
И файл version.html с номером задеплоенного билда и коммитом:
$ curl http://azurewebappname.azurewebsites.net/version.html Build: 6 | Commit: 085f93bd0c19859dbbcfbc61ad25391272fdd8ad


