CICD рдЙрдкрдХрд░рдгрдХрд╛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдкреНрд░рд╛рдп: рдареВрд▓рд╛ рдХрдореНрдкрдиреАрд╣рд░реВрд▓рд╛рдИ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реНрдЫрдиреН - рдорд╛рдЗрдХреНрд░реЛрд╕рдлреНрдЯ, рдУрдХреБрд▓рд╕, рд░реЗрдб рд╣реНрдпрд╛рдЯ, рдлреЗрд░рд╛рд░реА рд░ рдирд╛рд╕рд╛ рдкрдирд┐ред рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдХрд┐ рддреНрдпрд╕реНрддрд╛ рдмреНрд░рд╛рдиреНрдбрд╣рд░реВрд▓реЗ рдорд╣рдБрдЧреЛ рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрд╕рдБрдЧ рдорд╛рддреНрд░ рдХрд╛рдо рдЧрд░реНрдЫрдиреН рдЬреБрди рдПрдХ рдЬреЛрдбреА рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВ рд░ рдПрдХ рдбрд┐рдЬрд╛рдЗрдирд░рдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрд▓реЗ рдЦрд░реНрдЪ рдЧрд░реНрди рд╕рдХреНрджреИрдиред рддрд░ рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧ рд╕рд╛рдирд╛ рдЯреЛрд▓реАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрд▓рдмреНрдз рдЫред
рд╣рд╛рдореА рддрдкрд╛рдИрдВрд▓рд╛рдИ рддрд▓ рдмрддрд╛рдЙрдиреЗрдЫреМрдВ рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдХреЗрдорд╛ рдзреНрдпрд╛рди рджрд┐рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
╨д╨╛╤В╨╛ -
PHP рд╕реЗрдиреНрд╕рд░
рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд CI рд╕рд░реНрднрд░ рдЬрд╕рд▓реЗ 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"
рд░реЗрдХреНрд╕
Rex Remote Execution рдХреЛ рд▓рд╛рдЧреА рдЫреЛрдЯреЛ рдЫред рдбрд╛рдЯрд╛ рд╕реЗрдиреНрдЯрд░рдорд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрди рдЗрдиреНрдЬрд┐рдирд┐рдпрд░ рдлреЗрд░реЗрдиреНрдХ рдПрд░реНрдХреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рд░реЗрдХреНрд╕ рдкрд░реНрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫ, рддрд░ рдЙрдкрдХрд░рдгрд╕рдБрдЧ рдЕрдиреНрддрд░реНрдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рдпреЛ рднрд╛рд╖рд╛ рдЬрд╛рдиреНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрди - рдзреЗрд░реИ рдХрд╛рд░реНрдпрд╣рд░реВ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдлрд╛рдЗрд▓рд╣рд░реВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреЗ) рдкреНрд░рдХрд╛рд░реНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рдкреНрд░рд╛рдпрдГ рджрд╕ рд▓рд╛рдЗрдирд╣рд░реВрдорд╛ рдлрд┐рдЯ рд╣реБрдиреНрдЫрдиреНред рдпрд╣рд╛рдБ рдзреЗрд░реИ рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рд▓рдЧ рдЗрди рдЧрд░реНрди рд░ рдЕрдкрдЯрд╛рдЗрдо рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рдЫ:
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)
рдпреЛ рд╡рд┐рддрд░рдг рдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЕрдиреБрдХреВрд▓рди рдХреЛ рд▓рд╛рдЧреА рдПрдХ рдкреНрд▓реЗрдЯрдлрд░реНрдо рд╣реЛред рдпрд╕рдХреЛ рдХреЛрдб рдЦреБрд▓рд╛ рдЫ рд░ рднрдгреНрдбрд╛рд░рдорд╛ рдЫ
рддрд░ рдпрд╕рдХреЛ рдЕрд╕реНрддрд┐рддреНрд╡рдорд╛, рдЙрдкрдХрд░рдгрд▓реЗ рдХрд╣рд┐рд▓реНрдпреИ рд╡реНрдпрд╛рдкрдХ рд╕рдореБрджрд╛рдп рдкреНрд░рд╛рдкреНрдд рдЧрд░реЗрдХреЛ рдЫреИрдиред рдпрджреНрдпрдкрд┐
рд░реБрдиреНрдбреЗрдХ
рдЙрдкрдХрд░рдг рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН (
рдкреНрд░рдгрд╛рд▓реА рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ
рд╡рд╛рд▓реНрдЯ рдбрд┐рдЬреНрдиреА рдХрдореНрдкрдиреА ,SalesForce ╨╕рдЯрд┐рдХрдЯрдорд╛рд╕реНрдЯрд░ ред рддрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдХрд╛ рд▓рд╛рдЧрд┐ рдкрдирд┐ рдЙрдкрдпреБрдХреНрдд рдЫред рдпреЛ рдХрд┐рдирднрдиреЗ Rundeck Apache v2.0 рд▓рд╛рдЗрд╕реЗрдиреНрд╕ рдЕрдиреНрддрд░реНрдЧрдд рдЗрдЬрд╛рдЬрддрдкрддреНрд░ рджрд┐рдЗрдПрдХреЛ рдЫред рдпрд╕рдмрд╛рд╣реЗрдХ, рдЙрдкрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдПрдХрджрдо рд╕рдЬрд┐рд▓реЛ рдЫред
рдПрдХ Reddit рдирд┐рд╡рд╛рд╕реА рдЬрд╕рд▓реЗ Rundeck рд╕рдВрдЧ рдХрд╛рдо рдЧрд░реНрдпреЛ,
рддрдкрд╛рдЗрдБ рдЙрдкрдХрд░рдг рдЕрдирд▓рд╛рдЗрди рд╕реЗрдЯрдЕрдк рдЧрд░реНрди рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЧрд╛рдЗрдбрд╣рд░реВ рдкрдирд┐ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:
рдЪрд░рдгрдмрджреНрдз рдЧрд╛рдЗрдб: рдХрд╕рд░реА Rundeck рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ рд░реЛрдЬрдЧрд╛рд░реА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдкрд╛рдБрдЪ рдЪрд░рдгрд╣рд░реВ
GoCD
рдЙрдкрдХрд░рдг рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН (
GoCD рдЕрдирд▓рд╛рдЗрди рдХрд╛рд░ рдмрд┐рдХреНрд░реА рд╕рд╛рдЗрдЯ AutoTrader, рд╡рдВрд╢рд╛рд╡рд▓реА рд╕реЗрд╡рд╛ рдкреВрд░реНрд╡рдЬ рд░ рдХреНрд░реЗрдбрд┐рдЯ рдХрд╛рд░реНрдб рдкреНрд░рджрд╛рдпрдХ Barclaycard рдмрд╛рдЯ рдЗрдиреНрдЬрд┐рдирд┐рдпрд░рд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдпрджреНрдпрдкрд┐, рдЙрдкрдХрд░рдг рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рдПрдХ рдЪреМрдерд╛рдИ
рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрд╣рд░реВ рдмреАрдЪ рд╕реЗрд╡рд╛рдХреЛ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдпрд╕рдХреЛ рдЦреБрд▓рд╛рдкрди рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ - рдпреЛ Apache v2.0 рдЗрдЬрд╛рдЬрддрдкрддреНрд░ рдЕрдиреНрддрд░реНрдЧрдд рд╡рд┐рддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫред рдПрдХреИ рд╕рдордпрдорд╛, GoCD
╨д╨╛╤В╨╛ -
рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЕрднреНрдпрд╛рд╕рдорд╛ GoCD рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯрдорд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
рдЬреЗрдирдХрд┐рдиреНрд╕
рдЬреЗрдирдХрд┐рдиреНрд╕ рд╡реНрдпрд╛рдкрдХ рд░реВрдкрдорд╛ рдкрд░рд┐рдЪрд┐рдд рд░
рдЖрдЬ рдЬреЗрдирдХрд┐рдиреНрд╕ рд╕рдВрдЧ
рдпрдиреНрддреНрд░рдХреЛ рд╕рдореНрдкреВрд░реНрдг рдЕрд╕реНрддрд┐рддреНрд╡рдорд╛, рдпрд╕рдХреЛ рд╡рд░рд┐рдкрд░рд┐ рдареВрд▓реЛ рд╕рдореБрджрд╛рдп рдЧрдарди рднрдПрдХреЛ рдЫред рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рд╕рдХреНрд░рд┐рдп рд░реВрдкрдорд╛ рдереНрд░реЗрдбрд╣рд░реВрдорд╛ рд╕рдЮреНрдЪрд╛рд░ рдЧрд░реНрдЫрдиреН
рдЬреЗрдирдХрд┐рдиреНрд╕рдХреЛ рд╕рд╛рде рд╕реБрд░реВ рдЧрд░реНрджреИ: рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧрд╛рдЗрдб ;рдЬреЗрдирдХрд┐рдиреНрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрдг рдЧрд╛рдЗрдб ;- рдЧрд╛рдИрдб
рд╢реБрд░реБрдЖрддреАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЬреЗрдирдХрд┐рдиреНрд╕ - рдмреНрд░реЗрдиреНрдЯ рд▓рд╕реНрдЯрд░рдХреЛ рдкреБрд╕реНрддрдХ
рдЬреЗрдирдХрд┐рдиреНрд╕ реи. рд╕реБрд░реБ рдЧрд░реМрдВ ┬╗; - Rafal Leshko рджреНрд╡рд╛рд░рд╛ рдкреБрд╕реНрддрдХ "
рдбрдХрд░ рд░ рдЬреЗрдиреНрдХрд┐рдиреНрд╕рдХреЛ рд╕рд╛рде рдирд┐рд░рдиреНрддрд░ рдбреЗрд▓рд┐рднрд░реА: рд╕реНрдХреЗрд▓реЗрдмрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдбреЗрд▓рд┐рднрд░ рдЧрд░реНрджреИ "ред
рдЬреЗрдирдХрд┐рдиреНрд╕рд╕рдБрдЧ рдзреЗрд░реИ рдЙрдкрдпреЛрдЧреА рдкрдХреНрд╖ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рдЫрдиреНред рдкрд╣рд┐рд▓реЛ рдПрдХ рдкреНрд▓рдЧрдЗрди рд╣реЛ
рдмрд┐рд▓реНрдбрдмреЛрдЯ
рдпреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рдирд┐рд░реНрдорд╛рдг рд░ рдкрд░реАрдХреНрд╖рдг рдЪрдХреНрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рд╣реЛред рдпрд╕рд▓реЗ рдХреЛрдбрдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ рдпрд╕рдорд╛ рдХреБрдиреИ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫред
рдЙрдкрдХрд░рдгрдХрд╛ рд▓реЗрдЦрдХ рдЗрдиреНрдЬрд┐рдирд┐рдпрд░ рдмреНрд░рд╛рдпрди рд╡рд╛рд░реНрдирд░ рдерд┐рдПред рдЖрдЬ рдЙрдиреА рдбреНрдпреБрдЯреАрдорд╛ рдЫрдиреН
рдмрд┐рд▓реНрдбрдмреЛрдЯ
рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рддреНрдпреЛ рд╕рдмреИ рд╣реЛрдЗрди DevOps рдЙрдкрдХрд░рдгрд╣рд░реВ рдЬреБрди рд╕рд╛рдирд╛ рд╕рдВрд╕реНрдерд╛рд╣рд░реВ рд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрд╣рд░реВрд▓реЗ рдзреНрдпрд╛рди рджрд┐рдиреБрдкрд░реНрдЫред рдЖрдлреНрдиреЛ рдордирдкрд░реНрдиреЗ рдЙрдкрдХрд░рдгрд╣рд░реВ рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдорд╛ рджрд┐рдиреБрд╣реЛрд╕реН, рд░ рд╣рд╛рдореА рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдордзреНрдпреЗ рдПрдХрдорд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВред
рд╣рд╛рдореАрд▓реЗ рдХрд░реНрдкреЛрд░реЗрдЯ рдмреНрд▓рдЧрдорд╛ рдХреЗ рд▓реЗрдЦреНрдЫреМрдВ:
рдкреНрд░рд╡реЗрд╢ рдкрд░реАрдХреНрд╖рдг - рдмрд╛рд╣реНрдп рд╕реБрд░рдХреНрд╖рд╛ рдЕрдбрд┐рдЯ NetApp MAX DATA: рд╕рдорд╛рдзрд╛рди рдХреНрд╖рдорддрд╛рд╣рд░реВрдХреЛ рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЗрддрд┐рд╣рд╛рд╕: рдХреНрд░реЛрдЯ рджреЗрдЦрд┐ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд╕рдореНрдо рдкреНрд░рджрд╛рдпрдХрдХреЛ рдХреНрд▓рд╛рдЙрдбрдорд╛ DDoS рд╕реБрд░рдХреНрд╖рд╛
рд╕реНрд░реЛрдд: www.habr.com