рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА CI / CD рдХреЗ рдпреБрдЧ рдореЗрдВ, рд╣рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ CI рд╕рд┐рд╕реНрдЯрдо рд╢рд╛рдорд┐рд▓ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ GitLab рдерд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдирдЬрд╝рджреАрдХреА рдмрди рдЧрдпрд╛, рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ "рджреЗрд╢реА"ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреВрд░реЗ * рдХреЗ рд░реВрдк рдореЗрдВ рдЙрджреНрдпреЛрдЧ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХреАред рдЙрддреНрдкрд╛рдж рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдмрдврд╝рддреА рд░реБрдЪрд┐ рд╕реЗ рдкреАрдЫреЗ рдирд╣реАрдВ рд░рд╣реЗ, рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ DevOps рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рд╕рдореБрджрд╛рдп рдХреЛ рдкреНрд░рд╕рдиреНрди рдХрд░рддреЗ рд╣реБрдПред
GitLab рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдорд╣реАрдиреЗ рдФрд░ рдЯреИрдЧ рдПрдХрддреНрд░реАрдХрд░рдгGitLab рд╡рд╣ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕ рдХрдИ рдирдИ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд▓рд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрдкрдХрд░рдг рдЪреБрдирдиреЗ рдХреЗ рдХрд╛рд░рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рддреЛ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕реНрдерд┐рддрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдпрджрд┐ рдЖрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЗ рдореЗрдВ рдЕрдкрдиреЗ рдЧрд┐рдЯрд▓реИрдм рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдЖрдкрдиреЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдпрд╛рдж рдХрд┐рдпрд╛ред рдЬрд┐рд╕рдореЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрднрд░рддреЗ рд╕реБрд░рдХреНрд╖рд╛ рдЕрдкрдбреЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВредрд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - i.e. рд╣рдорд╛рд░реЗ DevOps рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдФрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдорд╛рдВрдЧ рдХреА рдЧрдИ - GitLab рдХреЗ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдирд╡рд╛рдЪрд╛рд░, рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред* 5 , ┬лGitLab┬╗, : ┬л, GitHub?┬╗. тАФ , Google Trends 5- ┬лgitlab┬╗ . ┬л┬╗ , . , , ┬л┬╗ .тДЦ1: needs
рд╕реЛрдЪрд╛ dependencies
- рдпрд╣ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП? рд╢рд╛рдпрдж, рд╣рдо рдХреЗрд╡рд▓ рд╡рд╣реА рдирд╣реАрдВ рдереЗ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЧрд▓рддреА рдХреА рдереА ... рдкрд┐рдЫрд▓реА рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдВ рд╣реИрдВ, рдФрд░ рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдп рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИредрдорд╛рдирд╛ рдХрд┐ рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдПрдХ рдЪрд░рдг рдореЗрдВ рдРрд╕реА рдиреМрдХрд░рд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рдЪрд░рдг рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ (рдЖрд▓рд╕реНрдп рдкреНрд░рдЧрддрд┐ рдХрд╛ рдЗрдВрдЬрди рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)редрд╕реНрдерд┐рддрд┐:
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдЯреЗрдЬ рдбрд┐рдкреНрд▓реЙрдп рдореЗрдВ рдкреНрд░реЛрдбрдХреНрд╢рди рдФрд░ рд╕реНрдЯреЗрдЬ, рдФрд░ рд╕реЗрд▓реЗрдирд┐рдпрдо рдЯреЗрд╕реНрдЯ рджреЛрдиреЛрдВ рдХреЛ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рд╣реИрдВрдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рд░рд▓ рд╣реИ: рд╡рд╣ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдХреА рд╕рднреА рдиреМрдХрд░рд┐рдпрд╛рдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реА рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рд╣реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ, рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдм рдордВрдЪ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдкрд╣рд▓реЗ рдЯреИрдЧ рдХреЗ рднреАрддрд░ рдкрдВрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдХреНрдпрд╛ рдХрд░реЗрдВ? рдлрд┐рд░ рдмрдЪрд╛рд╡ рдХреА рдЬрд░реВрд░рдд рд╣реИ !рд╣рдо рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдкрд┐рдЫрд▓реА рдиреМрдХрд░рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рджреЗрддреЗ рд╣реИрдВ: needs:
- To production (Cluster 1)
- To production (Cluster 2)
... рдФрд░ рд╣рдореЗрдВ рдПрдХ рдиреМрдХрд░реА рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рд╕реВрдЪреАрдмрджреНрдз рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдЖрд╕рд╛рдиреА рд╕реЗ, рд╕рд╣реА? рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдирд┐рд░реНрджреЗрд╢ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ dependencies
...рдирдВрдмрд░ 2: рдлреИрд▓реА рд╣реБрдИ рд╣реИ
рдкрдврд╝рдиреЗ рдХреЗ рд░реЛрд▓ рд╕реЗ рдердХ рдЧрдП .gitlab-ci.yaml
? рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рд╕рд┐рджреНрдзрд╛рдВрдд рдЧреБрдо рд╣реИ? рддрдм рдЖрдк рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рдпрд╛рд╕ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рд╕рдВрднрд╡рдд: рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЖрдкрдХреЛ .gitlab-ci.yaml
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд░рд╛рдЬреНрдп рдореЗрдВ рд▓реЗ рдЖрдП :.base_deploy: &base_deploy
stage: deploy
script:
- my_deploy_command.sh
variables:
CLUSTER: "default-cluster"
MY_VAR: "10"
Deploy Test:
<<: *base_deploy
environment:
url: test.example.com
name: test
Deploy Production:
<<: *base_deploy
environment:
url: production.example.com
name: production
variables:
CLUSTER: "prod-cluster"
MY_VAR: "10"
рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ? рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдЖрдкрдХреА рдирдЬрд╝рд░ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ ... рд╣рдордиреЗ рди рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ variables.CLUSTER
, рдмрд▓реНрдХрд┐ рджреВрд╕рд░реА рдмрд╛рд░ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ variables.MY_VAR=10
? рдХреНрдпрд╛ рдЗрд╕ рдЪрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП base_deploy
? рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: YAML рдЗрд╕рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд┐, рдПрдВрдХрд░ рд╕реЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рдорд┐рд▓рд╛рди рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрди рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдореЗрдВ рдЬреНрдЮрд╛рдд рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВредрд╣рд╛рдВ, "рд╡рд┐рд╕реНрддрд╛рд░" рд╕рд╣реА рд╢рдмреНрдж рд╣реИ: рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рд╢реНрди рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред Extends
рд╡реЗ рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдВрдХрд░ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдорд░реНрдЬ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:.base_deploy:
stage: deploy
script:
- my_deploy_command.sh
variables:
CLUSTER: "default-cluster"
MY_VAR: "10"
Deploy Production:
extends: .base_deploy
environment:
url: production.example.com
name: production
variables:
CLUSTER: "prod-cluster"
рдпрд╣рд╛рдБ рдкрд░ рдЕрдВрддрд┐рдо рдЬреЙрдм рдбрд┐рдкреНрд▓реЙрдп рдкреНрд░реЛрдбрдХреНрд╢рдиMY_VAR
рдореЗрдВ рдбрд┐рдлреЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рд╡рд╛рд▓рд╛ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдб рджреЛрдиреЛрдВ рд╣реЛрдВрдЧреЗ CLUSTER
редрдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдРрд╕реА рдПрдХ рддрд┐рдкрд╣рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ: рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ base_deploy
рдФрд░ 20 рд╕рд░реНрдХрд┐рдЯ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рддреИрдирд╛рдд рд╣реИрдВред рдЪрд░ рдпрд╛ рдЕрдиреНрдп рдорд┐рд▓рд╛рди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП cluster
, рдЙрдиреНрд╣реЗрдВ рджреВрд╕рд░реЛрдВ рдкрд░ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ environment.name
... рдЗрд╕ рдЫреЛрдЯреА рд╕реА рдЦреБрд╢реА рдиреЗ рд╣рдореЗрдВ рдХрдИ рджреЗрд╡-рд╕рд░реНрдХрд┐рдЯреЛрдВ рдХреА рддреИрдирд╛рддреА рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ 2-3 рдЧреБрдирд╛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАредрдирдВрдмрд░ 3: рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
- рд╣рдо рд╡рд┐рд╢рд╛рд▓ YAML рдХреЛ рдХрдИ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
- 11.4 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рд╕реЗ рдХреЛрд░ рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
- docs.gitlab.com/ce/ci/yaml/#include
.gitlab-ci.yaml
рдпрд╣ рдЕрднреА рднреА 20 рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╡реИрдХреНрдпреВрдо рдХреНрд▓реАрдирд░ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╣ рдирд┐рд░реНрджреЗрд╢ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЖрдк рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдореВрд▓ рдПрдХ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ) рдХреНрдпрд╛ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╕рд╛рдордирд╛ рдХрд┐рдП рдЧрдП рдЕрдЬреНрдЮрд╛рдд рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЗ рдЪреЗрд╣рд░реЗ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕рдХреЗ рдПрдХ рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдорд┐рддреНрд░ рдорджрдж рдХрд░реЗрдЧрд╛ include
:stages:
- test
- build
- deploy
variables:
VAR_FOR_ALL: 42
include:
- local: .gitlab/ci/test.yml
- local: .gitlab/ci/build.yml
- local: .gitlab/ci/deploy-base.yml
- local: .gitlab/ci/deploy-production.yml
рдЙрдиред рдЕрдм рд╣рдо рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рддреИрдирд╛рддреА рдХрд╛ рд╕рдВрдкрд╛рджрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдкрд░реАрдХреНрд╖рдХ рдЕрдкрдиреА рдлрд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рджреЗрдЦ рднреА рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдорд░реНрдЬ рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ: рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдордЬрд╛ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИредрд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЕрдкрдиреА 20 рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд╕рд╛рде-рд╕рд╛рде рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣рдо рдЗрд╕рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рдо рдХрд╛ рддрд░реНрдХ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА? рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдХреЛрдб рдкреБрди: рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЬреНрдЮрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдХрдИ рд╕рдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:рд╡рд┐рднрд┐рдиреНрди рдХреЛрдб рд╡рд╛рд▓реА рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рджрд░реНрдЬрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ, рд▓реЗрдХрд┐рди рд╕рднреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕реАрдЖрдИ рдХреЛ рдЕрдк-рдЯреВ-рдбреЗрдЯ рд╕реАрдЖрдИ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рдмрд┐рдирд╛ - рдЙрд╕реА рддрд░рд╣ рд╕реЗ рддреИрдирд╛рдд - рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдмрд┐рдирд╛! рдЗрд╕ рд▓реЗрдЦ рдореЗрдВрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ include
рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рднреА рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ редрдирдВрдмрд░ 4: рдХреЗрд╡рд▓ / рд░реЗрдлрд░реА рдХреЛ рдЫреЛрдбрд╝рдХрд░
- рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣рд┐рдд рд╡реНрдпрд╛рдкрдХ рд╕реНрдерд┐рддрд┐рдпрд╛рдБред
- рдЪреВрдВрдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдкрд░рд┐рд╡рд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдЧрд┐рдЯрд▓реИрдм 10.0 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗ, рдЬрдмрдХрд┐ рдЕрдиреНрдп (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
changes
) 11.4 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗ ред - docs.gitlab.com/ce/ci/yaml/#onlyexcept-advanced
рдХрднреА-рдХрднреА рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реА рдмрд╛рдд рд╕реБрдирдиреЗ рд╡рд╛рд▓реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╣рдо рд╣реИрдВред рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд░рдмрдВрдзрди рдЙрдкрдХрд░рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ only
/ except
- рдЕрдм рдПрдХреАрдХреГрддред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?рд╕рдмрд╕реЗ рд╕рд░рд▓ (рдФрд░ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд╕реБрдЦрдж) рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓рдВрдШрди рдЪрд░рдгреЛрдВ:Tests:
only:
- master
except:
refs:
- schedules
- triggers
variables:
- $CI_COMMIT_MESSAGE =~ /skip tests/
рдЙрджрд╛рд╣рд░рдг рдХреА рдиреМрдХрд░реА рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╢реЗрдбреНрдпреВрд▓ рдпрд╛ рдЯреНрд░рд┐рдЧрд░ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (GitLab рдПрдкреАрдЖрдИ рдХреЙрд▓ рдФрд░ рдЯреНрд░рд┐рдЧрд░ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рд╣реИ)ред рдпрджрд┐ рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдВрджреЗрд╢ рдореЗрдВ рд╕реНрдХрд┐рдк рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕рдлрд╝реНрд░реЗрдЬрд╝ рд╣реИ рддреЛ рдиреМрдХрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреА ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, README.md
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдпрд╛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдПрдХ рдЯрд╛рдЗрдкреЛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?"рдЕрд░реЗ, 2020 рдмрд╛рд╣рд░ рд╣реИ!" рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ рд▓реЛрд╣реЗ рдХреЗ рдмрдХреНрд╕реЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреНрдпреЛрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрджрд▓рддреЗ рд╕рдордп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ? " рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ: only:changes
рдпрд╣ рдЖрдкрдХреЛ рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓реЗрдВ рдмрджрд▓рддреЗ рд╕рдордп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: only:
refs:
- master
- merge_requests
changes:
- "front/**/*"
- "jest.config.js"
- "package.json"
рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдПрдХреНрд╢рди рдХреЗ рд▓рд┐рдП - i.e. рднрд╛рдЧреЛ рдордд - рд╣рд╛рдБ except:changes
редрдирдВрдмрд░ 5: рдирд┐рдпрдо
- рд╡реНрдпрдХреНрддрд┐рдЧрдд рдиреМрдХрд░реА рдХреЗ рдирд┐рдпрдоред
- GitLab 12.3 рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред
- docs.gitlab.com/ce/ci/yaml/#rules
рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИ only:*
, рд▓реЗрдХрд┐рди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде: рдпрд╣ рдЖрдкрдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ when
ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдиреМрдХрд░реА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреВрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдк рдмрд╕ рдмрдЯрди рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдмрд┐рдирд╛ рдПрдХ рдирдИ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд▓реЙрдиреНрдЪ рдХрд┐рдП рдпрд╛ рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд┐рдПред# 6: рдкрд░реНрдпрд╛рд╡рд░рдг: auto_stop_in
рд╣рдордиреЗ рд▓реЗрдЦ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдЗрд╕ рдЕрд╡рд╕рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ рдФрд░ рдЕрднреА рддрдХ рдЗрд╕реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ "рдПрдХ рд╣реА рдмрд╛рдд" рд╣реИ рдЬреЛ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдереАредрдЖрдк GitLab рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ on_stop
- рдпрд╣ рддрдм рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдПред K рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд╛рд░реНрдп on_stop
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдордЖрд░ рдХрд╛ рд╡рд┐рд▓рдп рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЬрдм рдПрдордЖрд░ рдмрдВрдж рд╣реЛрддрд╛ рд╣реИ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд┐рд░реНрдл рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ), рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрд╕рдм рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рддрд╛рд░реНрдХрд┐рдХ, рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... рдпрджрд┐ рдорд╛рдирд╡ рдХрд╛рд░рдХ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ GitLab рдореЗрдВ рдПрдХ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ MR рдХрд╛ рд╡рд┐рд▓рдп рдХрд░рддреЗ рд╣реИрдВ git merge
ред рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ: рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ! рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рддрд░реНрдХon_stop
рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рднреВрд▓ рдЧрдП рдкрд░рд┐рд╡реЗрд╢ рдХреЛ рд╕рдВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ... рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдХрд╛рдо рдЖрддрд╛ рд╣реИ auto_stop_in
редрдмреЛрдирд╕: рдЕрд╕реНрдерд╛рдпреА рдЭреЛрдкрдбрд╝рд┐рдпреЛрдВ рдЬрдм рдкрд░реНрдпрд╛рдкреНрдд рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИрдВ
рдЗрди рд╕рднреА (рдФрд░ рдХрдИ рдЕрдиреНрдп) рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЧрд┐рдЯрд▓реИрдм рдХреЗ рдирдП рдорд╛рдВрдЧреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрднреА-рдХрднреА рдиреМрдХрд░реА рдкреВрд░реА рдХрд░рдиреЗ рдХреА рд╢рд░реНрддреЛрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИредрдЧрд┐рдЯрд▓реИрдм рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдбреНрд░реАрдо рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ ... рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдбреБрдмрдХреА рд▓рдЧрд╛рдХрд░ рдорд╛рдореВрд▓реА рдбреАрдПрд╕рдПрд▓ рд╕реЗ рдкрд░реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдЕрдиреБрднрд╡ рдХреЗ рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╣реА рдпрд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдХрдореА рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВредрд╕рдорд╛рдзрд╛рди рд╕рдВрдЦреНрдпрд╛ 1: рдПрдХ рдмрдЯрди рдХреЗ рд╕рд╛рде рджреЛ рдХрд╛рд░реНрдп рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
script:
- >
export CI_PROD_CL1_JOB_ID=`curl -s -H "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \
"https://gitlab.domain/api/v4/projects/${CI_PROJECT_ID}/pipelines/${CI_PIPELINE_ID}/jobs" | \
jq '[.[] | select(.name == "Deploy (Cluster 1)")][0] | .id'`
- >
export CI_PROD_CL2_JOB_ID=`curl -s -H "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \
"https://gitlab.domain/api/v4/projects/${CI_PROJECT_ID}/pipelines/${CI_PIPELINE_ID}/jobs" | \
jq '[.[] | select(.name == "Deploy (Cluster 2)")][0] | .id'`
- >
curl -s --request POST -H "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \
"https://gitlab.domain/api/v4/projects/${CI_PROJECT_ID}/jobs/$CI_PROD_CL1_JOB_ID/play"
- >
curl -s --request POST -H "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \
"https://gitlab.domain/api/v4/projects/${CI_PROJECT_ID}/jobs/$CI_PROD_CL2_JOB_ID/play"
рдФрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ, рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдирдВрдмрд░ 2: рдЫрд╡рд┐ рдХреЗ рдЕрдВрджрд░ рд░реВрдмреЛрдХреЙрдк рдХреЗ рд▓рд┐рдП рдПрдордЖрд░ рдЖрд░рдмреА-рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдмрджрд▓ рдЧрдпрд╛
Rubocop:
stage: test
allow_failure: false
script:
...
- export VARFILE=$(mktemp)
- export MASTERCOMMIT=$(git merge-base origin/master HEAD)
- echo -ne 'CHANGED_FILES=' > ${VARFILE}
- if [ $(git --no-pager diff --name-only ${MASTERCOMMIT} | grep '.rb$' | wc -w |awk '{print $1}') -gt 0 ]; then
git --no-pager diff --name-only ${MASTERCOMMIT} | grep '.rb$' |tr '\n' ' ' >> ${VARFILE} ;
fi
- if [ $(wc -w ${VARFILE} | awk '{print $1}') -gt 1 ]; then
werf --stages-storage :local run rails-dev --docker-options="--rm --user app --env-file=${VARFILE}" -- bash -c /scripts/rubocop.sh ;
fi
- rm ${VARFILE}
рдЕрдВрджрд░ рдХреЛрдИ рдЫрд╡рд┐ рдирд╣реАрдВ рд╣реИ .git
, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдкрдбрд╝рд╛редрдиреЛрдЯ: рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╛рдирдХ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреА рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рддрд╛рд╢ рдкреНрд░рдпрд╛рд╕ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрдгрди рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИредрд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб # 3: рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╕рдордп рдЕрдиреНрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдиреМрдХрд░реА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдВ
before_script:
- |
echo '### Trigger review: infra'
curl -s -X POST \
-F "token=$REVIEW_TOKEN_INFRA" \
-F "ref=master" \
-F "variables[REVIEW_NS]=$CI_ENVIRONMENT_SLUG" \
-F "variables[ACTION]=auto_review_start" \
https://gitlab.example.com/api/v4/projects/${INFRA_PROJECT_ID}/trigger/pipeline
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдФрд░ рдЖрд╡рд╢реНрдпрдХ (рдорд╛рдЗрдХреНрд░реЛрд╕рд┐рд╕реНрдЯрд░реНрд╕ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ) рдмрд╛рдд рдПрдХ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд░ рдХреЛ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рд░реЛрд▓ рдХрд░ рд░рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдПрдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд (рдКрдкрд░ рд╡рд░реНрдгрд┐рдд) рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: only:
refs:
- triggers
variables:
- $ACTION == "auto_review_start"
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:- рдЯреНрд░рд┐рдЧрд░ рдкрд░ рдиреМрдХрд░реА рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдВрдзреЗ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирдВрдмрд░ 1ред рдпрд╣ рдПрдкреАрдЖрдИ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдиреМрдХрд░реА рдХрд╛ рдирд╛рдо рдкрд╛рд░рд┐рдд рд╣реБрдЖ рд╣реИред
- рд╣рд╛рдВ, рдлрд╝рдВрдХреНрд╢рди рдЧрд┐рдЯрд▓реИрдм рдХреЗ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ (рдИрдИ) рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
GitLab рдЯреНрд░реЗрдВрдбреНрд╕ рдХреЗ рд╕рд╛рде рд░рд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдзреАрд░реЗ-рдзреАрд░реЗ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реБрдЦрдж рд╣реИрдВ рдФрд░ рджреЗрд╡рдУрдкреНрд╕ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдорд╛рдВрдЧ рдореЗрдВ рд╣реИрдВред рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИрдВ, рдФрд░ рдЬрдм рдмреБрдирд┐рдпрд╛рджреА рдХреНрд╖рдорддрд╛рдПрдВ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╣рдореЗрд╢рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдорд░реНрдерди рдореЗрдВ рдЗрддрдиреА рднрд╡реНрдпрддрд╛ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛ рд╣реИ ... рддреЛ рдпрд╣ рдЧреАрддрд╛рд▓рд╛рдм рдХреА рдирдИ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдпрд╛ рд╣рдорд╛рд░реЗ рдпреЛрдЧрджрд╛рди рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ редрдкреБрдирд╢реНрдЪ
рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рднреА рдкрдврд╝реЗрдВ: