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

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

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

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

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

рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореНрд╣рдгреВрди OpenShift

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

рдЖрдзреАрдЪ рдирдореВрдж рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ рдкрд╣рд┐рд▓реА рдкреЛрд╕реНрдЯ, рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рд╕рд╛рдареА рдард░рд╛рд╡рд┐рдХ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реА рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреА "рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рд╕рд░реНрд╡реНрд╣рд░" рдЖрд╣реЗ рдЬреА рд╕реНрдерд╛рдирд┐рдХ рдлрд╛рдЗрд▓реНрд╕рдордзреАрд▓ рдмрджрд▓рд╛рдВрдЪрд╛ рдорд╛рдЧреЛрд╡рд╛ рдШреЗрддреЗ. рдЬреЗрд╡реНрд╣рд╛ рддреЗ рд╣реЛрддрд╛рдд, рддреЗрд╡реНрд╣рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрд┐рд▓реНрдб рдЯреНрд░рд┐рдЧрд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдирдВрддрд░ рддреЛ рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рдЕрджреНрдпрддрдирд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ.

рдмрд░реНтАНрдпрд╛рдЪ рдЖрдзреБрдирд┐рдХ рдлреНрд░реЗрдорд╡рд░реНрдХрдордзреНрдпреЗ, рдЕрд╕рд╛ тАЬрдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рд╕рд░реНрд╡реНрд╣рд░тАЭ рд╕рдВрдмрдВрдзрд┐рдд рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓реНрд╕рдордзреНрдпреЗ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ.

рд╕реНрдерд╛рдирд┐рдХ рдЙрджрд╛рд╣рд░рдг

рдкреНрд░рдердо, рд╕реНрдерд╛рдирд┐рдХ рдкрд╛рддрд│реАрд╡рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд╛рд▓рд╡рддрд╛рдирд╛ рд╣реЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рддреЗ рдкрд╛рд╣реВ. рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди рдЕрд░реНрдЬ рдШреЗрдК рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреНрдпрд╛ рдорд╛рдЧреАрд▓ рд▓реЗрдЦрд╛рдВрдордзреВрди, рдЬрд░реА рдЬрд╡рд│рдЬрд╡рд│ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рд╕рдВрдХрд▓реНрдкрдирд╛ рдЗрддрд░ рд╕рд░реНрд╡ рдЖрдзреБрдирд┐рдХ рдлреНрд░реЗрдорд╡рд░реНрдХрдордзреНрдпреЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛рдд.
рддрд░, рдЖрдордЪреНрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ "рдбреЗрд╡реНрд╣ рд╕рд░реНрд╡реНрд╣рд░" рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░реВ:

$ npm run start

рдирдВрддрд░ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛрдордзреНрдпреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕реЗрд▓:

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

рдЖрдгрд┐ рдЖрдордЪрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдбреАрдлреЙрд▓реНрдЯ рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рдЙрдШрдбреЗрд▓:

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

рдЖрддрд╛, рдЖрдореНрд╣реА рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдмрджрд▓ рдХреЗрд▓реНрдпрд╛рд╕, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рдЕрджреНрдпрддрдирд┐рдд рдЭрд╛рд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ.

рдареАрдХ рдЖрд╣реЗ, рд╕реНрдерд╛рдирд┐рдХ рдореЛрдбрдордзреНрдпреЗ рд╡рд┐рдХрд╛рд╕рд╛рд╕рд╣ рд╕рд░реНрд╡ рдХрд╛рд╣реА рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ, рдкрд░рдВрддреБ OpenShift рд╡рд░ рддреЗ рдХрд╕реЗ рдорд┐рд│рд╡рд╛рдпрдЪреЗ?

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 рдХрдорд╛рдВрдбрдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рдПрдХ рдЕрдореВрд░реНрддрддрд╛ рдЖрд╣реЗ, рддреА рдХрд╢реА рдХрд╛рд░реНрдп рдХрд░рддреЗ рдпрд╛рдмрджреНрджрд▓ рддреБрдореНрд╣реА рдЕрдзрд┐рдХ рдЬрд╛рдгреВрди рдШреЗрдК рд╢рдХрддрд╛ рдпреЗрдереЗ.

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

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

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

рдкреБрдвреЗ рдЖрдкрдг OpenShift Pipelines рд╕рд╛рд░рдЦреНрдпрд╛ рд╕рд╛рдзрдирд╛рдмрджреНрджрд▓ рдЖрдгрд┐ рд╕рд╛рдЦрд│реАрдмрджреНрдз рдмрд┐рд▓реНрдбрд▓рд╛ рдкрд░реНрдпрд╛рдп рдореНрд╣рдгреВрди рддреЗ рдХрд╕реЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓реВ.

OpenShift рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛рдп рдЖрд╣реЗрдд

OpenShift Pipelines рд╣реА рдХреНрд▓рд╛рдЙрдб-рдиреЗрдЯрд┐рд╡реНрд╣ CI/CD рд╕рддрдд рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рд╡рд┐рддрд░рдг рдкреНрд░рдгрд╛рд▓реА рдЖрд╣реЗ рдЬреА Tekton рд╡рд╛рдкрд░реВрди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реА рдЖрд╣реЗ. Tekton рдПрдХ рд▓рд╡рдЪрд┐рдХ рдореБрдХреНрдд-рд╕реНрд░реЛрдд Kubernetes-рдиреЗрдЯрд┐рд╡реНрд╣ CI/CD рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрд╣реЗ рдЬреЛ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд┐рд╡рд┐рдз рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ (рдХреБрдмрд░реНрдиреЗрдЯреНрд╕, рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕, рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдиреНрд╕, рдЗ.) рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓реЗрдпрд░рдордзреВрди рдЕреЕрдмреНрд╕реНрдЯреНрд░реЕрдХреНрдЯ рдХрд░реВрди рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ.

рд╣рд╛ рд▓реЗрдЦ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдЪреЗ рдХрд╛рд╣реА рдЬреНрдЮрд╛рди рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдЬреЛрд░рджрд╛рд░ рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ рдХреА рдЖрдкрдг рдкреНрд░рдердо рд╡рд╛рдЪрд╛ рдЕрдзрд┐рдХреГрдд рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ.

рддреБрдордЪреЗ рдХрд╛рдорд╛рдЪреЗ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░рдгреЗ

рдпрд╛ рд▓реЗрдЦрд╛рддреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╕рд╣ рдЦреЗрд│рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг рдкреНрд░рдердо рдЖрдкрд▓реЗ рдХрд╛рд░реНрдп рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

  1. OpenShift 4 рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛. рдЖрдордЪреА рдЙрджрд╛рд╣рд░рдгреЗ рдпрд╛рд╕рд╛рдареА CodeReady рдХрдВрдЯреЗрдирд░ (CRD) рд╡рд╛рдкрд░рддрд╛рдд, рдЬреНрдпрд╛рд╕рд╛рдареА рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╕реВрдЪрдирд╛ рдЖрдврд│реВ рд╢рдХрддрд╛рдд рдпреЗрдереЗ.
  2. рдХреНрд▓рд╕реНрдЯрд░ рддрдпрд╛рд░ рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рд╡рд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдСрдкрд░реЗрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдШрд╛рдмрд░реВ рдирдХрд╛, рд╣реЗ рд╕реЛрдкреЗ рдЖрд╣реЗ, рд╕реНрдерд╛рдкрдирд╛ рд╕реВрдЪрдирд╛ рдпреЗрдереЗ.
  3. рдбрд╛рдЙрдирд▓реЛрдб Tekton CLI (tkn) рдпреЗрдереЗ.
  4. рддреБрдореНрд╣реА рдирдВрддрд░ рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рд▓ рдЕрд╕рд╛ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА create-react-app рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ рдЪрд╛рд▓рд╡рд╛ (рд╣рд╛ рдПрдХ рд╕рд╛рдзрд╛ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд╣реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреНрдпрд╛).
  5. (рдкрд░реНрдпрд╛рдпреА) npm install рдЖрдгрд┐ рдирдВрддрд░ npm start рд╕рд╣ рд╕реНрдерд╛рдирд┐рдХрд░рд┐рддреНрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдХреНрд▓реЛрди рдХрд░рд╛.

рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реАрдордзреНрдпреЗ k8s рдлреЛрд▓реНрдбрд░ рджреЗрдЦреАрд▓ рдЕрд╕реЗрд▓, рдЬреНрдпрд╛рдордзреНрдпреЗ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдгрд╛рд░реЗ Kubernetes/OpenShift YAMLs рдЕрд╕рддреАрд▓. рдпрд╛рдордзреНрдпреЗ рдЯрд╛рд╕реНрдХ, рдХреНрд▓рд╕реНрдЯрд░ рдЯрд╛рд╕реНрдХ, рд░рд┐рд╕реЛрд░реНрд╕реЗрд╕ рдЖрдгрд┐ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреНрд╕ рдЕрд╕рддреАрд▓ рдЬреА рдЖрдореНрд╣реА рддрдпрд╛рд░ рдХрд░реВ рднрд╛рдВрдбрд╛рд░.

рдЪрд▓рд╛ рд╕реБрд░реВ рдХрд░реБрдпрд╛

рдЖрдордЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рд╕рд╛рдареА рдкрд╣рд┐рд▓реА рдкрд╛рдпрд░реА рдореНрд╣рдгрдЬреЗ OpenShift рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдирд╡реАрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ. рдЪрд▓рд╛ рдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд▓рд╛ webapp-pipeline рдХреЙрд▓ рдХрд░реВ рдЖрдгрд┐ рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдбрд╕рд╣ рддрдпрд╛рд░ рдХрд░реВ:

$ oc new-project webapp-pipeline

рдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рдирд╛рд╡ рдирдВрддрд░ рдХреЛрдбрдордзреНрдпреЗ рджрд┐рд╕реЗрд▓, рддреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣реА рддреНрдпрд╛рд▓рд╛ рджреБрд╕рд░реЗ рдХрд╛рд╣реАрддрд░реА рдирд╛рд╡ рджреЗрдгреНрдпрд╛рдЪреЗ рдард░рд╡рд▓реНрдпрд╛рд╕, рддреНрдпрд╛рдиреБрд╕рд╛рд░ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рд╡рд┐рд╕рд░реВ рдирдХрд╛. рдпрд╛ рдмрд┐рдВрджреВрдкрд╛рд╕реВрди рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрди, рдЖрдореНрд╣реА рд╡рд░-рдЦрд╛рд▓реА рдЬрд╛рдгрд╛рд░ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЦрд╛рд▓реА-рд╡рд░ рдЬрд╛рдгрд╛рд░ рдЖрд╣реЛрдд: рдореНрд╣рдгрдЬреЗрдЪ, рдЖрдореНрд╣реА рдкреНрд░рдердо рдХрдиреНрд╡реНрд╣реЗрдпрд░рдЪреЗ рд╕рд░реНрд╡ рдШрдЯрдХ рддрдпрд╛рд░ рдХрд░реВ рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░рдЪ рдХрдиреНрд╡реНрд╣реЗрдпрд░ рд╕реНрд╡рддрдГ рддрдпрд╛рд░ рдХрд░реВ.

рддрд░, рд╕рд░реНрд╡ рдкреНрд░рдердо ...

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

рдЪрд▓рд╛ рдХрд╛рд╣реА рдХрд╛рд░реНрдпреЗ рддрдпрд╛рд░ рдХрд░реВрдпрд╛, рдЬреЗ рдирдВрддрд░ рдЖрдордЪреНрдпрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдордзреНрдпреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рдд рдорджрдд рдХрд░рддреАрд▓. рдкрд╣рд┐рд▓реЗ рдХрд╛рд░реНрдп - apply_manifests_task - рдЖрдордЪреНрдпрд╛ рдЕрд░реНрдЬрд╛рдЪреНрдпрд╛ k8s рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рддреНрдпрд╛ Kubernetes рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреНрдпрд╛ (рд╕реЗрд╡рд╛, рдЙрдкрдпреЛрдЬрди рдЖрдгрд┐ рдорд╛рд░реНрдЧ) YAML рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗ. рджреБрд╕рд░реЗ рдХрд╛рд░реНрдп тАУ 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 рдкреНрд░рддрд┐рдорд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░реЗрд▓ рдЖрдгрд┐ рддреА рдЕрдВрддрд░реНрдЧрдд OpenShift рд░рдЬрд┐рд╕реНрдЯреНрд░реАрд▓рд╛ рдкрд╛рдард╡реЗрд▓; рджреБрд╕рд░реЗ рдореНрд╣рдгрдЬреЗ, рдЖрдореНрд╣реА рдЖрдзреАрдЪ рд╕рд╛рдордЧреНрд░реА рдореНрд╣рдгреВрди рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рдкрд░реВрди NGINX рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрдордЪреА рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ.

рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░рд╛ рдЖрдгрд┐ рдкрд╛рдард╡рд╛

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

рдЖрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рд╕рд░реНрд╡ рдХрд╕реЗ рдХрд│рд▓реЗ, рддреБрдореНрд╣реА рд╡рд┐рдЪрд╛рд░рддрд╛? рдкрд╛рд╕реВрди рдЕрдзрд┐рдХреГрдд Node.js рдЪреА рдЕрдзрд┐рдХреГрдд рдЖрд╡реГрддреНрддреА, рдЖрдореНрд╣реА рдлрдХреНрдд рддреЗ рдХреЙрдкреА рдХреЗрд▓реЗ рдЖрдгрд┐ рд╕реНрд╡рддрдГрд╕рд╛рдареА рд╕реБрдзрд╛рд░рд┐рдд рдХреЗрд▓реЗ.

рддрд░, рдЖрддрд╛ s2i-web-app рдХреНрд▓рд╕реНрдЯрд░ рдЯрд╛рд╕реНрдХ рддрдпрд╛рд░ рдХрд░реВрдпрд╛:

$ 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

рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рд╣реЗ рдкреЕрд░рд╛рдореАрдЯрд░ рдмрд┐рд▓реНрдбрдЪреНрдпрд╛ рдмрд░реЛрдмрд░реАрдЪреЗ рдЕрд╕рддреЗ, рдЬрд┐рдереЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХрддреНрд░ рдХреЗрд▓реЗрд▓реА рд╕рд╛рдордЧреНрд░реА рдареЗрд╡рддреЗ. рдЗрддрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рдорд╛рд░реНрдЧ рд╡рд╛рдкрд░рддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдПрдореНрдмрд░рдордзреНрдпреЗ рддреЗ рдбрд┐рд╕реНрдЯ рдЖрд╣реЗ. рдЖрдордЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░ рдЯрд╛рд╕реНрдХрдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рдЖрдореНрд╣реА рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗрд▓реА HTML, JavaScript рдЖрдгрд┐ CSS рдЕрд╕рд▓реЗрд▓реА рдкреНрд░рддрд┐рдорд╛ рдЕрд╕реЗрд▓.

NGINX рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░рд╛

рдЖрдордЪреНрдпрд╛ рджреБрд╕рд▒реНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░ рдЯрд╛рд╕реНрдХрд╕рд╛рдареА, рдЖрдореНрд╣реА рдЖрдзреАрдЪ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреА рд╕рд╛рдордЧреНрд░реА рд╡рд╛рдкрд░реВрди рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА NGINX-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХреЗрд▓реА рдкрд╛рд╣рд┐рдЬреЗ. рдореВрд▓рдд:, рд╣рд╛ рдорд╛рдЧреАрд▓ рд╡рд┐рднрд╛рдЧрд╛рдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗ рдЬреЗрдереЗ рдЖрдореНрд╣реА рд╕рд╛рдЦрд│реА рдмрд╛рдВрдзрдгреАрдХрдбреЗ рдкрд╛рд╣рд┐рд▓реЗ.

рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА - рдЕрдЧрджреА рд╡рд░реАрд▓рдкреНрд░рдорд╛рдгреЗрдЪ - рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдЯрд╛рд╕реНрдХ webapp-build-runtime рддрдпрд╛рд░ рдХрд░реВ:

$ 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 рдкреНрд░рдХрд╛рд░рдЪреЗ рдЖрд╣реЗ. рдкреЕрд░рд╛рдо рд╡рд┐рднрд╛рдЧрд╛рддреАрд▓ url рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рдВрдбрд╛рд░рд╛рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЗ рдЖрдгрд┐ рдореБрдЦреНрдп рд╢рд╛рдЦрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ (рд╣реЗ рдкрд░реНрдпрд╛рдпреА рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЖрдореНрд╣реА рддреЗ рдкреВрд░реНрдгрддреЗрд╕рд╛рдареА рд▓рд┐рд╣рд┐рддреЛ).

рдЖрддрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рддрд┐рдореЗрд╕рд╛рдареА рдПрдХ рд╕рдВрд╕рд╛рдзрди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдЬрд┐рдереЗ s2i-web-app рдХрд╛рд░реНрдпрд╛рдЪреЗ рдкрд░рд┐рдгрд╛рдо рдЬрддрди рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓, рд╣реЗ рдЕрд╕реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ:

# 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

рдпреЗрдереЗ PipelineResource рдЗрдореЗрдЬ рдЯрд╛рдИрдк рдЖрд╣реЗ, рдЖрдгрд┐ url рдкреЕрд░рд╛рдореАрдЯрд░рдЪреЗ рдореВрд▓реНрдп рдЕрдВрддрд░реНрдЧрдд OpenShift рдЗрдореЗрдЬ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЗ, рд╡рд┐рд╢реЗрд╖рдд: webapp-рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдиреЗрдорд╕реНрдкреЗрд╕рдордзреНрдпреЗ рд╕реНрдерд┐рдд. рддреБрдореНрд╣реА рд╡реЗрдЧрд│реЗ рдиреЗрдорд╕реНрдкреЗрд╕ рд╡рд╛рдкрд░рдд рдЕрд╕рд╛рд▓ рддрд░ рд╣реА рд╕реЗрдЯрд┐рдВрдЧ рдмрджрд▓рд╛рдпрд▓рд╛ рд╡рд┐рд╕рд░реВ рдирдХрд╛.

рдЖрдгрд┐ рд╢реЗрд╡рдЯреА, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реЗ рд╢реЗрд╡рдЯрдЪреЗ рд╕рдВрд╕рд╛рдзрди рджреЗрдЦреАрд▓ рдЗрдореЗрдЬ рдЯрд╛рдИрдкрдЪреЗ рдЕрд╕реЗрд▓ рдЖрдгрд┐ рд╣реА рдЕрдВрддрд┐рдо NGINX рдкреНрд░рддрд┐рдорд╛ рдЕрд╕реЗрд▓ рдЬреА рдирдВрддрд░ рддреИрдирд╛рддреА рджрд░рдореНрдпрд╛рди рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдИрд▓:

# 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

рдкреБрдиреНрд╣рд╛, рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╣реЗ рд╕рдВрд╕рд╛рдзрди рд╡реЗрдмрдЕреЕрдк-рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдиреЗрдорд╕реНрдкреЗрд╕рдордзреАрд▓ рдЕрдВрддрд░реНрдЧрдд OpenShift рд░реЗрдЬрд┐рд╕реНрдЯреНрд░реАрдордзреНрдпреЗ рдкреНрд░рддрд┐рдорд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЗ.

рд╣реА рд╕рд░реНрд╡ рд╕рдВрд╕рд╛рдзрдиреЗ рдПрдХрд╛рдЪ рд╡реЗрд│реА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА 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-web-app рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

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

рд╣реЗ рдХрд╛рд░реНрдп рдЗрдирдкреБрдЯ (рдЧрд┐рд░ рд░рд┐рд╕реЛрд░реНрд╕) рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ (рдмрд┐рд▓реНрдЯ-рд╡реЗрдм-рдНрдкреНрд▓рд┐рдХреЗрд╢рди-рдЗрдореЗрдЬ рд░рд┐рд╕реЛрд░реНрд╕) рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдШреЗрддреЗ. рдЖрдореНрд╣реА рддреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреЕрд░рд╛рдореАрдЯрд░ рджреЗрдЦреАрд▓ рдкрд╛рд╕ рдХрд░рддреЛ рдЬреЗрдгреЗрдХрд░реБрди рдЖрдореНрд╣реА рд╕реНрд╡-рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХреЗрд▓реЗрд▓реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ рддреЗ TLS рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдд рдирд╛рд╣реА:

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

рдорд╛рдЧреАрд▓ рдХрд╛рд░реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЖрдореНрд╣реА рд╕рдВрд╕рд╛рдзрдирд╛рдордзреНрдпреЗ рдкрд╛рд╕ рдХрд░рддреЛ, рдкрд░рдВрддреБ рдЖрддрд╛ рддреЗ рдмрд┐рд▓реНрдЯ-рд╡реЗрдм-рдНрдкреНрд▓рд┐рдХреЗрд╢рди-рдЗрдореЗрдЬ (рдЖрдордЪреНрдпрд╛ рдорд╛рдЧреАрд▓ рдХрд╛рд░реНрдпрд╛рдЪреЗ рдЖрдЙрдЯрдкреБрдЯ) рдЖрд╣реЗ. рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдкреБрдиреНрд╣рд╛ рдЗрдореЗрдЬ рд╕реЗрдЯ рдХрд░рддреЛ. рд╣реЗ рдХрд╛рд░реНрдп рдорд╛рдЧреАрд▓ рдирдВрддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЖрдореНрд╣реА runAfter рдлреАрд▓реНрдб рдЬреЛрдбрддреЛ:

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

рдкреБрдвреАрд▓ рджреЛрди рдХрд╛рд░реНрдпреЗ рдЖрдордЪреНрдпрд╛ рд╡реЗрдм рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреНрдпрд╛ k8s рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рд░рд╛рд╣рдгрд╛рд▒реНрдпрд╛ рд╕реЗрд╡рд╛, рдорд╛рд░реНрдЧ рдЖрдгрд┐ рдЙрдкрдпреЛрдЬрди YAML рдлрд╛рдпрд▓реА рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдирд╡реАрди рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рд╣реА рддреИрдирд╛рддреА рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗрдд. рдЖрдореНрд╣реА рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдпрд╛ рджреЛрди рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдпрд╛рдВрдЪреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗрд▓реА рдЖрд╣реЗ.

рдХрдиреНрд╡реНрд╣реЗрдпрд░ рд╕реБрд░реВ рдХрд░рдд рдЖрд╣реЗ

рддрд░, рдЖрдордЪреНрдпрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдЪреЗ рд╕рд░реНрд╡ рднрд╛рдЧ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗрдд, рдЖрдгрд┐ рдЖрдореНрд╣реА рддреЗ рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢рд╛рдиреЗ рдЪрд╛рд▓рд╡реВ:

$ 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}}'

рдЕрдзрд┐рдХ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рдирд╕рд╛рдареА, рддреБрдореНрд╣реА рд╡рд┐рднрд╛рдЧрд╛рддреАрд▓ рд╡реЗрдм рдХрдиреНрд╕реЛрд▓рдЪреНрдпрд╛ рдбреЗрд╡реНрд╣рд▓рдкрд░ рдореЛрдбрдордзреНрдпреЗ рдЖрдордЪреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди, рдЕрдВрдЬреАрд░ рдордзреНрдпреЗ рджрд░реНрд╢рд╡рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ. рез.

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

рдЖрдХреГрддреА рдХреНрд░рдВ 1. рдЪрд╛рд▓реВ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдЪрд╛ рдЖрдврд╛рд╡рд╛.

рдЖрдХреГрддреА 2 рдордзреНрдпреЗ рджрд░реНрд╢рд╡рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЪрд╛рд▓реВ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд╡рд░ рдХреНрд▓рд┐рдХ рдХреЗрд▓реНрдпрд╛рдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рддрдкрд╢реАрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛рдд.

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

рддрд╛рдВрджреВрд│. 2. рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдмрджреНрджрд▓ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рд╣рд┐рддреА.

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

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

рдЕрдВрдЬреАрд░ 3. рд▓рд╛рдБрдЪ рдХреЗрд▓реЗрд▓реЗ рдкреЙрдб.

рдЪрд┐рдиреНрд╣рд╛рдЪреНрдпрд╛ рд╡рд░рдЪреНрдпрд╛ рдЙрдЬрд╡реНрдпрд╛ рдХреЛрдкрд▒реНрдпрд╛рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд░реНрддреБрд│рд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХреЗрд▓реНрдпрд╛рдиреЗ рдЖрдордЪрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЙрдШрдбрддреЛ, рдЖрдХреГрддреА 4 рдордзреНрдпреЗ рджрд░реНрд╢рд╡рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ.

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

рддрд╛рдВрджреВрд│. 4. рд░рдирд┐рдВрдЧ рд░рд┐рдЕреЕрдХреНрдЯ рдНрдкреНрд▓рд┐рдХреЗрд╢рди.

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

рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА OpenShift рд╡рд░ рддреБрдордЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╛рдареА рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рд╕рд░реНрд╡реНрд╣рд░ рдХрд╕рд╛ рдЪрд╛рд▓рд╡рд╛рдпрдЪрд╛ рдЖрдгрд┐ рддреЗ рд╕реНрдерд╛рдирд┐рдХ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдорд╕рд╣ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХрд╕реЗ рдХрд░рд╛рдпрдЪреЗ рддреЗ рджрд╛рдЦрд╡рд▓реЗ. OpenShift Pipelines рд╡рд╛рдкрд░реВрди рдЪреЗрди-рдмрд┐рд▓реНрдб рдЯреЗрдореНрдкреНрд▓реЗрдЯрдЪреЗ рдЕрдиреБрдХрд░рдг рдХрд╕реЗ рдХрд░рд╛рдпрдЪреЗ рддреЗ рджреЗрдЦреАрд▓ рдЖрдореНрд╣реА рдкрд╛рд╣рд┐рд▓реЗ. рдпрд╛ рд▓реЗрдЦрд╛рддреАрд▓ рд╕рд░реНрд╡ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдЖрдврд│реВ рд╢рдХрддрд╛рдд рдпреЗрдереЗ.

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

рдЖрдЧрд╛рдореА рд╡реЗрдмрд┐рдирд╛рд░рдЪреНрдпрд╛ рдШреЛрд╖рдгрд╛

рдЖрдореНрд╣реА Red Hat OpenShift рдХрдВрдЯреЗрдирд░ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдЖрдгрд┐ Kubernetes рд╡рд╛рдкрд░реВрди рд╕реНрдерд╛рдирд┐рдХ рдЕрдиреБрднрд╡рд╛рдмрджреНрджрд▓ рд╢реБрдХреНрд░рд╡рд╛рд░ рд╡реЗрдмрд┐рдирд╛рд░рдЪреА рдорд╛рд▓рд┐рдХрд╛ рд╕реБрд░реВ рдХрд░рдд рдЖрд╣реЛрдд:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛