CICD рдЯреВрд▓реНрд╕рдЪреЗ рдбреЗрд╡реНрд╣рд▓рдкрд░ рдЕрдиреЗрдХрджрд╛ рдореЛрдареНрдпрд╛ рдХрдВрдкрдиреНрдпрд╛рдВрдирд╛ рдХреНрд▓рд╛рдпрдВрдЯ рдореНрд╣рдгреВрди рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛рдд - Microsoft, Oculus, Red Hat, рдЕрдЧрджреА рдлреЗрд░рд╛рд░реА рдЖрдгрд┐ NASA. рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рдЕрд╕реЗ рдмреНрд░рдБрдб рдХреЗрд╡рд│ рдорд╣рд╛рдЧрдбреНрдпрд╛ рд╕рд┐рд╕реНрдЯрдорд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рдЬреЗ рдХрд╛рд╣реА рд╡рд┐рдХрд╛рд╕рдХ рдЖрдгрд┐ рдбрд┐рдЭрд╛рдЗрдирд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрд▓рд╛ рдкрд░рд╡рдбрдд рдирд╛рд╣реАрдд. рдкрд░рдВрддреБ рд╕рд╛рдзрдирд╛рдВрдЪрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧ рд▓рд╣рд╛рди рд╕рдВрдШрд╛рдВрд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ.
рдЖрдкрдг рдЦрд╛рд▓реА рдХрд╛рдп рд▓рдХреНрд╖ рджреЗрдК рд╢рдХрддрд╛ рддреЗ рдЖрдореНрд╣реА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рд╛рдВрдЧреВ.
╨д╨╛╤В╨╛ -
PHP рд╕реЗрдиреНрд╕рд░
рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рд╕реАрдЖрдп рд╕рд░реНрд╡реНрд╣рд░ рдЬреЛ PHP рдордзреНрдпреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ рд╕реЛрдкреЗ рдХрд░рддреЛ. рд╣рд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдЪрд╛ рдПрдХ рдХрд╛рдЯрд╛ рдЖрд╣реЗ
PHP рд╕реЗрдиреНрд╕реЙрд░ 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"
рд░реЗрдХреНрд╕
рд░реЗрдХреНрд╕ рд░рд┐рдореЛрдЯ рдПрдХреНрдЭрд┐рдХреНрдпреВрд╢рдирд╕рд╛рдареА рд▓рд╣рд╛рди рдЖрд╣реЗ. рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░рдордзреАрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрднрд┐рдпрдВрддрд╛ рдлреЗрд░реЗрдВрдХ рдПрд░рдХреА рдпрд╛рдВрдиреА рд╣реА рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реА рд╣реЛрддреА. рд░реЗрдХреНрд╕ рдкрд░реНрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЯреВрд▓рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА рд╣реА рднрд╛рд╖рд╛ рдЬрд╛рдгреВрди рдШреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА - рдмрд╣реБрддреЗрдХ рдСрдкрд░реЗрд╢рдиреНрд╕ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдлрд╛рдпрд▓реА рдХреЙрдкреА рдХрд░рдгреЗ) рдлрдВрдХреНрд╢рди рд▓рд╛рдпрдмреНрд░рд░реАрдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╣реБрддреЗрдХрджрд╛ рджрд╣рд╛ рдУрд│реАрдВрдордзреНрдпреЗ рдмрд╕рддрд╛рдд. рдПрдХрд╛рдзрд┐рдХ рд╕рд░реНрд╡реНрд╣рд░рдордзреНрдпреЗ рд▓реЙрдЧ рдЗрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдЕрдкрдЯрд╛рдЗрдо рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдпреЗрдереЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ:
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;
};
рдЖрдореНрд╣реА рдпрд╛рд╕рд╣ рдЯреВрд▓рд╕рд╣ рдЖрдкрд▓реА рдУрд│рдЦ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ
рдУрдкрди рдмрд┐рд▓реНрдб рд╕рд░реНрд╡реНрд╣рд┐рд╕ (OBS)
рд╡рд┐рддрд░рдгрд╛рдЪреНрдпрд╛ рд╡рд┐рдХрд╛рд╕рд╛рд╕рд╛рдареА рд╣реЗ рдПрдХ рд╡реНрдпрд╛рд╕рдкреАрда рдЖрд╣реЗ. рддреНрдпрд╛рдЪрд╛ рдХреЛрдб рдЦреБрд▓рд╛ рдЖрд╣реЗ рдЖрдгрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдпреЗрдереЗ рдЖрд╣реЗ
рдкрд░рдВрддреБ рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд, рд╕рд╛рдзрдирд╛рдиреЗ рдХрдзреАрд╣реА рд╡рд┐рд╕реНрддреГрдд рд╕рдореБрджрд╛рдп рдорд┐рд│рд╡рд▓рд╛ рдирд╛рд╣реА. рддрд░реА
рд░реБрдВрджреЗрдХ
рдУрдкрди рдЯреВрд▓ (
рдордзреНрдпреЗ рдкреНрд░рдгрд╛рд▓реА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ
рд╡реЙрд▓реНрдЯ рдбрд┐рд╕реНрдиреЗ рдХрдВрдкрдиреА ,рд╕реЗрд▓реНрд╕рдмреЙрд▓реНрд╕ ╨╕рддрд┐рдХрд┐рдЯрдорд╛рд╕реНрддрд░ . рдкрдг рд╣рд╛ рдкреНрд░рдХрд▓реНрдк рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрд╕рд╛рдареАрд╣реА рдпреЛрдЧреНрдп рдЖрд╣реЗ. рдпрд╛рдЪреЗ рдХрд╛рд░рдг рдЕрд╕реЗ рдХреА рд░реБрдВрджреЗрдХрд▓рд╛ Apache v2.0 рдкрд░рд╡рд╛рдиреНрдпрд╛рдЕрдВрддрд░реНрдЧрдд рдкрд░рд╡рд╛рдирд╛ рджреЗрдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рд╢рд┐рд╡рд╛рдп, рд╕рд╛рдзрди рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрд╣реЗ.
рдПрдХ Reddit рд░рд╣рд┐рд╡рд╛рд╕реА рдЬреНрдпрд╛рдиреЗ Rundeck рд╕рд╣ рдХрд╛рдо рдХреЗрд▓реЗ,
рдСрдирд▓рд╛рдЗрди рдЯреВрд▓ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рдереЛрдбрдХреНрдпрд╛рдд рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рджреЗрдЦреАрд▓ рд╢реЛрдзреВ рд╢рдХрддрд╛:
рд╕реНрдЯреЗрдк рдмрд╛рдп рд╕реНрдЯреЗрдк рдЧрд╛рдЗрдб: рд░рдирдбреЗрдХ рдХрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛рд╡реЗ рдиреЛрдХрд▒реНрдпрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрд╛рдЪ рдкрд╛рдпрд▒реНрдпрд╛
GoCD
рдУрдкрди рдЯреВрд▓ (
GoCD рдСрдирд▓рд╛рдЗрди рдХрд╛рд░ рд╡рд┐рдХреНрд░реА рд╕рд╛рдЗрдЯ рдСрдЯреЛрдЯреНрд░реЗрдбрд░, рд╡рдВрд╢рд╛рд╡рд│реА рд╕реЗрд╡рд╛ рдкреВрд░реНрд╡рдЬ рдЖрдгрд┐ рдХреНрд░реЗрдбрд┐рдЯ рдХрд╛рд░реНрдб рдкреНрд░рджрд╛рддрд╛ Barclaycard рдордзреАрд▓ рдЕрднрд┐рдпрдВрддреЗ рд╡рд╛рдкрд░рддрд╛рдд. рддрдерд╛рдкрд┐, рд╕рд╛рдзрди рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдПрдХ рдЪрддреБрд░реНрдерд╛рдВрд╢
рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдордзреАрд▓ рд╕реЗрд╡реЗрдЪреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдореЛрдХрд│реЗрдкрдгрд╛рджреНрд╡рд╛рд░реЗ рд╕реНрдкрд╖реНрдЯ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ - рддреА Apache v2.0 рдкрд░рд╡рд╛рдиреНрдпрд╛рдЕрдВрддрд░реНрдЧрдд рд╡рд┐рддрд░рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, GoCD
╨д╨╛╤В╨╛ -
рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд░рд╛рд╡ рдордзреНрдпреЗ GoCD рд╡рд╛рдкрд░реВрди рдкрд╣рд╛рдпрдЪреЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░ рд╢реЛрдзреВ рд╢рдХрддрд╛
рдЬреЗрдирдХрд┐рдиреНрд╕
рдЬреЗрдирдХрд┐рдиреНрд╕ рд╡реНрдпрд╛рдкрдХрдкрдгреЗ рдУрд│рдЦрд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдгрд┐
рдЖрдЬ рдЬреЗрдирдХрд┐рдиреНрд╕рд╕реЛрдмрдд
рд╡рд╛рджреНрдпрд╛рдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рдЕрд╕реНрддрд┐рддреНрд╡рд╛рд╡рд░, рддреНрдпрд╛рдЪреНрдпрд╛рднреЛрд╡рддреА рдПрдХ рдореЛрдард╛ рд╕рдореБрджрд╛рдп рддрдпрд╛рд░ рдЭрд╛рд▓рд╛ рдЖрд╣реЗ. рд╡рд╛рдкрд░рдХрд░реНрддреЗ рд╕рдХреНрд░рд┐рдпрдкрдгреЗ рдереНрд░реЗрдбреНрд╕рд╡рд░ рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрддрд╛рдд
рдЬреЗрдирдХрд┐рдиреНрд╕рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреЗ: рдЕрдзрд┐рдХреГрдд рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ ;рдЬреЗрдирдХрд┐рдиреНрд╕рд╕рд╛рдареА рдкреВрд░реНрдг рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ ;- рдорд╛рд░реНрдЧрджрд░реНрд╢рди
рдирд╡рд╢рд┐рдХреНрдпрд╛рдВрд╕рд╛рдареА рдЬреЗрдирдХрд┐рдиреНрд╕ - рдмреНрд░реЗрдВрдЯ рд▓рд╕реНрдЯрд░рдЪреЗ рдкреБрд╕реНрддрдХ
рдЬреЗрдирдХрд┐рдиреНрд╕ 2. рдЪрд▓рд╛ рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛ "; - рд░рдлрд╛рд▓ рд▓реЗрд╢реНрдХреЛ рдпрд╛рдВрдЪреЗ рдкреБрд╕реНрддрдХ "
рдбреЙрдХрд░ рдЖрдгрд┐ рдЬреЗрдирдХрд┐рдиреНрд╕рд╕рд╣ рд╕рддрдд рд╡рд┐рддрд░рдг: рд╕реНрдХреЗрд▓реЗрдмрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рддрд░рд┐рдд рдХрд░рдгреЗ ┬╗.
рдЬреЗрдирдХрд┐рдиреНрд╕рдЪреЗ рдЕрдиреЗрдХ рдЙрдкрдпреБрдХреНрдд рд╕рд╛рдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрд╣реЗрдд. рдкреНрд░рдердо рдПрдХ рдкреНрд▓рдЧрдЗрди рдЖрд╣реЗ
рдмрд┐рд▓реНрдбрдмреЙрдЯ
рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрдЪреЗ рдмрд┐рд▓реНрдб рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдЪрдХреНрд░ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реА рдПрдХ рд╕рддрдд рдПрдХреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдХреЛрдбрдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА рдмрджрд▓ рдХреЗрд▓реНрдпрд╛рд╡рд░ рддреЗ рдЖрдкреЛрдЖрдк рддреНрдпрд╛рдЪреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрдкрд╛рд╕рддреЗ.
рдпрд╛ рдЙрдкрдХрд░рдгрд╛рдЪреЗ рд▓реЗрдЦрдХ рдЕрднрд┐рдпрдВрддрд╛ рдмреНрд░рд╛рдпрди рд╡реЙрд░реНрдирд░ рд╣реЛрддреЗ. рдЖрдЬ рддреЛ рдбреНрдпреБрдЯреАрд╡рд░ рдЖрд╣реЗ
рдмрд┐рд▓реНрдбрдмреЙрдЯ
рдЕрд░реНрдерд╛рдд, рдПрд╡рдвреЗрдЪ рдирд╛рд╣реА DevOps рдЯреВрд▓реНрд╕ рдЬреНрдпрд╛рд╡рд░ рд▓рд╣рд╛рди рд╕рдВрд╕реНрдерд╛ рдЖрдгрд┐ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкреНрд╕рдиреА рд▓рдХреНрд╖ рджрд┐рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ. рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рддреБрдордЪреА рдЖрд╡рдбрддреА рд╕рд╛рдзрдиреЗ рджреНрдпрд╛ рдЖрдгрд┐ рдЖрдореНрд╣реА рдЦрд╛рд▓реАрд▓рдкреИрдХреА рдПрдХрд╛ рд╕рд╛рдордЧреНрд░реАрдордзреНрдпреЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ.
рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдмреНрд▓реЙрдЧрдордзреНрдпреЗ рдЖрдореНрд╣реА рдХрд╛рдп рд▓рд┐рд╣рд┐рддреЛ:
рдкреНрд░рд╡реЗрд╢ рдЪрд╛рдЪрдгреА - рдмрд╛рд╣реНрдп рд╕реБрд░рдХреНрд╖рд╛ рдСрдбрд┐рдЯ NetApp MAX DATA: рд╕рдорд╛рдзрд╛рди рдХреНрд╖рдорддрд╛рдВрдЪреЗ рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди рдХрдВрдЯреЗрдирд░рдЪрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЗрддрд┐рд╣рд╛рд╕: рдХреНрд░реВрдЯ рддреЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдкрд░реНрдпрдВрдд рдкреНрд░рджрд╛рддреНрдпрд╛рдЪреНрдпрд╛ рдХреНрд▓рд╛рдЙрдбрдордзреНрдпреЗ DDoS рд╕рдВрд░рдХреНрд╖рдг
рд╕реНрддреНрд░реЛрдд: www.habr.com