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

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

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

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

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

рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдгрдХреЛ рд░реВрдкрдорд╛ OpenShift

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

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

рдзреЗрд░реИрдЬрд╕реЛ рдЖрдзреБрдирд┐рдХ рдлреНрд░реЗрдорд╡рд░реНрдХрд╣рд░реВрдорд╛, рдпрд╕реНрддреЛ "рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрднрд░" рд╕рдореНрдмрдиреНрдзрд┐рдд рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрди рдЙрдкрдХрд░рдгрд╣рд░реВрдорд╛ рдирд┐рд░реНрдорд┐рдд рд╣реБрдиреНрдЫред

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

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

$ npm run start

рддреНрдпрд╕рдкрдЫрд┐ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдиреНрдбреЛрдорд╛ рд╣рд╛рдореА рдпреЛ рдЬрд╕реНрддреИ рдХреЗрд╣рд┐ рджреЗрдЦреНрдиреЗрдЫреМрдВ:

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

рд░ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдЦреБрд▓реНрдиреЗрдЫ:

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

рдЕрдм, рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдлрд╛рдЗрд▓рдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдЫреМрдВ рднрдиреЗ, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рд╣реБрдиреБрдкрд░реНрдЫред

рдареАрдХ рдЫ, рд╕реНрдерд╛рдиреАрдп рдореЛрдбрдорд╛ рд╡рд┐рдХрд╛рд╕рдХреЛ рд╕рд╛рде рд╕рдмреИ рдХреБрд░рд╛ рд╕реНрдкрд╖реНрдЯ рдЫ, рддрд░ OpenShift рдорд╛ рдХрд╕рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ?

OpenShift рдорд╛ рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрднрд░

рдпрджрд┐ рддрдкрд╛рдЗрдБ рд╕рдореНрдЭрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдорд╛ рдЕрдШрд┐рд▓реНрд▓реЛ рдкреЛрд╕реНрдЯ, рд╣рд╛рдореАрд▓реЗ S2I рдЫрд╡рд┐рдХреЛ рддрдерд╛рдХрдерд┐рдд рд░рди рдЪрд░рдгрдорд╛ рд╣реЗрд░реНрдпреМрдВ рд░ рджреЗрдЦреНрдпреМрдВ рдХрд┐ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рд╕рд░реНрдн рдореЛрдбреНрдпреБрд▓ рд╣рд╛рдореНрд░реЛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд╕реЗрд╡рд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рдЫред

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

рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреИрдирд╛рдд рдЧрд░реНрди nodeshift рдореЛрдбреНрдпреБрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:

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

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

рдпрд╣рд╛рдБ рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯрдорд╛ NPM_RUN рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдердкреЗрдХрд╛ рдЫреМрдВ, рдЬрд╕рд▓реЗ рд░рдирдЯрд╛рдЗрдорд▓рд╛рдИ рдпрд╛рд░реНрди рд╕реНрдЯрд╛рд░реНрдЯ рдХрдорд╛рдгреНрдб рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдмрддрд╛рдЙрдБрдЫ, рдЬрд╕рд▓реЗ рд╣рд╛рдореНрд░реЛ OpenShift рдкреЛрдб рднрд┐рддреНрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрднрд░ рд╕реБрд░реБ рдЧрд░реНрдЫред

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдкреЛрдбрдХреЛ рд▓рдЧ рд╣реЗрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рдпреЛ рдХреЗрд╣рд┐ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

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

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

рд░рд┐рдореЛрдЯ рд░ рд╕реНрдерд╛рдиреАрдп рдХреЛрдб рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрджреИ

рд╕реМрднрд╛рдЧреНрдп рджреЗрдЦрд┐, nodeshift рд╕рдЬрд┐рд▓реИ рд╕рдВрдЧ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рди рдорджреНрджрдд рдЧрд░реНрди рд╕рдХреНрдЫ, рд░ рддрдкрд╛рдЗрдБ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЯреНрд░реНрдпрд╛рдХ рдЧрд░реНрди рд╡рд╛рдЪ рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рддреНрдпрд╕реЛрднрдП рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрднрд░ рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдЗрд╕рдХреЗрдкрдЫрд┐, рд╣рд╛рдореА рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдкрдорд╛ рдирд┐рдореНрди рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:

$ 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 рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
тАГ

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

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

рдЕрд░реНрдХреЛ рд╣рд╛рдореА OpenShift Pipelines рдЬрд╕реНрддреИ рдЙрдкрдХрд░рдгрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреМрдВ рд░ рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рдЬрдВрдЬреАрд░ рдирд┐рд░реНрдорд╛рдгрдХреЛ рд╡рд┐рдХрд▓реНрдкрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

OpenShift рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд╣рд░реВ рдХреЗ рд╣реБрдиреН

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

рдпрд╕ рд▓реЗрдЦрд▓рд╛рдИ рдмреБрдЭреНрди рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд╣рд░реВрдХреЛ рдХреЗрд╣реА рдЬреНрдЮрд╛рди рдЪрд╛рд╣рд┐рдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рджреГрдврддрд╛рдХрд╛ рд╕рд╛рде рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрдЫреМрдВ рдХрд┐ рддрдкрд╛рдЗрдБ рдкрд╣рд┐рд▓реЗ рдкрдвреНрдиреБрд╣реЛрд╕реН рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ.

рдЖрдлреНрдиреЛ рдХрд╛рд░реНрдп рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ

рдпрд╕ рд▓реЗрдЦрдорд╛ рднрдПрдХрд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрд╕рдБрдЧ рдЦреЗрд▓реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдкрд╣рд┐рд▓реЗ рдЖрдлреНрдиреЛ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

  1. OpenShift 4 рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╣рд╛рдореНрд░рд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрд▓реЗ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдХреЛрдбрд░реЗрдбреА рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ (CRD) рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреН, рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпрд╣рд╛рдБ.
  2. рдХреНрд▓рд╕реНрдЯрд░ рддрдпрд╛рд░ рднрдПрдкрдЫрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рдорд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЕрдкрд░реЗрдЯрд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдирдбрд░рд╛рдЙрдиреБрд╣реЛрд╕реН, рдпреЛ рд╕рдЬрд┐рд▓реЛ рдЫ, рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдпрд╣рд╛рдБ.
  3. рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реН Tekton CLI (tkn) рдпрд╣рд╛рдБ.
  4. рд╕рд┐рд░реНрдЬрдирд╛-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдПрдк рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрди рдЙрдкрдХрд░рдг рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН рдПрдЙрдЯрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЬреБрди рддрдкрд╛рдИрдВрд▓реЗ рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫ (рдпреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реЛред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛).
  5. (рд╡реИрдХрд▓реНрдкрд┐рдХ) npm рд╕реНрдерд╛рдкрдирд╛ рд░ рддреНрдпрд╕рдкрдЫрд┐ npm рд╕реНрдЯрд╛рд░реНрдЯрдХреЛ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд▓рд╛рдЙрди рднрдгреНрдбрд╛рд░ рдХреНрд▓реЛрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдПрдкреНрд▓рд┐рдХреЗрд╕рди рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдорд╛ 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 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ рд░ рдирддрд┐рдЬрд╛рдХреЛ рдЫрд╡рд┐рд▓рд╛рдИ OpenShift рдЖрдиреНрддрд░рд┐рдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдорд╛ рдкреБрд╢ рдЧрд░реНрдиреЗрдЫреМрдВ, рдХрд┐рдирдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ 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

рдлреЗрд░рд┐, рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рдпреЛ рд╕реНрд░реЛрддрд▓реЗ рдЫрд╡рд┐рд▓рд╛рдИ webapp-рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдиреЗрдорд╕реНрдкреЗрд╕рдХреЛ рдЖрдиреНрддрд░рд┐рдХ OpenShift рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдЫред

рдпреА рд╕рдмреИ рд╕реНрд░реЛрддрд╣рд░реВ рдПрдХреИрдЪреЛрдЯрд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рд╣рд╛рдореА рд╕рд┐рд░реНрдЬрдирд╛ рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ:

$ 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"

рдЕрд░реНрдХреЛ рдХрд╛рд░реНрдп рд▓рдЧрднрдЧ рдЙрд╕реНрддреИ рдЫ, рдХреЗрд╡рд▓ рдпрд╣рд╛рдБ рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдХреЛ webapp-build-runtime рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдп рднрдирд┐рдиреНрдЫ:

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

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

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

рдердк рджреГрд╢реНрдпрдХрд╛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рд╕реЗрдХреНрд╕рдирдорд╛ рд░рд╣реЗрдХреЛ рд╡реЗрдм рдХрдиреНрд╕реЛрд▓рдХреЛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдореЛрдбрдорд╛ рд╣рд╛рдореНрд░реЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд╣рд░реВ, рдЪрд┐рддреНрд░ рдорд╛ рджреЗрдЦрд╛рдЗрдПрдХреЛ рд░реВрдкрдорд╛ред рез.

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

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

рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрджрд╛ рдЪрд┐рддреНрд░ реи рдорд╛ рджреЗрдЦрд╛рдЗрдП рдЕрдиреБрд╕рд╛рд░ рдердк рд╡рд┐рд╡рд░рдгрд╣рд░реВ рджреЗрдЦрд╛рдЙрдБрдЫред

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

рдЪрд╛рдорд▓ред 2. рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрд╛рд░реЗ рдердк рдЬрд╛рдирдХрд╛рд░реАред

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

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

рдЪрд┐рддреНрд░ 3. рд╕реБрд░реБ рдЧрд░рд┐рдПрдХреЛ рдкреЛрдбред

рдкреНрд░рддрд┐рдорд╛рдХреЛ рдорд╛рдерд┐рд▓реНрд▓реЛ рджрд╛рдпрд╛рдБ рдХреБрдирд╛рдорд╛ рд░рд╣реЗрдХреЛ рд╕рд░реНрдХрд▓рдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрджрд╛ рдЪрд┐рддреНрд░ 4 рдорд╛ рджреЗрдЦрд╛рдЗрдП рдЕрдиреБрд╕рд╛рд░ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЦреЛрд▓реНрдЫред

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

рдЪрд╛рдорд▓ред 4. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫред

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

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

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрд░реЛрддрд╣рд░реВ (EN)

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

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди