Скрипт запускается из 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