ΠΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π° Π°Π»Π°ΡΠΊΠΈΡΠ΅ CICD ΡΠ΅ΡΡΠΎ Π½Π°Π²Π΅Π΄ΡΠ²Π°Π°Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ - Microsoft, Oculus, Red Hat, Π΄ΡΡΠΈ ΠΈ Ferrari ΠΈ NASA. Π‘Π΅ ΡΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° ΡΠ°ΠΊΠ²ΠΈΡΠ΅ Π±ΡΠ΅Π½Π΄ΠΎΠ²ΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ ΡΠ°ΠΌΠΎ ΡΠΎ ΡΠΊΠ°ΠΏΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΡΠΎ ΡΡΠ°ΡΡΠ°ΠΏΠΎΡ ΡΠΎΡΡΠ°Π²Π΅Π½ ΠΎΠ΄ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈ ΠΈ Π΄ΠΈΠ·Π°ΡΠ½Π΅Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΈ Π³ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ. ΠΠΎ, Π·Π½Π°ΡΠΈΡΠ΅Π»Π΅Π½ Π΄Π΅Π» ΠΎΠ΄ Π°Π»Π°ΡΠΊΠΈΡΠ΅ ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π·Π° ΠΌΠ°Π»ΠΈ ΡΠΈΠΌΠΎΠ²ΠΈ.
ΠΠΎΠ΄ΠΎΠ»Ρ ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ΅ΠΌΠ΅ Π½Π° ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠ±ΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.
Π€ΠΎΡΠΎ -
PHP ΡΠ΅Π½Π·ΠΎΡ
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 ΡΠ΅ Π·Π°ΡΠ½ΠΎΠ²Π° Π½Π° ΡΠΊΡΠΈΠΏΡΠΈ Π½Π° Perl, Π½ΠΎ Π½Π΅ Π΅ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ Π·Π½Π°Π΅ ΠΎΠ²ΠΎΡ ΡΠ°Π·ΠΈΠΊ Π·Π° Π΄Π° ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ°ΡΠ΅ ΡΠΎ Π°Π»Π°ΡΠΊΠ°ΡΠ° - ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ) ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈ Π²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ, Π° ΡΠΊΡΠΈΠΏΡΠΈΡΠ΅ ΡΠ΅ΡΡΠΎ ΡΠ΅ Π²ΠΊΠ»ΠΎΠΏΡΠ²Π°Π°Ρ Π²ΠΎ Π΄Π΅ΡΠ΅Ρ Π»ΠΈΠ½ΠΈΠΈ. ΠΠ²Π΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π½Π°ΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠΈ ΠΈ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°:
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;
};
ΠΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°ΠΌΠ΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΡΠΎ Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ ΡΠΎ Π°Π»Π°ΡΠΊΠ°ΡΠ° ΡΠΎ
ΠΡΠ²ΠΎΡΠΈ Build Service (OBS)
ΠΠ²Π° Π΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ°Π·Π²ΠΎΡΠΎΡ Π½Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈΡΠ΅. ΠΠ΅Π³ΠΎΠ²ΠΈΠΎΡ ΠΊΠΎΠ΄ Π΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΈ ΡΠ΅ Π½Π°ΠΎΡΠ° Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ Π½Π°
ΠΠΎ, Π²ΠΎ ΡΠ΅ΠΊΠΎΡ Π½Π° ΡΠ²ΠΎΠ΅ΡΠΎ ΠΏΠΎΡΡΠΎΠ΅ΡΠ΅, Π°Π»Π°ΡΠΊΠ°ΡΠ° Π½ΠΈΠΊΠΎΠ³Π°Ρ Π½Π΅ ΡΡΠ΅ΠΊΠ½Π°Π»Π° ΡΠΈΡΠΎΠΊΠ° Π·Π°Π΅Π΄Π½ΠΈΡΠ°. ΠΠ°ΠΊΠΎ
Π ΡΠ½Π΄Π΅ΠΊ
ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ ΡΠ° Π°Π»Π°ΡΠΊΠ°ΡΠ° (
Π‘ΠΈΡΡΠ΅ΠΌΠΎΡ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ
ΠΠΎΠΌΠΏΠ°Π½ΠΈΡΠ°ΡΠ° "ΠΠΎΠ»Ρ ΠΠΈΠ·Π½ΠΈ" ,Salesforce ΠΈTicketmaster . ΠΠΎ, ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π΅Π½ ΠΈ Π·Π° ΡΡΠ°ΡΡΠ°ΠΏΠΈ. ΠΠ²Π° Π΅ Π·Π°ΡΠΎΠ° ΡΡΠΎ Rundeck Π΅ Π»ΠΈΡΠ΅Π½ΡΠΈΡΠ°Π½ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° Apache v2.0. ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, Π°Π»Π°ΡΠΊΠ°ΡΠ° Π΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π»Π΅ΡΠ½Π° Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π°.
ΠΠΈΡΠ΅Π» Π½Π° Π Π΅Π΄ΠΈΡ ΠΊΠΎΡ ΡΠ°Π±ΠΎΡΠ΅Π» ΡΠΎ Π ΡΠ½Π΄Π΅ΠΊ,
ΠΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° Π½Π°ΡΠ΄Π΅ΡΠ΅ ΠΊΡΠ°ΡΠΊΠΈ Π²ΠΎΠ΄ΠΈΡΠΈ Π·Π° ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° Π°Π»Π°ΡΠΊΠ°ΡΠ° ΠΎΠ½Π»Π°ΡΠ½:
ΠΠΎΠ΄ΠΈΡ ΡΠ΅ΠΊΠΎΡ ΠΏΠΎ ΡΠ΅ΠΊΠΎΡ: ΠΠ°ΠΊΠΎ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Rundeck ΠΠ΅Ρ ΡΠ΅ΠΊΠΎΡΠΈ Π΄ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΌΠ΅ΡΡΠ°
GoCD
ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ ΡΠ° Π°Π»Π°ΡΠΊΠ°ΡΠ° (
GoCD Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈΡΠ΅ ΠΎΠ΄ ΠΎΠ½Π»Π°ΡΠ½ ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π·Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ AutoTrader, Π³Π΅Π½Π΅Π°Π»ΠΎΡΠΊΠ°ΡΠ° ΡΡΠ»ΡΠ³Π° Ancestry ΠΈ Π΄Π°Π²Π°ΡΠ΅Π»ΠΎΡ Π½Π° ΠΊΡΠ΅Π΄ΠΈΡΠ½ΠΈ ΠΊΠ°ΡΡΠΈΡΠΊΠΈ Barclaycard. Π‘Π΅ΠΏΠ°ΠΊ, Π΅Π΄Π½Π° ΡΠ΅ΡΠ²ΡΡΠΈΠ½Π° ΠΎΠ΄ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π° Π°Π»Π°ΡΠΊΠ°ΡΠ°
ΠΠΎΠΏΡΠ»Π°ΡΠ½ΠΎΡΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΌΠ΅ΡΡ ΡΡΠ°ΡΡΠ°ΠΏΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΈ ΡΠΎ Π½Π΅ΡΠ·ΠΈΠ½Π°ΡΠ° ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΎΡΡ - ΡΠ°Π° ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° Apache v2.0. ΠΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅, GoCD
Π€ΠΎΡΠΎ -
ΠΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠΎΠ±Π°ΡΠ΅ GoCD Π²ΠΎ ΠΏΡΠ°ΠΊΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΡΠ΄Π΅ΡΠ΅ Π½Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ
ΠΠ΅Π½ΠΊΠΈΠ½Ρ
ΠΠ΅Π½ΠΊΠΈΠ½Ρ Π΅ Π½Π°Π΄Π°Π»Π΅ΠΊΡ ΠΏΠΎΠ·Π½Π°Ρ ΠΈ
ΠΠ΅Π½Π΅Ρ ΡΠΎ ΠΠ΅Π½ΠΊΠΈΠ½Ρ
ΠΠΎ ΡΠ΅ΠΊΠΎΡ Π½Π° ΡΠ΅Π»ΠΎΡΠΎ ΠΏΠΎΡΡΠΎΠ΅ΡΠ΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΡ, ΠΎΠΊΠΎΠ»Ρ Π½Π΅Π³ΠΎ ΡΠ΅ ΡΠΎΡΠΌΠΈΡΠ°ΡΠ΅ Π³ΠΎΠ»Π΅ΠΌΠ° Π·Π°Π΅Π΄Π½ΠΈΡΠ°. ΠΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ°Π°Ρ Π²ΠΎ Π½ΠΈΡΠΊΠΈ Π½Π°
ΠΠ°ΠΏΠΎΡΠ½ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΠ΅Π½ΠΊΠΈΠ½Ρ: ΠΡΠΈΡΠΈΡΠ°Π»Π΅Π½ Π²ΠΎΠ΄ΠΈΡ ;Π¦Π΅Π»ΠΎΡΠ΅Π½ Π²ΠΎΠ΄ΠΈΡ Π·Π° ΠΠ΅Π½ΠΊΠΈΠ½Ρ ;- ΠΠΎΠ΄ΠΈΡ
ΠΠ΅Π½ΠΊΠΈΠ½Ρ Π·Π° ΠΏΠΎΡΠ΅ΡΠ½ΠΈΡΠΈ - ΠΠ½ΠΈΠ³Π°ΡΠ° Π½Π° ΠΡΠ΅Π½Ρ ΠΡΡΡΠ΅Ρ
ΠΠ΅Π½ΠΊΠΈΠ½Ρ 2. ΠΡΠ΄Π΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌΠ΅ "; - ΠΠ½ΠΈΠ³Π° ΠΎΠ΄ Π Π°ΡΠ°Π» ΠΠ΅ΡΠΊΠΎβ
ΠΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½Π° ΠΈΡΠΏΠΎΡΠ°ΠΊΠ° ΡΠΎ Docker ΠΈ Jenkins: Delivering Scalable Applications ".
ΠΠ΅Π½ΠΊΠΈΠ½Ρ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΊΠΎΡΠΈΡΠ½ΠΈ ΡΠΏΠΎΡΠ΅Π΄Π½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ. ΠΡΠ²ΠΈΠΎΡ Π΅ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊ
Buildbot
ΠΠ²Π° Π΅ ΡΠΈΡΡΠ΅ΠΌ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ° Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠΈΠΊΠ»ΡΡΠΎΡ Π½Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π° ΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ. Π’ΠΎΡ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΡΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠ° Π½Π° ΠΊΠΎΠ΄ΠΎΡ ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π°Ρ ΠΊΠ°ΠΊΠ²ΠΈ Π±ΠΈΠ»ΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ Π½Π΅Π³ΠΎ.
ΠΠ²ΡΠΎΡΠΎΡ Π½Π° Π°Π»Π°ΡΠΊΠ°ΡΠ° Π±Π΅ΡΠ΅ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΡ ΠΡΠ°ΡΠ°Π½ ΠΠΎΡΠ½Π΅Ρ. ΠΠ΅Π½Π΅ΡΠΊΠ° Π΅ Π½Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡ
Buildbot
Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, ΡΠΎΠ° Π½Π΅ Π΅ ΡΠ΅ DevOps Π°Π»Π°ΡΠΊΠΈ Π½Π° ΠΊΠΎΠΈ ΡΡΠ΅Π±Π° Π΄Π° ΠΎΠ±ΡΠ½Π°Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ°Π»ΠΈΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΡΠ°ΡΡΠ°ΠΏΠΈ. ΠΠ°ΡΡΠ΅ Π³ΠΈ Π²Π°ΡΠΈΡΠ΅ ΠΎΠΌΠΈΠ»Π΅Π½ΠΈ Π°Π»Π°ΡΠΊΠΈ Π²ΠΎ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅, Π° Π½ΠΈΠ΅ ΡΠ΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π·Π±ΠΎΡΡΠ²Π°ΠΌΠ΅ Π·Π° Π½ΠΈΠ² Π²ΠΎ Π΅Π΄Π΅Π½ ΠΎΠ΄ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π»ΠΈ.
ΠΠ° ΡΡΠΎ ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ Π²ΠΎ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ Π±Π»ΠΎΠ³:
Π’Π΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠ΅Π½Π΅ΡΡΠ°ΡΠΈΡΠ° - Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½Π° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΠ½Π° ΡΠ΅Π²ΠΈΠ·ΠΈΡΠ° NetApp MAX DATA: ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π·Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΡΠ°ΡΠΊΠ° ΠΈΡΡΠΎΡΠΈΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΡΠ΅: ΠΎΠ΄ chroot Π΄ΠΎ Kubernetes DDoS Π·Π°ΡΡΠΈΡΠ° Π²ΠΎ ΠΎΠ±Π»Π°ΠΊΠΎΡ Π½Π° Π΄Π°Π²Π°ΡΠ΅Π»ΠΎΡ
ΠΠ·Π²ΠΎΡ: www.habr.com