рдкреИрдВрдерд┐рдпрди рдореЗрдВ рд╣рдорд╛рд░реЗ рдЕрддрд┐рдерд┐ рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдирд┐рд░реНрдорд╛рддрд╛ GitLab CI/CD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
╨Т
рдореИрдВ рдЕрдХреНрд╕рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдПрдХрд▓ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрддрд╛ рд╣реВрдВред
рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпрд╛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдиреЛрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдпреВрдЖрд░рдПрд▓ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдмрд╛рд░реА рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдЦреБрд╢реА рдХреА рдмрд╛рдд рд╣реИ: "рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпрд╣рд╛рдВ рди рджреЗрдЦреЗрдВред"
рд▓реЗрдХрд┐рди рдкреИрдВрдерд┐рдпрди рдХреЗ рдкрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдпрд╛ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди (рд╕реАрдЖрдИ/рд╕реАрдбреА) рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд▓рдЪреАрд▓рд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдХрд┐рд╕реА рднреА рдЯреВрд▓ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдпрд╣ рднреА рджреЗрдЦрд╛ рдХрд┐ рдЯреАрдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдирдХреЗ рдкрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рд╕реАрдЖрдИ/рд╕реАрдбреА рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрдкрдХрд░рдг рд╣реИрдВред рдЖрдкрдХреЛ рдХреЛрдб рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдирд┐рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдзрд░-рдЙрдзрд░ рднрд╛рдЧрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЯреВрд▓ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдкрд░
рдореБрдЭреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдкрд╕рдВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдкреИрдиреНрдерд┐рдпреЙрди рдХреЛ GitLab рд╕реЗ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП рддрд╛рдХрд┐ GitLab рдкрд░ рдореБрдЦреНрдп рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдУрдВ рдХреЛ Pantheon рдореЗрдВ рдореБрдЦреНрдп рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдФрд░ GitLab рдкрд░ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдкреИрдВрдерд┐рдпрди рдореЗрдВ рдорд▓реНрдЯреАрдбреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХреЛрдб рдмрдирд╛ рдФрд░ рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ GitLab рдФрд░ Pantheon рдХреЗ рдмреАрдЪ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреЗ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдФрд░ Drupal рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред
рдмреЗрд╢рдХ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ,
рдкрд░рд┐рдЪрдп
рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкреИрдВрдерд┐рдпрди рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдЗрдЯ рдХреЛ рддреАрди рддрддреНрд╡реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдХреЛрдб, рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдлрд╝рд╛рдЗрд▓реЗрдВред
рдХреЛрдб рдореЗрдВ рд╕реАрдПрдордПрд╕ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреИрд╕реЗ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдХреЛрд░, рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рдереАрдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдкреИрдВрдерд┐рдпрди рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рдореАрдбрд┐рдпрд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдпрд╛рдиреА рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐рдпрд╛рдВред рдЖрдорддреМрд░ рдкрд░ рд╡реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкрд▓реЛрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ Git рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред
рдорд╛рдиреНрдпрддрд╛рдУрдВ
рдкреИрдВрдерд┐рдпрди рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдкрд░ рдореЗрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╣рд▓рд╛рддрд╛ рд╣реИ pantheon-gitlab-blog-demo
. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП. рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдЖрдк Drupal рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХреБрдЫ рдЪреАрдЬрд╝реЗрдВ рдмрджрд▓рдиреА рд╣реЛрдВрдЧреАред
рдореИрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реВрдБрдЧрд╛
рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдмрдирд╛рдПрдВ
рдЕрдм
рдпрджрд┐ рдЖрдкрдХреЗ рд╣рд╛рде рдХреБрдЫ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╣рдЯрд╛рдирд╛ рдпрд╛ рдЬреЛрдбрд╝рдирд╛, рддреЛ рдзреИрд░реНрдп рд░рдЦреЗрдВред рд╕рд╛рдЗрдЯ рдЕрднреА рддрдХ GitLab рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди GitLab рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдВред
рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдкреИрдВрдерд┐рдпрди рд╡реЗрдмрд╕рд╛рдЗрдЯ рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдореЛрдб рдХреЛ рдЧрд┐рдЯ рдореЗрдВ рдмрджрд▓реЗрдВред
GitLab рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛
рдЕрдм рдЖрдкрдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдХреЛрдб рдХреЛ рдкреИрдВрдерд┐рдпрди рд╕рд╛рдЗрдЯ рд╕реЗ GitLab рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреИрдВрдерд┐рдпрди рд╕рд╛рдЗрдЯ рдХреЗ Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдХреЛрдб рдХреЛ рдХреНрд▓реЛрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ GitLab рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рднреЗрдЬрддреЗ рд╣реИрдВред
рдЗрд╕реЗ рдЖрд╕рд╛рди рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП,
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗрдмрд╕рд╛рдЗрдЯ рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ Git рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдХреНрд▓реЛрди рд╕реЗ рдХрдорд╛рдВрдб рдХреЛ рдХреЙрдкреА рдХрд░рдХреЗ рдкреИрдВрдерд┐рдпрди рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдХреНрд▓реЛрди рдХрд░реЗрдВред
рдпрджрд┐ рдЖрдкрдХреЛ рд╕рд╣рд╛рдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝реЗрдВ
рдЕрдм рдЪрд▓реЛ рдмрджрд▓реЛ git remote origin
рдкреИрдВрдерд┐рдпрди рдХреЗ рдмрдЬрд╛рдп GitLab рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ╨║╨╛╨╝╨░╨╜╨┤╨╛╨╣ git remote
рдЖрдЗрдП GitLab рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рд╡рд░рдг рдкреГрд╖реНрда рдкрд░ рдХреНрд▓реЛрди рдбреНрд░реЙрдкрдбрд╛рдЙрди рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА URL рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВред рдЖрдЗрдП SSH рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдХреНрд▓реЛрди рдЪреБрдиреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ SSH рдХреБрдВрдЬреА рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред
╨Я╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О git remote
рдХреЛрдб рднрдВрдбрд╛рд░ рдХреА рд╕реНрдерд╛рдиреАрдп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рд▓рд┐рдП - origin
. рдЗрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╕реА git remote set-url origin [URL ╤А╨╡╨┐╨╛╨╖╨╕╤В╨╛╤А╨╕╤П GitLab]
, рдЬрд╣рд╛рдВ рдХреЛрд╖реНрдардХ рдХреЗ рдмрдЬрд╛рдп рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ URL рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ git push origin master --force
рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдХреЛрдб рдХреЛ рдкреИрдВрдерд┐рдпрди рд╕реЗ GitLab рдкрд░ рдкреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
-рдмрд▓ рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╣реЛрддреА рд╣реИред рдлрд┐рд░ рдЯреАрдореЛрдВ рдореЗрдВ
git push
рдпрд╣ GitLab рдкрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛.
рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдФрд░ рд╡реЗрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░рдирд╛
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдкреИрдВрдерд┐рдпрди рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ SSH рдХреБрдВрдЬреА рдХреИрд╕реЗ рдЬреЛрдбрд╝реА рдереА? SSH рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ GitLab рдФрд░ Pantheon рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
GitLab рдХреЗ рдкрд╛рд╕ рдЙрддреНрдХреГрд╖реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╣реИред рдЪрд▓реЛ рджреЗрдЦрддреЗ рд╣реИрдВ
рдЕрдм рд╣рдо рдкрд╣рд▓реЗ рджреЛ рдЪрд░рдг рдкреВрд░реЗ рдХрд░реЗрдВрдЧреЗ: рдЖрдЗрдП ssh-keygen рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдПрдХ рдирдИ SSH рдХреБрдВрдЬреА рдЬреЛрдбрд╝реА рдмрдирд╛рдПрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдЬреА рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВ.
рдлрд┐рд░ рд╣рдо рдкреВрдЫреЗрдВрдЧреЗ SSH_PRIVATE_KEY
рдЬреИрд╕рд╛
рддреАрд╕рд░реЗ рдФрд░ рдЪреМрдереЗ рдЪрд░рдг рдореЗрдВ рд╣рдо рдПрдХ рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдВрдЧреЗ .gitlab-ci.yml
рдЗрд╕ рддрд░рд╣ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде:
before_script:
# See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
рдЖрдЗрдП рдЕрднреА рддрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рддрд┐рдмрджреНрдз рди рдХрд░реЗрдВ .gitlab-ci.yml
, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдФрд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдЕрдм рд╣рдо рдкрд╛рдБрдЪрд╡рд╛рдБ рдЪрд░рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЛ рдЙрди рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдмрд┐рд▓реНрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ.
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо GitLab рд╕реЗ рдкреИрдВрдерд┐рдпрди рддрдХ рдкрд╣реБрдБрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдкреИрдВрдерд┐рдпрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ
рдпрд╛рдж рд░рдЦреЗрдВ: рдирд┐рдЬреА SSH GitLab рдореЗрдВ рд╣реИ, рдЦреБрд▓рд╛ SSH рдкреИрдиреНрдерд┐рдпреЙрди рдореЗрдВ рд╣реИред
рдЖрдЗрдП рдХреБрдЫ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ PANTHEON_SITE рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдЖрдкрдХреА рдорд╢реАрди рдкрд░ рдкреИрдВрдерд┐рдпрди рд╕рд╛рдЗрдЯ рдХрд╛ рдирд╛рдо рд╣реИред
рдорд╢реАрди рдкрд░ рдирд╛рдо Git рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХреНрд▓реЛрди рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИред рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕рд╛рдЗрдЯ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдХреНрд▓реЛрди рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрдерд╛рдиреАрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдирд╛рдо рд╣реЛрдЧрд╛ред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдЗрдП рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░реЗрдВ PANTHEON_GIT_URL
. рдпрд╣ рдкреИрдВрдерд┐рдпрди рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА URL рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред
рдмрд┐рдирд╛, рдХреЗрд╡рд▓ SSH рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА URL рджрд░реНрдЬ рдХрд░реЗрдВ
git clone
рдФрд░ рдЕрдВрдд рдореЗрдВ рдорд╢реАрди рдкрд░ рд╕рд╛рдЗрдЯ рдХрд╛ рдирд╛рдоред
рдЙрдлрд╝реНрдлрд╝. рдпрд╣ рд╣реЛ рдЧрдпрд╛, рдЕрдм рд╣рдо рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ .gitlab-ci.yml
.
рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдмрдирд╛рдПрдБ
рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣рдо GitLab CI рдХреЗ рд╕рд╛рде рдЬреЛ рдХрд░реЗрдВрдЧреЗ рд╡рд╣ рдХрд╛рдлреА рд╣рдж рддрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рд╣рдордиреЗ рдЕрддреАрдд рдореЗрдВ Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░, рдЖрдЗрдП рдкреИрдиреНрдерд┐рдпреЙрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рджреВрд╕рд░реЗ рджреВрд░рд╕реНрде Git рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдлрд┐рд░ рдХреЛрдб рдХреЛ GitLab рд╕реЗ Pantheon рдкрд░ рдкреБрд╢ рдХрд░реЗрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ deploy
╨╕ deploy:dev
, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкреИрдВрдерд┐рдпрди рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рддреИрдирд╛рдд рд╣реЛрдВрдЧреЗред рдкрд░рд┐рдгрд╛рдореА рдлрд╝рд╛рдЗрд▓ .gitlab-ci.yml
рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ:
stages:
- deploy
before_script:
# See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
deploy:dev:
stage: deploy
environment:
name: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
only:
- master
рдЪрд░ SSH_PRIVATE_KEY, PANTHEON_SITE
╨╕ PANTHEON_GIT_URL
рдкрд░рд┐рдЪрд┐рдд рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП - рд╣рдордиреЗ рдпреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдкрд╣рд▓реЗ рд╣реА рд╕реЗрдЯ рдХрд░ рд▓рд┐рдП рд╣реИрдВред рдЗрди рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЗ рд╕рд╛рде рд╣рдо рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ .gitlab-ci.yml
рдХрдИ рдмрд╛рд░, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЕрдВрдд рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ, рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░реЗрдВ рдФрд░ рднреЗрдЬреЗрдВ .gitlab-ci.yml
рдЧрд┐рдЯрд▓реИрдм рдкрд░.
рддреИрдирд╛рддреА рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ
рдпрджрд┐ рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛, рддреЛ рдХрд╛рд░реНрдп deploy:dev
GitLab CI/CD рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓реЗрдЧрд╛ рдФрд░ рдПрдХ рдХрдорд┐рдЯ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдЧрд╛ .gitlab-ci.yml
рдкреИрдВрдерд┐рдпрди рдореЗрдВ. рдЖрдЗрдпреЗ рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ.
рдкреИрдВрдерд┐рдпрди рдХреЛ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдереНрд░реЗрдб рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
рдпрд╣рд╛рдВ рд╣рдо рдореЗрд░реА рдкрд╕рдВрджреАрджрд╛ рдкреИрдВрдерд┐рдпрди рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ -
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдЗрдП рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдИ Git рд╢рд╛рдЦрд╛ рдмрдирд╛рдПрдВ git checkout -b multidev-support
. рдЕрдм рдЪрд▓реЛ рдлрд┐рд░ рд╕реЗ рдХреБрдЫ рдмрджрд▓рддреЗ рд╣реИрдВ .gitlab-ci.yml
.
рдореИрдВ рдкреИрдВрдерд┐рдпрди рдкрд░реНрдпрд╛рд╡рд░рдг рдирд╛рдо рдореЗрдВ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рд╕рдВрдЦреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓рд╛ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рд╣реИ mr-1
, рджреВрд╕рд░рд╛ - mr-2
рдЖрджрд┐ред
рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдмрджрд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкреИрдВрдерд┐рдпрди рд╢рд╛рдЦрд╛ рдирд╛рдореЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред GitLab рдкрд░ рдпрд╣ рдЖрд╕рд╛рди рд╣реИ - рдЖрдкрдХреЛ рдмрд╕ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рд╣рдо рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ $CI_MERGE_REQUEST_IID
рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЖрдЗрдП рдпрд╣ рд╕рдм рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдирдпрд╛ рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдорд▓реНрдЯреАрдбреЗрд╡ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝реЗрдВ .gitlab-ci.yml
.
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Checkout the merge request source branch
- git checkout $CI_COMMIT_REF_NAME
# Add the Pantheon git repository as an additional remote
- git remote add pantheon $PANTHEON_GIT_URL
# Push the merge request source branch to Pantheon
- git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force
only:
- merge_requests
рдпрд╣ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ deploy:dev
, рдХреЗрд╡рд▓ рд╢рд╛рдЦрд╛ рдкреИрдиреНрдерд┐рдпреЙрди рдХреЛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ, рдирд╣реАрдВ master
.
рд╣рдордиреЗ рдЕрджреНрдпрддрди рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝ рджреА рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░ рджреА рд╣реИ .gitlab-ci.yml
, рдФрд░ рдЕрдм GitLab рдореЗрдВ рдПрдХ рдирдИ рд╢рд╛рдЦрд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ git push -u origin multidev-support
.
рдЕрдм рд╢рд╛рдЦрд╛ рд╕реЗ рдПрдХ рдирдпрд╛ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдмрдирд╛рддреЗ рд╣реИрдВ multidev-support
рджрдмрд╛рдиреЗ рд╕реЗ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдПрдБ.
рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕реАрдЖрдИ/рд╕реАрдбреА рдХрд╛рд░реНрдп рдХреИрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ deploy:multidev
.
рджреЗрдЦрд┐рдП, рдкреИрдВрдерд┐рдпрди рдХреЛ рдПрдХ рдирдпрд╛ рд╕реВрддреНрд░ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдкреИрдВрдерд┐рдпрди рд╕рд╛рдЗрдЯ рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рдорд▓реНрдЯреАрдбреЗрд╡ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╡рд╣рд╛рдВ рдирдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдирд╣реАрдВ рджрд┐рдЦреЗрдЧрд╛
рдЖрдЗрдП Git рд╢рд╛рдЦрд╛рдПрдБ рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░рд╛ рд╕реВрддреНрд░ mr-1
рдкреЗрдВрдерд┐рдпрди рдкрд╣реБрдБрдЪреЗред рдЖрдЗрдП рдПрдХ рд╢рд╛рдЦрд╛ рд╕реЗ рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдПрдВ mr-1
.
рд╣рдордиреЗ рдПрдХ рдорд▓реНрдЯреАрдбреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдпрд╛ рд╣реИ, рдЕрдм GitLab рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдЕрдиреБрднрд╛рдЧ рдХреЛ рджреЗрдЦреЗрдВ рд╕рдВрдЪрд╛рд▓рди > рд╡рд╛рддрд╛рд╡рд░рдг. рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рджреЗрдЦреЗрдВрдЧреЗ dev
╨╕ mr-1
.
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝реА рд╣реИ environment
рдирд╛рдо рдХреЗ рд╕рд╛рде name
╨╕ url
рд╕реАрдЖрдИ/рд╕реАрдбреА рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВред рдпрджрд┐ рд╣рдо рдЦреБрд▓реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдкреИрдВрдерд┐рдпрди рдкрд░ рдорд▓реНрдЯреАрдбреЗрд╡ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдпреВрдЖрд░рдПрд▓ рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдорд▓реНрдЯреАрдбреЗрд╡ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░реЗрдВ
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдпрд╣рд╛рдВ рд░реБрдХ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдорд▓реНрдЯреАрдбреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдирд╛ рдпрд╛рдж рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреИрдВрдерд┐рдпрди рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ рд╣реИ
рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдирдП рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдЗрдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдИ рд╢рд╛рдЦрд╛ рдмрдирд╛рдПрдВ git checkout -b auto-multidev-creation
.
GitLab CI/CD рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЯрд░реНрдорд┐рдирд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЯрд░реНрдорд┐рдирд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╢реАрди рдЯреЛрдХрди рдФрд░ рдЯрд░реНрдорд┐рдирд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдЯреЗрдирд░ рдЫрд╡рд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
PANTHEON_MACHINE_TOKEN
.
рдпрджрд┐ рдЖрдк рднреВрд▓ рдЧрдП рд╣реИрдВ рдХрд┐ GitLab рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ, рддреЛ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛ рд╡рд╣рд╛рдВ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ
PANTHEON_SITE
.
рдЯрд░реНрдорд┐рдирд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдбреЙрдХрд░рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛
рдпрджрд┐ рдЖрдк рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ Dockerfile
, рдореЗрд░реА рдЫрд╡рд┐ рд▓реЗ рд▓реЛ registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
рдФрд░ рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝реЗрдВ.
рдЯрд░реНрдорд┐рдирд╕ рдПрдХ PHP рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП PHP рдЫрд╡рд┐ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдХрдВрдкреЛрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯрд░реНрдорд┐рдирд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ Dockerfile
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ:
# Use the official Composer image as a parent image
FROM composer:1.8
# Update/upgrade apk
RUN apk update
RUN apk upgrade
# Make the Terminus directory
RUN mkdir -p /usr/local/share/terminus
# Install Terminus 2.x with Composer
RUN /usr/bin/env COMPOSER_BIN_DIR=/usr/local/bin composer -n --working-dir=/usr/local/share/terminus require pantheon-systems/terminus:"^2"
рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдиреЗ рдФрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ рдЫрд╡рд┐рдпрд╛рдВ рдмрдирд╛рдПрдВ рдФрд░ рдкреБрд╢ рдХрд░реЗрдВ ╨▓ Dockerfile
рдФрд░ рдЗрд╕реЗ GitLab рдкрд░ рдкреБрд╢ рдХрд░реЗрдВред
рдЦрдВрдб рдЦреЛрд▓рдирд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА GitLab рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВред рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рдпреЛрдЬрдирд╛ рдХреЗ рдореБрддрд╛рдмрд┐рдХ рд╣реБрдЖ рддреЛ рд╣рдорд╛рд░реА рдЫрд╡рд┐ рд╡рд╣реАрдВ рд░рд╣реЗрдЧреАред' рдЫрд╡рд┐ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд▓рд┐рдЦреЗрдВ - рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ .gitlab-ci.yml
.
рдЕрдиреБрднрд╛рдЧ script
рд╕рдорд╕реНрдпрд╛ рдореЗрдВ deploy:multidev
рдмрдврд╝рдирд╛ рд╢реБрд░реВ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдБред рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ private/multidev-deploy.sh:
#!/bin/bash
# Store the mr- environment name
export PANTHEON_ENV=mr-$CI_MERGE_REQUEST_IID
# Authenticate with Terminus
terminus auth:login --machine-token=$PANTHEON_MACHINE_TOKEN
# Checkout the merge request source branch
git checkout $CI_COMMIT_REF_NAME
# Add the Pantheon Git repository as an additional remote
git remote add pantheon $PANTHEON_GIT_URL
# Push the merge request source branch to Pantheon
git push pantheon $CI_COMMIT_REF_NAME:$PANTHEON_ENV --force
# Create a function for determining if a multidev exists
TERMINUS_DOES_MULTIDEV_EXIST()
{
# Stash a list of Pantheon multidev environments
PANTHEON_MULTIDEV_LIST="$(terminus multidev:list ${PANTHEON_SITE} --format=list --field=id)"
while read -r multiDev; do
if [[ "${multiDev}" == "$1" ]]
then
return 0;
fi
done <<< "$PANTHEON_MULTIDEV_LIST"
return 1;
}
# If the mutltidev doesn't exist
if ! TERMINUS_DOES_MULTIDEV_EXIST $PANTHEON_ENV
then
# Create it with Terminus
echo "No multidev for $PANTHEON_ENV found, creating one..."
terminus multidev:create $PANTHEON_SITE.dev $PANTHEON_ENV
else
echo "The multidev $PANTHEON_ENV already exists, skipping creating it..."
fi
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдирд┐рдЬреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реИ рдФрд░ deploy:multidev
рдлрд╝рд╛рдЗрд▓ .gitlab-ci.yml
рддрд╛рдХрд┐ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдирд┐рдХрд▓реЗ:
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Run the multidev deploy script
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requests
рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдирд┐рд░реНрдорд┐рдд рдХрд╕реНрдЯрдо рдЫрд╡рд┐ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдВ, рддреЛ рдЖрдЗрдП рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдЬреЛрдбрд╝реЗрдВ image
рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдпреВрдЖрд░рдПрд▓ рд╕реЗ рд▓реЗрдХрд░ .gitlab-ci.yml
. рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ .gitlab-ci.yml
:
image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
stages:
- deploy
before_script:
# See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
deploy:dev:
stage: deploy
environment:
name: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
only:
- master
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Run the multidev deploy script
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requests
рдЬреЛрдбрд╝реЗрдВ, рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░реЗрдВ рдФрд░ рднреЗрдЬреЗрдВ private/multidev-deploy.sh
╨╕ .gitlab-ci.yml
. рдЕрдм рд╣рдо GitLab рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ рдФрд░ CI/CD рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдзреИрд░реНрдп рд░рдЦреЗрдВ: рдорд▓реНрдЯреАрдбреЗрд╡ рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рдХрдИ рдорд┐рдирдЯ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд┐рд░ рд╣рдо рдкреИрдВрдерд┐рдпрди рдкрд░ рдорд▓реНрдЯреАрдбреЗрд╡ рд╕реВрдЪреА рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдУрд╣ рдЪрдорддреНрдХрд╛рд░! рдмрд╣реБрджреЗрд╡ рдкрд░реНрдпрд╛рд╡рд░рдг mr-2
рдкрд╣рд▓реЗ рд╕реЗ рдпрд╣рд╛рдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЬрдм рд╣рдордиреЗ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЦреЛрд▓рдирд╛ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рддреЛ рдореЗрд░реА рдЯреАрдо рдХреЛ рдмрд╣реБрдд рдордЬрд╝рд╛ рдЖрдпрд╛ред
GitLab рдФрд░ Pantheon рдХреЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЯреВрд▓ рдХреЗ рд╕рд╛рде, рдЖрдк GitLab рдХреЛ Pantheon рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪреВрдБрдХрд┐ рд╣рдо GitLab CI/CD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдмрдврд╝рдиреЗ рдХреА рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реЛрдЧреАред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рджрд┐рдП рдЧрдП рд╣реИрдВ:
- рдПрдХ рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рдЬреЛрдбрд╝реЗрдВ.
- рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВ.
- рдХреЛрдб рдорд╛рдирдХреЛрдВ рдХрд╛ рдкрд╛рд▓рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝реЗрдВред
- рдЬреЛрдбрд╝рдирд╛
рдЧрддрд┐рд╢реАрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реБрд░рдХреНрд╖рд╛ рдкрд░реАрдХреНрд╖рдг .
рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк GitLab, Pantheon рдФрд░ рдСрдЯреЛрдореЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВред
PS рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЯрд░реНрдорд┐рдирд╕, рдкреИрдВрдерд┐рдпрди рдХрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓,
рдкреИрдВрдерд┐рдпрди рдореЗрдВ рд╣рдордиреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг 2 рдкрд░ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ build:project:create
рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкреИрдиреНрдерд┐рдпреЙрди рдЯреЛрдХрди рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд╣ рдХрдВрдкреЛрдЬрд░ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдирдореВрдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рддреИрдирд╛рдд рдХрд░реЗрдЧреА, рдЧрд┐рдЯрд▓реИрдм рдореЗрдВ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдЧреА, рдПрдХ рдирдИ рдкреИрдВрдерд┐рдпрди рд╕рд╛рдЗрдЯ, рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдФрд░ рдПрд╕рдПрд╕рдПрдЪ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдЧреАред
рд▓реЗрдЦрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдПрдВрдбреНрд░рдпреВ рдЯреЗрд▓рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЯреВрд▓ рдмрдирд╛рддрд╛ рд╣реИ
рд╕реНрд░реЛрдд: www.habr.com