Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ CICD-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°ΡΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΊΡΡΠΏΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ β Microsoft, Oculus, Red Hat, Π΄Π°ΠΆΠ΅ Ferrari ΠΈ NASA. ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, ΡΡΠΎ ΡΠ°ΠΊΠΈΠ΅ Π±ΡΠ΅Π½Π΄Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π΄ΠΎΡΠΎΠ³ΠΈΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΡΠ΅Π±Π΅ ΡΡΠ»ΠΎΠ²Π½ΡΠΉ ΡΡΠ°ΡΡΠ°ΠΏ ΠΈΠ· ΠΏΠ°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠ°. ΠΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΈ Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄.
ΠΠ° ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ β ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ Π΄Π°Π»Π΅Π΅.
Π€ΠΎΡΠΎ β β Unsplash
CI-ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΎΠ±Π»Π΅Π³ΡΠ°ΡΡΠΈΠΉ ΡΠ±ΠΎΡΠΊΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π½Π° PHP. ΠΡΠΎ β ΡΠΎΡΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠ° . Π‘Π°ΠΌ PHPCI Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅ ΡΠ°ΠΊ Π°ΠΊΡΠΈΠ²Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ΅ΠΆΠ΄Π΅.
PHP Censor ΡΠΌΠ΅Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌΠΈ GitHub, GitLab, Mercurial ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ. ΠΠ»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Atoum, PHP Spec, Behat, Codeception. ΠΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ:
test:
atoum:
args: "command line arguments go here"
config: "path to config file"
directory: "directory to run tests"
executable: "path to atoum executable"
, ΡΡΠΎ PHP Censor Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², Π½ΠΎ Ρ ΠΎΡΡΠΈΡΡ ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ (self-hosted). ΠΡΡ Π·Π°Π΄Π°ΡΡ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ β .
Rex β ΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Remote Execution. Π‘ΠΈΡΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π» ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ Π€Π΅ΡΠ΅Π½Ρ ΠΡΠΊΠΈ (Ferenc Erki), ΡΡΠΎΠ±Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ Π² Π΄Π°ΡΠ°-ΡΠ΅Π½ΡΡΠ΅. Π Π°Π±ΠΎΡΠ° Rex ΡΡΡΠΎΠΈΡΡΡ Π½Π° Perl-ΡΠΊΡΠΈΠΏΡΠ°Ρ , Π½ΠΎ Π·Π½Π°ΡΡ ΡΡΠΎΡ ΡΠ·ΡΠΊ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ β Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²) ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ, Π° ΡΠΊΡΠΈΠΏΡΡ ΡΠ°ΡΡΠΎ ΡΠΌΠ΅ΡΠ°ΡΡΡΡ Π² Π΄Π΅ΡΡΡΡ ΡΡΡΠΎΠΊ. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Π²Ρ ΠΎΠ΄Π° Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ ΠΈ Π·Π°ΠΏΡΡΠΊΠ° uptime:
use Rex -feature => ['1.3'];
user "my-user";
password "my-password";
group myservers => "mywebserver", "mymailserver", "myfileserver";
desc "Get the uptime of all servers";
task "uptime", group => "myservers", sub {
my $output = run "uptime";
say $output;
};
ΠΠ°ΡΠ°ΡΡ ΡΠ²ΠΎΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ Ρ ΠΈ , ΠΊΠΎΡΠΎΡΡΡ Π² Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π΄ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ.
ΠΡΠΎ β ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ². ΠΡ ΠΊΠΎΠ΄ ΠΎΡΠΊΡΡΡ ΠΈ Π»Π΅ΠΆΠΈΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π½Π° . ΠΠ²ΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° β ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ . ΠΠ½Π° ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°Π»Π° Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° SuSE, Π° ΡΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½Π°Π·Π²Π°Π»Π° openSUSE Build Service. ΠΠ΅ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎ Open Build Service Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π² openSUSE, Tizen ΠΈ VideoLAN. Π‘ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Dell, SGI ΠΈ Intel. ΠΠΎ Π΅ΡΡΡ ΡΡΠ΅Π΄ΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΡΠ°ΡΡΠ°ΠΏΡ. Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ Π½ΠΈΡ Π°Π²ΡΠΎΡΡ ΡΠΎΠ±ΡΠ°Π»ΠΈ () ΠΏΡΠ΅Π΄Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ . Π‘Π°ΠΌΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½Π° β ΠΏΠΎΡΡΠ°ΡΠΈΡΡ Π΄Π΅Π½ΡΠ³ΠΈ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Ρ ΠΎΡΡΠΈΠ½Π³ ΠΈΠ»ΠΈ ΠΆΠ΅Π»Π΅Π·Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ Π΄Π»Ρ Π΅Ρ ΡΠ°Π·Π²Π΅ΡΡΠΊΠΈ.
ΠΠΎ Π·Π° Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ°ΠΊ ΠΈ Π½Π΅ ΠΎΠ±Π·Π°Π²Π΅Π»ΡΡ ΡΠΈΡΠΎΠΊΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎΠΌ. Π₯ΠΎΡΡ ΡΠ°ΡΡΡΡ Linux Developer Network, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠ΅ΠΉ Π·Π° ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΡ ΠΎΡΠΊΡΡΡΠΎΠΉ ΠΠ‘. Π½Π°ΠΉΡΠΈ Π½Π° ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΎΡΡΠΌΠ°Ρ ΠΎΡΠ²Π΅Ρ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠΉ Π²ΠΎΠΏΡΠΎΡ. ΠΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ΅Π·ΠΈΠ΄Π΅Π½ΡΠΎΠ² Quora ΠΎΡΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ Π² Π½Π° Freenode ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΎΡ ΠΎΡΠ½ΠΎ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΡΡΠ½ΠΈΡΠΈ Π½Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ Π·Π°Π΄Π°Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΎ (PDF ΠΈ EPUB). Π’Π°ΠΌ ΠΆΠ΅ Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ OBS (Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈ ΠΊΠ΅ΠΉΡΡ).
ΠΡΠΊΡΡΡΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ (), Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ Π·Π°Π΄Π°ΡΠΈ Π² Π΄Π°ΡΠ°-ΡΠ΅Π½ΡΡΠ΅ ΠΈ ΠΎΠ±Π»Π°ΠΊΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ². ΠΠ° ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π². ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Rundeck β ΡΡΠΎ Β«Π΄ΠΎΡΠΊΠ°Β» ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ ControlTier. ΠΡ Π½Π΅Ρ Rundeck ΠΎΡΠ΄Π΅Π»ΠΈΠ»ΡΡ Π² 2010 Π³ΠΎΠ΄Ρ ΠΈ ΠΎΠ±Π·Π°Π²Π΅Π»ΡΡ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠΌΠΈ Ρ Puppet, Chef, Git ΠΈ Jenkins.
Π‘ΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² , ΠΈ . ΠΠΎ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΈ Π΄Π»Ρ ΡΡΠ°ΡΡΠ°ΠΏΠΎΠ². ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Rundeck ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ Apache v2.0. ΠΡΠΈ ΡΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ.
Π Π΅Π·ΠΈΠ΄Π΅Π½Ρ Reddit, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π» Ρ Rundeck, , ΡΡΠΎ ΡΠ΅ΡΠ°Π» Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΡΡΡΠ΄Π½ΠΎΡΡΠ΅ΠΉ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. Π‘ ΡΡΠΈΠΌ Π΅ΠΌΡ ΠΏΠΎΠΌΠΎΠ³Π»ΠΈ , ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ.
Π’Π°ΠΊΠΆΠ΅ Π² ΡΠ΅ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΊΡΠ°ΡΠΊΠΈΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°:
ΠΡΠΊΡΡΡΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ () Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ ΠΊΠΎΠ΄Π°. ΠΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ»Π° Π² 2007 Π³ΠΎΠ΄Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ β ΡΠΎΠ³Π΄Π° ΠΏΡΠΎΠ΅ΠΊΡ Π½Π°Π·ΡΠ²Π°Π»ΡΡ Cruise.
Π‘ GoCD ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΡΠ΅ΡΡΡΡΠ° ΠΏΠΎ ΠΏΡΠΎΠ΄Π°ΠΆΠ΅ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ AutoTrader, Π³Π΅Π½Π΅Π°Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ Ancestry ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊ ΠΊΡΠ΅Π΄ΠΈΡΠ½ΡΡ ΠΊΠ°ΡΡ Barclaycard. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅ΡΠ²Π΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° .
ΠΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ° ΡΡΠ΅Π΄ΠΈ ΡΡΠ°ΡΡΠ°ΠΏΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ Π΅Π³ΠΎ ΠΎΡΠΊΡΡΡΠΎΡΡΡΡ β ΠΎΠ½ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ Apache v2.0. ΠΡΠΈ ΡΡΠΎΠΌ GoCD ΠΏΠ»Π°Π³ΠΈΠ½Ρ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΡΠΎ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌ ΠΠ β ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΎΠ±Π»Π°ΡΠ½ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΡΠ°Π²Π΄Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π² ΠΎΡΠ²ΠΎΠ΅Π½ΠΈΠΈ β Ρ Π½Π΅Π΅ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΆΠ°Π»ΡΡΡΡΡ Π½Π° Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π°Π³Π΅Π½ΡΡ Π΄Π»Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.

Π€ΠΎΡΠΎ β β Unsplash
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ GoCD Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΡΠΎ Π½Π° ΡΠ°ΠΉΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ . ΠΠ°ΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°ΠΌΠΈ .
Jenkins ΡΠΈΡΠΎΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΈ ΡΠ²ΠΎΠ΅ΠΎΠ±ΡΠ°Π·Π½ΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ Π² ΡΡΠ΅ΡΠ΅ CICD β ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π±Π΅Π· Π½Π΅Π³ΠΎ ΡΡΠ° ΠΏΠΎΠ΄Π±ΠΎΡΠΊΠ° Π±ΡΠ»Π° Π±Ρ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΠΉ. ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π² 2011 Π³ΠΎΠ΄Ρ, ΠΎΡΠ²Π΅ΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ° Hudson ΠΎΡ Oracle.
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ Jenkins Π² NASA, Nintendo ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΊΡΡΠΏΠ½ΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡ . ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π½Π° Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠ²Ρ Π΄ΠΎ Π΄Π΅ΡΡΡΠΈ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ. ΠΡΠΎΠ΄ΡΠΊΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ΅Π½ ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ . ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΠΎΡΡΠΈΡΡ ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Jenkins ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ β Π΅ΠΌΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ.
ΠΠ° Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π²ΠΎΠΊΡΡΠ³ Π½Π΅Π³ΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ ΠΎΠ±ΡΠΈΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΡΡΠ΅Π΄Π°Ρ Π½Π° ΠΈ . ΠΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ ΠΏΠΎ Jenkins ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π½Π° Π₯Π°Π±ΡΠ΅. ΠΡΠ»ΠΈ Π²Ρ Π±Ρ Ρ ΠΎΡΠ΅Π»ΠΈ ΡΡΠ°ΡΡ ΡΠ°ΡΡΡΡ ΠΊΠΎΠΌΡΡΠ½ΠΈΡΠΈ ΠΈ Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Jenkins, Π΅ΡΡΡ ΠΈ . ΠΡΠ΅ ΠΌΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π³Π°ΠΉΠ΄Ρ ΠΈ ΠΊΠ½ΠΈΠ³ΠΈ:
- ;
- ;
- Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ
- ΠΠ½ΠΈΠ³Π° ΠΡΠ΅Π½ΡΠ° ΠΠ°ΡΡΠ΅ΡΠ° «»;
- ΠΠ½ΠΈΠ³Π° Π Π°ΡΠ°Π»Ρ ΠΠ΅ΡΠΊΠΎ «».
Π£ Jenkins Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ². ΠΠ΅ΡΠ²ΡΠΉ β ΠΏΠ»Π°Π³ΠΈΠ½ . ΠΠ½ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΡ Jenkins Π·Π° ΡΡΠ΅Ρ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΡΡ API, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ½ΡΡΠ½Ρ Π΄Π°ΠΆΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°ΠΌ Π±Π΅Π· Π³Π»ΡΠ±ΠΎΠΊΠΈΡ ΠΏΠΎΠ·Π½Π°Π½ΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°. ΠΡΠΎΡΠΎΠΉ β ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π»Ρ ΠΎΠ±Π»Π°ΠΊΠ°. ΠΠ½Π° ΡΡΠΊΠΎΡΡΠ΅Ρ Π΄ΠΎΡΡΠ°Π²ΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΡ Π½Π° ΠΌΠ°ΡΡΡΠ°Π±Π½ΠΎΠΉ ΠΠ’-ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ Π·Π° ΡΡΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠΈΠ½Π½ΡΡ Π·Π°Π΄Π°Ρ.
ΠΡΠΎ β continuous integration ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠΊΠ»Π° ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π² Π½Π΅Π³ΠΎ Π²Π½ΠΎΡΡΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΠ²ΡΠΎΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π²ΡΡΡΡΠΏΠΈΠ» ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ ΠΡΠ°ΠΉΠ°Π½ Π£ΠΎΡΠ½Π΅Ρ (Brian Warner). Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π΅Π³ΠΎ Π½Π° ΠΏΠΎΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²Π½Π°Ρ Π³ΡΡΠΏΠΏΠ° Buildbot Oversight Committee, Π² ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ².
Buildbot ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ LLVM, MariaDB, Blender ΠΈ Dr.Web. ΠΠΎ Π΅Π³ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π² ΠΌΠ΅Π½Π΅Π΅ ΠΊΡΡΠΏΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Π²ΡΠΎΠ΄Π΅ wxWidgets ΠΈ Flathub. Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ VCS ΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ Π±ΠΈΠ»Π΄ΠΎΠ² Π·Π° ΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Python Π΄Π»Ρ ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ. Π Π°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π½ΠΈΠΌΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΈ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΡΡΡΠΎΡΠΈΠ°Π»Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΡ ΠΊΡΠ°ΡΠΊΠΎΠ΅ .
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅ DevOps ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠΌ ΠΈ ΡΡΠ°ΡΡΠ°ΠΏΠ°ΠΌ. ΠΡΠΈΠ²ΠΎΠ΄ΠΈΡΠ΅ ΡΠ²ΠΎΠΈ Π»ΡΠ±ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ , ΠΈ ΠΌΡ ΠΏΠΎΡΡΠ°ΡΠ°Π΅ΠΌΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ².
Π ΡΠ΅ΠΌ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ Π² ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΌ Π±Π»ΠΎΠ³Π΅:
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com
