Automatizați asamblarea și controlul versiunilor proiectului

Automatizați asamblarea și controlul versiunilor proiectului

Pentru ce este?

La elaborarea unui proiect de către un grup de programatori, o sarcină tipică este de a asambla următoarea versiune a proiectului, apoi testați această versiune, apoi reasamblați și așa mai departe. Ce s-ar colecta o altă versiune, care este responsabil pentru adunarea va trebui să ia cea mai recentă versiune a fișierului, pentru a crește numărul de versiune, construi proiectul, și dacă totul merge bine pus la încercare într-un anumit loc sau mai multe fișiere gata. De regulă, trebuie să păstrați istoricul versiunilor. Ar trebui să fie instalate cu biblioteci Delphi - respectiv, trecerea la o nouă versiune de Delphi sau la oricare dintre bibliotecile pot provoca o mulțime de probleme: să se bazeze pe noua versiune poate fi inutilizabil și trebuie să revină la o versiune mai veche de Delphi, etc.







În general, aceasta este o poveste despre modul în care puteți automatiza procesul de construire și de trimitere a versiunilor.

Unde și cum să colectați proiectul.

Vreau să fac o rezervă imediat, toate rețetele descrise mai jos funcționează pentru Delphi 6 (Update1, Update2).

Dacă vorbim de asamblare automată, atunci vom folosi în mod natural linia de comandă. În pachetul standard Delphi, există două programe cu care puteți colecta proiecte: dcc32 și make. Amândoi sunt în drumul lui $ Delphi \ Bin.

DCC32 colectează un fișier de proiect trimis ca linie de comandă. Alți parametri (căi de bibliotecă, opțiuni de compilare etc.) pot fi de asemenea specificați pe linia de comandă sau în fișierul dcc32.cfg din $ Delphi \ Bin.

Efectuați colectarea tuturor proiectelor specificate în fișierul makefile (de fapt, acesta solicită secvențial dcc32 pentru ele). În plus, în acest fișier text obișnuit, puteți edita convenabil căile de bibliotecă, precum și parametrii pentru compilare.

Deci, creați un director unde vor fi localizate fișierele. De exemplu

Decriptați: Actualizare Delphi 6 + Update 2 + RTL 1.

Copiem următoarele fișiere din directorul Delphi corespunzător în același director:
BIN \ brc32.exe
BIN \ brcc32.exe
BIN \ dcc32.cfg
BIN \ DCC32.EXE
BIN \ lnkdfm60.dll
BIN \ make.exe
BIN \ rlink32.dll
BIN \ rw32core.dll
SOURCE \ *. *

Total, aproximativ 30 de milioane și, în principiu, este suficient, dar pentru simplitate și viteză, copiați și directoarele "IMPORTURI" și "LIB". Se pare că este de aproximativ 110 milioane, dar care sunt îngrijorați de astfel de dimensiuni? Rămâne să rezolvați fișierul dcc32.cfg:
-aWinTypes = Windows; WinProcs = Windows; DbiProcs = BDE; DbiTypes = BDE; DbiErrs = BDE
-uC: \ Delphi \ D6U2RTL1 \ Lib; C: \ Delphi \ D6U2Rtl1 \ Bin
-iC: \ Delphi \ D6U2RTL1 \ Lib

Toate acestea pot fi scrise într-un martor și ridică întotdeauna sistemul de proiecte de construcție pe Delphi în 5 minute pe orice computer.

Vom crea un proiect în Delphi pentru a compila cu compilatorul nostru: Delphi-New application. Apoi salvați C: \ Delphi \ TestVer \ testVer.dpr. Apoi salvăm fișierul grupului nostru de proiecte (de exemplu, din Managerul de proiect - "Save Prgect Group as"). Acum corectăm linia din fișierul testver.bpg

Ne compilam proiectul:

Deci, dacă ați făcut-o corect, ar fi trebuit să aveți Testver.exe

Regulile bunei tonuri

Nu-mi place când toate fișierele sunt în gramada și, prin urmare, ne modernizăm puțin structura directorului - vom crea foldere separate pentru surse, module compilate și binare. În mod corespunzător SOURCE, DCU, BIN. C: \ Delphi \ TESTVER \ BIN
C: \ Delphi \ TESTVER \ DCU
C: \ Delphi \ TESTVER \ SOURCE \






C: \ Delphi \ TESTVER \ SOURCE \ TestVer.bpg
C: \ Delphi \ TESTVER \ SOURCE \ TestVer.dpr
C: \ Delphi \ TESTVER \ SOURCE \ TestVer.res
C: \ Delphi \ TESTVER \ SOURCE \ Unit1.dfm
C: \ Delphi \ TESTVER \ SOURCE \ Unit1.pas

= Director de ieșire EXE
# -I

= Include directoare
# -N

= Directorul de ieșire DCU
# -W = Mesaje de avertizare a ieșirii
# -Q = Compilarea liniștită
# -CG = țintă grafică
DCC = $ (ROOT) \ bin \ dcc32.exe $ ** -B -e $ (BIN) $ N (DCU) -u $ (LIB) -w -q -CG

TestVer.exe: $ (ProjectPath) \ Sursă \ TestVer.dpr
cd $ (ProjectPath) \ Sursă
$ (DCC)

Acum poți și colecta:

Conectăm biblioteci suplimentare.

Mai întâi, să includeți informații despre versiunea fișierului în proiect și să îl extrageți. În Delphi, faceți următoarele opțiuni de proiect Când activați această opțiune, Delphi creează automat un fișier de resurse compilat cu extensia "res". Dacă vă uitați la fișierul proiectului (TestVer.dpr), puteți vedea directiva compilatorului, care spune compilatorului că trebuie să conectați un fișier cu numele proiectului și extensia "res".

Pentru a afișa aceste informații, voi folosi Biblioteca de coduri Jedi. deși acest lucru nu este un principiu (pentru o lungă perioadă de timp am folosit RXLib, dar vremurile se schimbă ...). Am copiat doar sursele de bibliotecă în C: \ Delphi \ D6U2RTL \ Lib_AddOn \ JCL. Acum, regulăm un mic cod sursă (Source1.rar) pe care îl scriem pe handler-ul evenimentului pe FormCreate: // Skipped
utilizări
JclFileUtils;

Cititorul atent a observat deja că fișierul de configurare utilizează deja variabila LIB. Modificați fișierul TestVer.bpg puțin pentru a găsi căile pentru biblioteci LIBADDON = C: \ Delphi \ D6U2RTL1 \ Lib_AddOn
LIB = C: \ Delphi \ D6U2RTL1 \ Lib; $ (LIBADDON) \ JCL

Astfel, prin modificarea variabilei LIB, putem conecta cu ușurință noile biblioteci.

Compilarea unui fișier res folosind brcc32

Totul este bine, din Delphi IDE putem gestiona deja informațiile din fișierul de resurse. Dar cum să creați un astfel de fișier fără Delphi IDE? Pentru aceasta există o utilitate brcc32. Cu acest utilitar, puteți compila fișiere de resurse. Voi da un exemplu din care sper ca totul va fi clar. Deci, creați fișierul TestVer.rc: MAINICON ICON ir.ico
1 VERSIONINFO
FILEVERSION 1,0,0,2
PRODUCTVERSION 1,0,0,2
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP

BLOCK "VarFileInfo"
VALUE "Traducere", 1049, 1251
>

Ca rezultat, ar trebui să obțineți fișierul TestVer.res.

= Director de ieșire EXE
# -I

= Include directoare
# -N

= Directorul de ieșire DCU
# -W = Mesaje de avertizare a ieșirii
# -Q = Compilarea liniștită
# -CG = țintă grafică
DCC = $ (ROOT) \ bin \ dcc32.exe $ ** -B -e $ (BIN) $ N (DCU) -u $ (LIB) -w -q -CG
BRCC = $ (ROOT) \ bin \ brcc32.exe

TestVer.exe: $ (PROJECTPATH) \ Sursă \ TestVer.dpr
cd $ (PROJECTPATH) \ Sursă
$ (BRCC) $ *
$ (DCC)

Schimbarea automată a numărului versiunii în fișierul rc

Noi folosim pentru acest program, scris de un anumit Chris Morris (Incverrc.rar). L-am târât cu CodeCentral și probabil că se mai poate găsi acolo. Utilizarea acestui program este foarte simplă - trebuie să specificați numele fișierului rc ca parametru. De exemplu,

Determinarea versiunii fișierului în fișierele batch

Acum putem scrie un fișier batch care crește automat numărul versiunii și construiește proiectul. Dar aș dori ca acest fișier de comandă să știe cum să determine numărul de versiune al proiectului rezultat și, de exemplu, să împacheteze codul sursă al proiectului într-o arhivă cu acest număr. Este mai ușor decât să scriu un mic program, nu l-am găsit. Deci, programul ExeVer scoate la ieșirea standard un număr de versiune formatat. Pentru asamblare, sunt necesare JCL și rxLib. Exemple ale programului de lucru de mai jos: C: \ Delphi \ ExeVer> ExeVer.exe C: \ Delphi \ TestVer \ Bin \ TestVer.exe% J.% I.% R.% B
1.0.0.2

C: \ Delphi \ ExeVer> ExeVer.exe C: \ Delphi \ TestVer \ Bin \ TestVer.exe% J-% I-% 2R-% 3B
1-0-00-002

C: \ Delphi \ ExeVer> ExeVer.exe C: \ Delphi \ TestVer \ Bin \ TestVer.exe% 3J
001

Algoritmul Adunării

Procedăm conform algoritmului următor.

echo - vss. vom lua cele mai recente versiuni de fișiere
rem ------------------------------------------------- ---------------
echo - vss. CheckOut% NAMEPROJECT% .rc
echo -. crește numărul de versiune% NAMEPROJECT% .rc
C: \ Delphi \ Incverrc \ IncVerrc.exe -f% NAMEPROJECT% .rc
rem ------------------------------------------------- ---------------
ecou - facem: începem să colectăm proiectul

% MAKE% -f% NAMEPROJECT% .bpg>. \ Bin \ Out.txt

dacă errorlevel 1 a ajuns endError

ecou - make: Exe a făcut cu succes
ret retur informațiile de versiune
echo - vss. CheckIn% NAMEPROJECT% .rc

echo un -r -ep1 .rar -s -m5 -X * .scc. \ Archiv \% NAMEPROJECT% _ %% verBuild %%. .rar. \ Source \ *. * >> T $$. liliac
ecou pe
t $$ / așteptați
del t $$ bat
sa terminat

endError
rem ------------ a apărut o eroare la momentul compilării ------------------

echo - vss. undoCheckOut% PROJECTNAME% .rc
ecou.
echo ERROR a se vedea out.txt
pauză
cd. \ Bin

concluzie

aplicaţii







Trimiteți-le prietenilor: