рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд░ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рднрд╛рдЧ 3: рдПрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдФрд░ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдУрдкрдирд╢рд┐рдлреНрдЯ

рдЗрд╕ рдмреНрд▓реЙрдЧ рдкрд░ рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рддреАрд╕рд░реА рдкреЛрд╕реНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ Red Hat OpenShift рдкрд░ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд░реЗрдВред

рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд░ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рднрд╛рдЧ 3: рдПрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдФрд░ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдУрдкрдирд╢рд┐рдлреНрдЯ

рдкрд┐рдЫрд▓реА рджреЛ рдкреЛрд╕реНрдЯреЛрдВ рдореЗрдВ, рд╣рдордиреЗ рджрд┐рдЦрд╛рдпрд╛ рдерд╛ рдХрд┐ рдХреБрдЫ рд╣реА рдЪрд░рдгреЛрдВ рдореЗрдВ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЗрди рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдЬреИрд╕реА рдСрдл-рдж-рд╢реЗрд▓реНрдл HTTP рд╕рд░реНрд╡рд░ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ S2I рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред .

рдЖрдЬ рд╣рдо рджрд┐рдЦрд╛рдПрдВрдЧреЗ рдХрд┐ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░реЗрдВ, рдФрд░ рдпрд╣ рднреА рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреНрдпрд╛ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдУрдкрдирд╢рд┐рдлреНрдЯ

рд╡рд┐рдХрд╛рд╕ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ рдкрд╣рд┐рд▓рд╛ рдкрджрдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╕ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ "рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░" рд╣реИ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИред рдЬрдм рд╡реЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд┐рд▓реНрдб рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рдврд╛рдБрдЪреЛрдВ рдореЗрдВ, рдРрд╕рд╛ "рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░" рд╕рдВрдмрдВрдзрд┐рдд рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрдерд╛рдиреАрдп рдЙрджрд╛рд╣рд░рдг

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреЗ рд╕рдордп рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рд╕реЗ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рдЕрдиреНрдп рд╕рднреА рдЖрдзреБрдирд┐рдХ рдврд╛рдБрдЪреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд░рд┐рдПрдХреНрдЯ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ "рдбреЗрд╡ рд╕рд░реНрд╡рд░" рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВрдЧреЗ:

$ npm run start

рдлрд┐рд░ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╣рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦреЗрдВрдЧреЗ:

рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд░ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рднрд╛рдЧ 3: рдПрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдФрд░ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдУрдкрдирд╢рд┐рдлреНрдЯ

рдФрд░ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЦреБрд▓ рдЬрд╛рдПрдЧрд╛:

рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд░ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рднрд╛рдЧ 3: рдПрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдФрд░ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдУрдкрдирд╢рд┐рдлреНрдЯ

рдЕрдм, рдпрджрд┐ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЕрдкрдбреЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдареАрдХ рд╣реИ, рд╕реНрдерд╛рдиреАрдп рдореЛрдб рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП?

OpenShift рдкрд░ рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░

рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реЛ рддреЛ, рдореЗрдВ рдкрд┐рдЫрд▓рд╛ рдкрдж, рд╣рдордиреЗ S2I рдЫрд╡рд┐ рдХреЗ рддрдерд╛рдХрдерд┐рдд рд░рди рдЪрд░рдг рдХреЛ рджреЗрдЦрд╛ рдФрд░ рджреЗрдЦрд╛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рд░реНрд╡ рдореЙрдбреНрдпреВрд▓ рд╣рдорд╛рд░реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рд░реНрд╡рд┐рд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдЧрд░ рдЖрдк рдХрд░реАрдм рд╕реЗ рджреЗрдЦреЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ, рдЗрд╕рдореЗрдВ $NPM_RUN рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдЖрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдбрд╢рд┐рдлреНрдЯ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

$ npx nodeshift --deploy.env NPM_RUN="yarn start" --dockerImage=nodeshift/ubi8-s2i-web-app

рдиреЛрдЯ: рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрд╣рд╛рдВ рд╣рдордиреЗ рдЕрдкрдиреЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдореЗрдВ NPM_RUN рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬреЛ рдпрд╛рд░реНрди рд╕реНрдЯрд╛рд░реНрдЯ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдмрддрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкреЙрдб рдХреЗ рдЕрдВрджрд░ рд░рд┐рдПрдХреНрдЯ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рд░рдирд┐рдВрдЧ рдкреЙрдб рдХреЗ рд▓реЙрдЧ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ, рддреЛ рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд░ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рднрд╛рдЧ 3: рдПрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдФрд░ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдУрдкрдирд╢рд┐рдлреНрдЯ

рдмреЗрд╢рдХ, рдпрд╣ рд╕рдм рддрдм рддрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рд╣рдо рд╕реНрдерд╛рдиреАрдп рдХреЛрдб рдХреЛ рдЙрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░ рд▓реЗрддреЗ, рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдореЙрдирд┐рдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдкрд░ рд░рд╣рддрд╛ рд╣реИред

рджреВрд░рд╕реНрде рдФрд░ рд╕реНрдерд╛рдиреАрдп рдХреЛрдб рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдирд╛

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдиреЛрдбрд╢рд┐рдлреНрдЯ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЙрдЪ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

$ npx nodeshift watch

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд░рдирд┐рдВрдЧ рдкреЙрдб рд╕реЗ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдерд╛, рд░рд┐рдореЛрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕реНрдерд╛рдиреАрдп рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧреАред

рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдЕрдм src/App.js рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рджреВрд░рд╕реНрде рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдЧрд╛ рдФрд░ рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛, рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛ред

рдЪрд┐рддреНрд░ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рд╕рдВрдкреВрд░реНрдг рдЖрджреЗрд╢ рдХреИрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВ:

$ npx nodeshift --strictSSL=false --dockerImage=nodeshift/ubi8-s2i-web-app --build.env YARN_ENABLED=true --expose --deploy.env NPM_RUN="yarn start" --deploy.port 3000

$ npx nodeshift watch --strictSSL=false

рд╡реЙрдЪ рдХрдорд╛рдВрдб oc rsync рдХрдорд╛рдВрдб рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдЕрдореВрд░реНрдд рд╣реИ, рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╣рд╛рдВ.

рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдерд╛, рд▓реЗрдХрд┐рди рдареАрдХ рдЙрд╕реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ NPM_RUN рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
тАГ

рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЗрдВ

рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд░ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рднрд╛рдЧ 3: рдПрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдФрд░ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдУрдкрдирд╢рд┐рдлреНрдЯ

рдЖрдЧреЗ рд╣рдо рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЬреИрд╕реЗ рдЯреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдЪреЗрдиреНрдб рдмрд┐рд▓реНрдб рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреНрдпрд╛ рд╣реИрдВ?

рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдПрдХ рдХреНрд▓рд╛рдЙрдб-рдиреЗрдЯрд┐рд╡ рд╕реАрдЖрдИ/рд╕реАрдбреА рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдФрд░ рд╡рд┐рддрд░рдг рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдЬрд┐рд╕реЗ рдЯреЗрдХреНрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЯреЗрдХреНрдЯрди рдПрдХ рд▓рдЪреАрд▓рд╛ рдУрдкрди-рд╕реЛрд░реНрд╕ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕-рдиреЗрдЯрд┐рд╡ рд╕реАрдЖрдИ/рд╕реАрдбреА рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкрд░рдд рд╕реЗ рдЕрдореВрд░реНрдд рдХрд░рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ (рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕, рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд, рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЗрддреНрдпрд╛рджрд┐) рдкрд░ рддреИрдирд╛рддреА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдХреБрдЫ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рдкрдврд╝реЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ.

рдЕрдкрдирд╛ рдХрд╛рд░реНрдп рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдирд╛ рдХрд╛рдордХрд╛рдЬреА рдорд╛рд╣реМрд▓ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

  1. рдУрдкрдирд╢рд┐рдлреНрдЯ 4 рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдбрд░реЗрдбреА рдХрдВрдЯреЗрдирд░ (рд╕реАрдЖрд░рдбреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдирд┐рд░реНрджреЗрд╢ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣рд╛рдВ.
  2. рдХреНрд▓рд╕реНрдЯрд░ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдЙрд╕ рдкрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдСрдкрд░реЗрдЯрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдбрд░реЛ рдордд, рдпрд╣ рдЖрд╕рд╛рди рд╣реИ, рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдирд┐рд░реНрджреЗрд╢ рдпрд╣рд╛рдВ.
  3. рдбрд╛рдЙрдирд▓реЛрдб рдЯреЗрдХреНрдЯрди рд╕реАрдПрд▓рдЖрдИ (tkn) рдпрд╣рд╛рдВ.
  4. рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП create-react-app рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ рдЪрд▓рд╛рдПрдВ рдЬрд┐рд╕реЗ рдЖрдк рдлрд┐рд░ рддреИрдирд╛рдд рдХрд░реЗрдВрдЧреЗ (рдпрд╣ рдПрдХ рд╕рд░рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛).
  5. (рд╡реИрдХрд▓реНрдкрд┐рдХ) рдПрдирдкреАрдПрдо рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рдлрд┐рд░ рдПрдирдкреАрдПрдо рд╕реНрдЯрд╛рд░реНрдЯ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдирдореВрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ k8s рдлрд╝реЛрд▓реНрдбрд░ рднреА рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ Kubernetes/OpenShift YAMLs рд╣реЛрдВрдЧреЗред рдЗрд╕рдореЗрдВ рдХрд╛рд░реНрдп, рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдп, рд╕рдВрд╕рд╛рдзрди рдФрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╣реЛрдВрдЧреЗ рдЬреЛ рд╣рдо рдмрдирд╛рдПрдВрдЧреЗ рдЦрдЬрд╛рдиреЗ.

рд╢реБрд░реВ рдХрд░рдирд╛

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдХрджрдо рдУрдкрдирд╢рд┐рдлреНрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реИред рдЪрд▓рд┐рдП рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╡реЗрдмрдПрдк-рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдмрдирд╛рддреЗ рд╣реИрдВ:

$ oc new-project webapp-pipeline

рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо рдмрд╛рдж рдореЗрдВ рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХреБрдЫ рдФрд░ рдирд╛рдо рджреЗрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХреЛ рддрджрдиреБрд╕рд╛рд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред рдЗрд╕ рдмрд┐рдВрджреБ рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ, рд╣рдо рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдиреАрдЪреЗ рд╕реЗ рдКрдкрд░ рдЬрд╛рдПрдВрдЧреЗ: рдпрд╛рдиреА, рд╣рдо рдкрд╣рд▓реЗ рдХрдиреНрд╡реЗрдпрд░ рдХреЗ рд╕рднреА рдШрдЯрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдХрдиреНрд╡реЗрдпрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗред

рддреЛ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ...

рдХрд╛рд░реНрдп

рдЖрдЗрдП рдХреБрдЫ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВ, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╣рдорд╛рд░реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рддреИрдирд╛рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп - apply_manifests_task - рдЙрди Kubernetes рд╕рдВрд╕рд╛рдзрдиреЛрдВ (рд╕реЗрд╡рд╛, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдорд╛рд░реНрдЧ) рдХреЗ YAML рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ k8s рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рджреВрд╕рд░рд╛ рдХрд╛рд░реНрдп - update_deployment_task - рд╣рдорд╛рд░реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдирд╛рдд рдЫрд╡рд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдпрджрд┐ рдпрд╣ рдЕрднреА рддрдХ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рддреЛ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпреЗ рдХрд╛рд░реНрдп рдХреБрдЫ рд╣рдж рддрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреА рддрд░рд╣ рд╣реИрдВ, рдФрд░ рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЗрди рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдПрдВ:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/update_deployment_task.yaml
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/apply_manifests_task.yaml

рдлрд┐рд░, tkn CLI рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЬрд╛рдБрдЪреЗрдВрдЧреЗ рдХрд┐ рдХрд╛рд░реНрдп рдмрдирд╛рдП рдЧрдП рд╣реИрдВ:

$ tkn task ls

NAME                AGE
apply-manifests     1 minute ago
update-deployment   1 minute ago

рдиреЛрдЯ: рдпреЗ рдЖрдкрдХреЗ рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдХрд╛рд░реНрдп рд╣реИрдВред

рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдп

рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдп рдореВрд▓рддрдГ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реЛрддреЗ рд╣реИрдВред рдЕрд░реНрдерд╛рддреН, рдпрд╣ рдЪрд░рдгреЛрдВ рдХрд╛ рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдп рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рднреАрддрд░ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрд▓рдмреНрдз рд╣реИред рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдСрдкрд░реЗрдЯрд░ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЧрдП рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдлрд┐рд░ рд╕реЗ tkn CLI рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

$ tkn clustertask ls

NAME                       AGE
buildah                    1 day ago
buildah-v0-10-0            1 day ago
jib-maven                  1 day ago
kn                         1 day ago
maven                      1 day ago
openshift-client           1 day ago
openshift-client-v0-10-0   1 day ago
s2i                        1 day ago
s2i-go                     1 day ago
s2i-go-v0-10-0             1 day ago
s2i-java-11                1 day ago
s2i-java-11-v0-10-0        1 day ago
s2i-java-8                 1 day ago
s2i-java-8-v0-10-0         1 day ago
s2i-nodejs                 1 day ago
s2i-nodejs-v0-10-0         1 day ago
s2i-perl                   1 day ago
s2i-perl-v0-10-0           1 day ago
s2i-php                    1 day ago
s2i-php-v0-10-0            1 day ago
s2i-python-3               1 day ago
s2i-python-3-v0-10-0       1 day ago
s2i-ruby                   1 day ago
s2i-ruby-v0-10-0           1 day ago
s2i-v0-10-0                1 day ago

рдЕрдм рджреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ S2I рдЫрд╡рд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рдУрдкрдирд╢рд┐рдлреНрдЯ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рднреЗрдЬреЗрдЧрд╛; рджреВрд╕рд░рд╛, рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдорд╛рд░реА рдЫрд╡рд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИ, рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИред

рдЫрд╡рд┐ рдмрдирд╛рдПрдВ рдФрд░ рднреЗрдЬреЗрдВ

рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо рд╡рд╣реА рджреЛрд╣рд░рд╛рдПрдВрдЧреЗ рдЬреЛ рд╣рдордиреЗ рд▓рд┐рдВрдХреНрдб рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдХрд┐рдпрд╛ рдерд╛ред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ "рдмрдирд╛рдиреЗ" рдХреЗ рд▓рд┐рдП S2I рдЫрд╡рд┐ (ubi8-s2i-рд╡реЗрдм-рдРрдк) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдУрдкрдирд╢рд┐рдлреНрдЯ рдЖрдВрддрд░рд┐рдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдПрдХ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдЖред рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдРрдк рдХреЗ рд▓рд┐рдП DockerFile рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ S2I рд╡реЗрдм рдРрдк рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Buildah рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдЫрд╡рд┐ рдХреЛ OpenShift рдЖрдВрддрд░рд┐рдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдзрдХреЗрд▓ рджреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдЖрдк NodeShift рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ OpenShift рдареАрдХ рдпрд╣реА рдХрд░рддрд╛ рд╣реИред .

рдЖрдк рдкреВрдЫреЗрдВ, рд╣рдореЗрдВ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓рд╛? рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Node.js рдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг, рд╣рдордиреЗ рдмрд╕ рдЗрд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ред

рддреЛ, рдЕрдм s2i-рд╡реЗрдм-рдРрдк рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВ:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/s2i-web-app-task.yaml

рд╣рдо рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ OUTPUT_DIR рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ:

params:
      - name: OUTPUT_DIR
        description: The location of the build output directory
        default: build

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдмрд┐рд▓реНрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЬрд╣рд╛рдВ рд░рд┐рдПрдХреНрдЯ рдПрдХрддреНрд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдбрд╛рд▓рддрд╛ рд╣реИред рдЕрдиреНрдп рдврд╛рдБрдЪреЗ рд╡рд┐рднрд┐рдиреНрди рдкрдереЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдореНрдмрд░ рдореЗрдВ рдпрд╣ dist рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдп рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рдЫрд╡рд┐ рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП HTML, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕реАрдПрд╕рдПрд╕ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред

NGINX рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдЫрд╡рд┐ рдмрдирд╛рдПрдВ

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╣рдорд╛рд░реЗ рджреВрд╕рд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕-рдЖрдзрд╛рд░рд┐рдд рдЫрд╡рд┐ рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдпрд╣ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рд╢реНрд░реГрдВрдЦрд▓рд╛рдмрджреНрдз рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рджреЗрдЦрд╛ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо - рдмрд┐рд▓реНрдХреБрд▓ рдКрдкрд░ рдЬреИрд╕рд╛ рд╣реА - рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдп рд╡реЗрдмрдПрдк-рдмрд┐рд▓реНрдб-рд░рдирдЯрд╛рдЗрдо рдмрдирд╛рдПрдВрдЧреЗ:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/webapp-build-runtime-task.yaml

рдпрджрд┐ рдЖрдк рдЗрди рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЙрд╕ Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдЙрди рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдХреЗрд╡рд▓ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо Git рдореЗрдВ рдХреНрдпрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЫрд╡рд┐ рдЬрд╣рд╛рдВ рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕реАрд▓рд┐рдП рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЗрди рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдФрд░ рдпрд╣рд╛рдВ рд╣рдо рд╢рд╛рд▓реАрдирддрд╛рдкреВрд░реНрд╡рдХ рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ...

╨а╨╡╤Б╤Г╤А╤Б╤Л

рдЗрд╕рд▓рд┐рдП, рдЪреВрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдЕрднреА рдХрд╣рд╛, рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдп рдпрдерд╛рд╕рдВрднрд╡ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рд╣рдореЗрдВ рдРрд╕реЗ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдирдкреБрдЯ (рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА) рдФрд░ рдЖрдЙрдЯрдкреБрдЯ (рдЕрдВрддрд┐рдо рдЫрд╡рд┐рдпрд╛рдВ) рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдореЗрдВ рдЬрд┐рд╕ рдкрд╣рд▓реЗ рд╕рдВрд╕рд╛рдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ Git рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд░рд╣рддрд╛ рд╣реИ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

# This resource is the location of the git repo with the web application source
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: web-application-repo
spec:
  type: git
  params:
    - name: url
      value: https://github.com/nodeshift-starters/react-pipeline-example
    - name: revision
      value: master

рдпрд╣рд╛рдВ PipelineResource git рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред рдкреИрд░рд╛рдореНрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдпреВрдЖрд░рдПрд▓ рдХреБрдВрдЬреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреА рд╣реИ (рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрддреЗ рд╣реИрдВ)ред

рдЕрдм рд╣рдореЗрдВ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ s2i-рд╡реЗрдм-рдРрдк рдХрд╛рд░реНрдп рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕рд╣реЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗ, рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

# This resource is the result of running "npm run build",  the resulting built files will be located in /opt/app-root/output
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: built-web-application-image
spec:
  type: image
  params:
    - name: url
      value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-application:latest

рдпрд╣рд╛рдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд░рд┐рд╕реЛрд░реНрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЫрд╡рд┐ рд╣реИ, рдФрд░ рдпреВрдЖрд░рдПрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рдЖрдВрддрд░рд┐рдХ рдУрдкрдирд╢рд┐рдлреНрдЯ рдЫрд╡рд┐ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реЗрдмрдПрдк-рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднрд┐рдиреНрди рдиреЗрдорд╕реНрдкреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдмрджрд▓рдирд╛ рди рднреВрд▓реЗрдВред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдЬрд┐рд╕ рдЕрдВрддрд┐рдо рд╕рдВрд╕рд╛рдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рд╡рд╣ рднреА рдЫрд╡рд┐ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рдЕрдВрддрд┐рдо рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдЫрд╡рд┐ рд╣реЛрдЧреА рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддреИрдирд╛рддреА рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

# This resource is the image that will be just the static html, css, js files being run with nginx
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: runtime-web-application-image
spec:
  type: image
  params:
    - name: url
      value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtime-web-application:latest

рджреЛрдмрд╛рд░рд╛, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╕рдВрд╕рд╛рдзрди рдЫрд╡рд┐ рдХреЛ рд╡реЗрдмрдПрдк-рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдУрдкрдирд╢рд┐рдлреНрдЯ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред

рдЗрди рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо create рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/resources/resource.yaml

рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ:

$ tkn resource ls

рдХрдиреНрд╡реЗрдпрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди

рдЕрдм рдЬрдмрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХ рд╣реИрдВ, рдЖрдЗрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдмрдирд╛рдХрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/pipelines/build-and-deploy-react.yaml

рд▓реЗрдХрд┐рди рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЗрди рдШрдЯрдХреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдкрд╣рд▓рд╛ рдирд╛рдо рд╣реИ:

apiVersion: tekton.dev/v1alpha1
kind: Pipeline
metadata:
  name: build-and-deploy-react

рдлрд┐рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╣рдо рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдХреЗрдд рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдереЗ:

spec:
  resources:
    - name: web-application-repo
      type: git
    - name: built-web-application-image
      type: image
    - name: runtime-web-application-image
      type: image

рдлрд┐рд░ рд╣рдо рд╡реЗ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдорд╛рд░реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╣реА рдмрдирд╛рдП рдЧрдП s2i-рд╡реЗрдм-рдРрдк рдХрд╛рд░реНрдп рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

tasks:
    - name: build-web-application
      taskRef:
        name: s2i-web-app
        kind: ClusterTask

рдпрд╣ рдХрд╛рд░реНрдп рдЗрдирдкреБрдЯ (рдЧреАрд░ рд╕рдВрд╕рд╛рдзрди) рдФрд░ рдЖрдЙрдЯрдкреБрдЯ (рдмрд┐рд▓реНрдЯ-рд╡реЗрдм-рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рдЗрдореЗрдЬ рд╕рдВрд╕рд╛рдзрди) рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреИрд░рд╛рдореАрдЯрд░ рднреА рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдЯреАрдПрд▓рдПрд╕ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рди рдХрд░ рд╕рдХреЗ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

resources:
        inputs:
          - name: source
            resource: web-application-repo
        outputs:
          - name: image
            resource: built-web-application-image
      params:
        - name: TLSVERIFY
          value: "false"

рдЕрдЧрд▓рд╛ рдХрд╛рд░реНрдп рд▓рдЧрднрдЧ рд╡реИрд╕рд╛ рд╣реА рд╣реИ, рдХреЗрд╡рд▓ рдпрд╣рд╛рдВ рд╡реЗрдмрдПрдк-рдмрд┐рд▓реНрдб-рд░рдирдЯрд╛рдЗрдо рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдп рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдмрдирд╛рдпрд╛ рд╣реИ рдЙрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

name: build-runtime-image
    taskRef:
      name: webapp-build-runtime
      kind: ClusterTask

рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдп рдХреА рддрд░рд╣, рд╣рдо рдПрдХ рд╕рдВрд╕рд╛рдзрди рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рдмрд┐рд▓реНрдЯ-рд╡реЗрдм-рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рдЗрдореЗрдЬ (рд╣рдорд╛рд░реЗ рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдп рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ) рд╣реИред рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рддреМрд░ рдкрд░ рд╣рдо рдлрд┐рд░ рд╕реЗ рдЗрдореЗрдЬ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рдо рд░рдирдЖрдлреНрдЯрд░ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

resources:
        inputs:
          - name: image
            resource: built-web-application-image
        outputs:
          - name: image
            resource: runtime-web-application-image
        params:
        - name: TLSVERIFY
          value: "false"
      runAfter:
        - build-web-application

рдЕрдЧрд▓реЗ рджреЛ рдХрд╛рд░реНрдп рд╕реЗрд╡рд╛, рдорд╛рд░реНрдЧ рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди YAML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА k8s рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдирдИ рдЫрд╡рд┐рдпрд╛рдВ рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рд╣рдордиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрди рджреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рдХрдиреНрд╡реЗрдпрд░ рд╢реБрд░реВ рдХрд░рдирд╛

рддреЛ, рд╣рдорд╛рд░реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд╕рднреА рд╣рд┐рд╕реНрд╕реЗ рдмрди рдЧрдП рд╣реИрдВ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдВрдЧреЗ:

$ tkn pipeline start build-and-deploy-react

рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдЧрд┐рдЯ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП, рд╡реЗрдм-рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рд░реЗрдкреЛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдлрд┐рд░ рдкрд╣рд▓реЗ рдЫрд╡рд┐ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП, рдмрд┐рд▓реНрдЯ-рд╡реЗрдм-рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред -рдЫрд╡рд┐, рдФрд░ рдЕрдВрдд рдореЗрдВ, рджреВрд╕рд░реА рдЫрд╡рд┐ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП -рд░рдирдЯрд╛рдЗрдо-рд╡реЗрдм-рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рдЫрд╡рд┐:

? Choose the git resource to use for web-application-repo: web-application-repo (https://github.com/nodeshift-starters/react-pipeline-example)
? Choose the image resource to use for built-web-application-image: built-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-
application:latest)
? Choose the image resource to use for runtime-web-application-image: runtime-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtim
e-web-application:latest)
Pipelinerun started: build-and-deploy-react-run-4xwsr

рдЖрдЗрдП рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

$ tkn pipeline logs -f

рдПрдХ рдмрд╛рд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдиреЗ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдирд╛рдд рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд╢рд┐рдд рдорд╛рд░реНрдЧ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

$ oc get route react-pipeline-example --template='http://{{.spec.host}}'

рдмреЗрд╣рддрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡реЗрдм рдХрдВрд╕реЛрд▓ рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдореЛрдб рдореЗрдВ рд╣рдорд╛рд░реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдкрд╛рдЗрдк рд▓рд╛рдЗрдиреЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред 1.

рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд░ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рднрд╛рдЧ 3: рдПрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдФрд░ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдУрдкрдирд╢рд┐рдлреНрдЯ

рдЪрд┐рддреНрд░ .1ред рдЪрд▓ рд░рд╣реА рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛.

рдЪрд▓ рд░рд╣реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдЪрд┐рддреНрд░ 2 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд░ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рднрд╛рдЧ 3: рдПрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдФрд░ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдУрдкрдирд╢рд┐рдлреНрдЯ

рдЪрд╛рд╡рд▓ред 2. рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА.

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд╛рдж, рдЖрдк рджреГрд╢реНрдп рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЯреЛрдкреЛрд▓реЙрдЬреА, рдЬреИрд╕рд╛ рдХрд┐ рдЪрд┐рддреНрд░ 3 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд░ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рднрд╛рдЧ 3: рдПрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдФрд░ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдУрдкрдирд╢рд┐рдлреНрдЯ

рдЪрд┐рддреНрд░ 3. рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреЙрдбред

рдЖрдЗрдХрди рдХреЗ рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рд╡реГрддреНрдд рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреБрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдЪрд┐рддреНрд░ 4 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд░ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рднрд╛рдЧ 3: рдПрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдФрд░ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдУрдкрдирд╢рд┐рдлреНрдЯ

рдЪрд╛рд╡рд▓ред 4. рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдирд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖

рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд░ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдордиреЗ рдпрд╣ рднреА рджреЗрдЦрд╛ рдХрд┐ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЪреЗрди-рдмрд┐рд▓реНрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕ рдЖрд▓реЗрдЦ рд╕реЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣рд╛рдВ.

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрди (EN)

рдЖрдЧрд╛рдореА рд╡реЗрдмрд┐рдирд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдПрдБ

рд╣рдо Red Hat OpenShift рдХрдВрдЯреЗрдирд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢реБрдХреНрд░рд╡рд╛рд░ рдХреЗ рд╡реЗрдмрд┐рдирд╛рд░ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ