Shell Buildscript for Kongregate Deploy – Teil 1 / 3
Das Ziel meines Build Scripts ist es wichtige Developmentzeit zu sparen durch einen automatisierten Prozess. Dev-Time ist die wertvollste Resource, die man auf jedenfall sinnvoll nutzen muss. Automatisierung kann dabei helfen Monkey-Work dem Rechner zu überlassen.
Außerdem will ich mit diesem Blog-Post mein eigenes Script dokumentieren. Wenn der Buildprozess einmal automatisiert ist, dann werde ich das Script nur noch benutzen und schnell manche Details vergessen.
Optionen
Im Script kann man verschiedene Einstellungen vornehmen.
set DEPLOY_FOLDER=Deploy set BUILD_FOLDER=Development set BUILD_NUMBER=0 set CANVAS_WIDTH=800 set CANVAS_HEIGHT=600
Im DEPLOY_FOLDER
werden die finalen Dateien erstellt. Aus dem BUILD_FOLDER
werden alle Dateien extrahiert. BUILD_NUMBER
sollte nicht verändert werden. Die Zahl gibt die laufende Nummer für den ersten Build an. CANVAS_WIDTH
und CANVAS_HEIGHT
definieren die finale Größe des HTML Canvas. Auch das sollte nicht geändert werden.
Setlocal EnableExtensions EnableDelayedExpansion set ARTIFACTS_FOLDER=%DEPLOY_FOLDER%_Artifacts set LOG_FOLDER=%DEPLOY_FOLDER%_Log
Der ARTIFACTS_FOLDER
und der LOG_FOLDER
enthalten einige extra Infos. Die sind solange irrelevant, bis ein Fehler auftaucht. Dann kann man hier nachlesen, wo es gehapert hat oder im ARTIFACTS_FOLDER
die nicht minimalisierte .js finden. Das kann hilfreich sein, wenn es ums debuggen geht.
Setlocal EnableExtensions EnableDelayedExpansion
müßt ihr setzen, damit ihr bei den Berechnungen keine Probleme bekommt. Lest einfach unter https://ss64.com/nt/setlocal.html mehr dazu.
Timestamp, Date and Time
:: The format of %DATE% is DD.MM.YYYY for example 25.11.2016 set TEMP=%DATE% set /A MYDATE=%TEMP:~6,4%%TEMP:~3,2%%TEMP:~0,2% :: The format of %TIME% is HH:MM:SS,CS for example 23:59:59,99 (CS=Centiseconds) set TEMP=%TIME% set /A MYTIME=%TEMP:~0,2%%TEMP:~3,2%%TEMP:~6,2%%TEMP:~9,2%0 set TIMESTAMP=%MYDATE%_%MYTIME%
MYDATE
und MYTIME
sind für den TIMESTAMP
notwendig. set /a
ermöglist es im Batchfile Arithmetische Operationen auszuführen.
Buildnumber Extrahieren
for /r %%f in (%DEPLOY_FOLDER%\*.buildnumber) do ( set BUILD_NUMBER=%%~nf set /a BUILD_NUMBER += 1 )
Die BUILD_NUMBER
ist wichtig, um die Buids klar voneinander zu trennen. Diese wird immer um eins incrementiert. Dabei ist die aktuelle Buildnummer in einer leeren Datei im DEPLOY_FOLDER
gespeichert. Wichtig ist nur der Name der Datei: [BUILD_NUMBER].buildnumber
Log File vorbereiten
set LOGFILE=%LOG_FOLDER%\%TIMESTAMP%_build_%BUILD_NUMBER%.log @echo Start Deploying > %LOGFILE% @echo -- Settings >> %LOGFILE% @echo TIMESTAMP : %TIMESTAMP% (YYYYMMDD_HHMMSSms) >> %LOGFILE% @echo BUILD_NUMBER : %BUILD_NUMBER% >> %LOGFILE% @echo DEPLOY_FOLDER: \%DEPLOY_FOLDER% >> %LOGFILE% @echo BUILD_FOLDER : \%BUILD_FOLDER% >> %LOGFILE%
Mit obigen Zeilen wird das Logfile vorbereitet und enthält die korrekte Startzeit und Buildnummer. Jeder Build hat sein eigenes Logfile, die alle im LOG_FOLDER
zu finden sind.
Alles sauber halten
Um den Deploy clean zu halten werden der alte DEPLOY_FOLDER
und ARTIFACTS_FOLDER
folder komplett gelöscht und danach erst die wichtigen Dateien kopiert.
RD /S /Q %DEPLOY_FOLDER% RD /S /Q %ARTIFACTS_FOLDER% mkdir %DEPLOY_FOLDER% mkdir %ARTIFACTS_FOLDER% XCOPY %BUILD_FOLDER% /s %DEPLOY_FOLDER% /i
:: Delete unnecessary folders
RD /S /Q %DEPLOY_FOLDER%\.git
RD /S /Q %DEPLOY_FOLDER%\.idea
RD /S /Q %DEPLOY_FOLDER%\Testing
Mit dem RD /S /Q
werden unnötige Folder gelöscht. Das geschiet für alle Subfolder (/S
) und ohne Y/N Abfrage (/Q
).
Im 2. Teil erkäre ich, wie ihr die .js Files konkateniert und minimiert.
Im 3. Teil erkläre ich, wie ich die dazugehörige .html Datei mit einem script erzeuge.