Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ CICD-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°ΡΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΊΡΡΠΏΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ β Microsoft, Oculus, Red Hat, Π΄Π°ΠΆΠ΅ Ferrari ΠΈ NASA. ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, ΡΡΠΎ ΡΠ°ΠΊΠΈΠ΅ Π±ΡΠ΅Π½Π΄Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π΄ΠΎΡΠΎΠ³ΠΈΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΡΠ΅Π±Π΅ ΡΡΠ»ΠΎΠ²Π½ΡΠΉ ΡΡΠ°ΡΡΠ°ΠΏ ΠΈΠ· ΠΏΠ°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠ°. ΠΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΈ Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄.
ΠΠ° ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ β ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ Π΄Π°Π»Π΅Π΅.
Π€ΠΎΡΠΎ β
PHP Censor
CI-ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΎΠ±Π»Π΅Π³ΡΠ°ΡΡΠΈΠΉ ΡΠ±ΠΎΡΠΊΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π½Π° PHP. ΠΡΠΎ β ΡΠΎΡΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠ°
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"
Rex
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;
};
ΠΠ°ΡΠ°ΡΡ ΡΠ²ΠΎΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ Ρ
Open Build Service (OBS)
ΠΡΠΎ β ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ². ΠΡ ΠΊΠΎΠ΄ ΠΎΡΠΊΡΡΡ ΠΈ Π»Π΅ΠΆΠΈΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π½Π°
ΠΠΎ Π·Π° Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ°ΠΊ ΠΈ Π½Π΅ ΠΎΠ±Π·Π°Π²Π΅Π»ΡΡ ΡΠΈΡΠΎΠΊΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎΠΌ. Π₯ΠΎΡΡ
Rundeck
ΠΡΠΊΡΡΡΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ (
Π‘ΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²
The Walt Disney Company ,Salesforce ΠΈTicketmaster . ΠΠΎ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΈ Π΄Π»Ρ ΡΡΠ°ΡΡΠ°ΠΏΠΎΠ². ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Rundeck ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ Apache v2.0. ΠΡΠΈ ΡΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ.
Π Π΅Π·ΠΈΠ΄Π΅Π½Ρ Reddit, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π» Ρ Rundeck,
Π’Π°ΠΊΠΆΠ΅ Π² ΡΠ΅ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΊΡΠ°ΡΠΊΠΈΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°:
ΠΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ: ΠΊΠ°ΠΊ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Rundeck ΠΡΡΡ ΡΠ°Π³ΠΎΠ² ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π·Π°Π΄Π°Π½ΠΈΠΉ (jobs)
GoCD
ΠΡΠΊΡΡΡΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ (
Π‘ GoCD ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΡΠ΅ΡΡΡΡΠ° ΠΏΠΎ ΠΏΡΠΎΠ΄Π°ΠΆΠ΅ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ AutoTrader, Π³Π΅Π½Π΅Π°Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ Ancestry ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊ ΠΊΡΠ΅Π΄ΠΈΡΠ½ΡΡ
ΠΊΠ°ΡΡ Barclaycard. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅ΡΠ²Π΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°
ΠΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ° ΡΡΠ΅Π΄ΠΈ ΡΡΠ°ΡΡΠ°ΠΏΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ Π΅Π³ΠΎ ΠΎΡΠΊΡΡΡΠΎΡΡΡΡ β ΠΎΠ½ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ Apache v2.0. ΠΡΠΈ ΡΡΠΎΠΌ GoCD
Π€ΠΎΡΠΎ β
ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ GoCD Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΡΠΎ Π½Π° ΡΠ°ΠΉΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ
Jenkins
Jenkins ΡΠΈΡΠΎΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΈ
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ Jenkins
ΠΠ° Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π²ΠΎΠΊΡΡΠ³ Π½Π΅Π³ΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ ΠΎΠ±ΡΠΈΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΡΡΠ΅Π΄Π°Ρ
Π½Π°
ΠΠ°ΡΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΡ Ρ Jenkins: ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ;ΠΠΎΠ»Π½ΡΠΉ Π³Π°ΠΉΠ΄ ΠΏΠΎ Jenkins ;- Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ
Jenkins Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ - ΠΠ½ΠΈΠ³Π° ΠΡΠ΅Π½ΡΠ° ΠΠ°ΡΡΠ΅ΡΠ° Β«
Jenkins 2. ΠΡΠΈΡΡΡΠΏΠ°Π΅ΠΌ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Β»; - ΠΠ½ΠΈΠ³Π° Π Π°ΡΠ°Π»Ρ ΠΠ΅ΡΠΊΠΎ Β«
Continuous Delivery Ρ Docker ΠΈ Jenkins: Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Β».
Π£ Jenkins Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ². ΠΠ΅ΡΠ²ΡΠΉ β ΠΏΠ»Π°Π³ΠΈΠ½
Buildbot
ΠΡΠΎ β continuous integration ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠΊΠ»Π° ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π² Π½Π΅Π³ΠΎ Π²Π½ΠΎΡΡΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΠ²ΡΠΎΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π²ΡΡΡΡΠΏΠΈΠ» ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ ΠΡΠ°ΠΉΠ°Π½ Π£ΠΎΡΠ½Π΅Ρ (Brian Warner). Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π΅Π³ΠΎ Π½Π° ΠΏΠΎΡΡΡ
Buildbot
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅ DevOps ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠΌ ΠΈ ΡΡΠ°ΡΡΠ°ΠΏΠ°ΠΌ. ΠΡΠΈΠ²ΠΎΠ΄ΠΈΡΠ΅ ΡΠ²ΠΎΠΈ Π»ΡΠ±ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ , ΠΈ ΠΌΡ ΠΏΠΎΡΡΠ°ΡΠ°Π΅ΠΌΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ².
Π ΡΠ΅ΠΌ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ Π² ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΌ Π±Π»ΠΎΠ³Π΅:
Penetration testing β Π²Π½Π΅ΡΠ½ΠΈΠΉ Π°ΡΠ΄ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ NetApp MAX DATA: ΠΎΠ±Π·ΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΡΠ°ΡΠΊΠ°Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ²: ΠΎΡ chroot Π΄ΠΎ Kubernetes ΠΠ°ΡΠΈΡΠ° ΠΎΡ DDoS Π² ΠΎΠ±Π»Π°ΠΊΠ΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com