Kubernetes рдкрд░ рдЬреЗрдирдХрд┐рдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕реАрдЖрдИ / рд╕реАрдбреА

рд╢реБрдн рджреЛрдкрд╣рд░


рдЬреЗрдирдХреАрдВрд╕, ci / cd рдФрд░ kubernetes рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Habr├й рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рд▓реЗрдЦ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдореИрдВ рдЗрди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди ci / dd рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рд╕рд░рд▓рддрдо рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ред


рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкрд╛рдардХ рдХреЛ рдбреЙрдХрдЯрд░ рдХреА рдмреБрдирд┐рдпрд╛рджреА рд╕рдордЭ рд╣реИ, рдФрд░ рдореИрдВ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдорд┐рдиреАрдХреНрдпреВрдм рдкрд░ рджрд┐рдЦрд╛рдП рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдИрдХреЗрдПрд╕, рдЬреАрдХреЗрдХреЗ, рдпрд╛ рдЬреИрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдкреНрд░рддрд┐рд╡реЗрд╢


рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ:


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

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


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░рдореИрдк рдХрд╛ рдПрдХ рд╣реА рд╕реЗрдЯ рд╣реЛрдЧрд╛:


apiVersion: v1 kind: Namespace metadata: name: production --- apiVersion: v1 kind: ConfigMap metadata: name: environment.properties namespace: production data: environment.properties: | env=production 

рдкрддрд╡рд╛рд░


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


 helm init 

рдЬреЗрдирдХреАрдВрд╕


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


 helm install --name jenkins --namespace jenkins -f jenkins/demo-values.yaml stable/jenkins 

Demo-values.yaml рдореЗрдВ рдЬреЗрдирдХрд┐рдВрд╕ рд╕рдВрд╕реНрдХрд░рдг, рдкреВрд░реНрд╡-рд╕реНрдерд╛рдкрд┐рдд рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ, рдПрдХ рдбреЛрдореЗрди рдирд╛рдо рдФрд░ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ


рдбреЗрдореЛ values.yaml
 Master: Name: jenkins-master Image: "jenkins/jenkins" ImageTag: "2.163-slim" OverwriteConfig: true AdminUser: admin AdminPassword: admin InstallPlugins: - kubernetes:1.14.3 - workflow-aggregator:2.6 - workflow-job:2.31 - credentials-binding:1.17 - git:3.9.3 - greenballs:1.15 - google-login:1.4 - role-strategy:2.9.0 - locale:1.4 ServicePort: 8080 ServiceType: NodePort HostName: jenkins.192.168.99.100.nip.io Ingress: Path: / Agent: Enabled: true Image: "jenkins/jnlp-slave" ImageTag: "3.27-1" #autoadjust agent resources limits resources: requests: cpu: null memory: null limits: cpu: null memory: null #to allow jenkins create slave pods rbac: install: true 

рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓реЙрдЧрд┐рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ / рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдж рдореЗрдВ рдкреБрди: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ google SSO рд╣реИ (рдЗрд╕рдХреЗ рд▓рд┐рдП google-login plugin рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреА рд╕реЗрдЯрд┐рдВрдЧ Jenkins> Manage Jenkins> Configure Global Security> Access Control> Security Realm> Login with Google) рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред


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



рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рднреА, PersistenceVolume рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдпрд╛ рдЕрджреНрдпрддрди рдХрд░рддреЗ рд╕рдордп рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


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


 kubectl create clusterrolebinding jenkins --clusterrole cluster-admin --serviceaccount=jenkins:default 

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


 helm upgrade jenkins stable/jenkins -f jenkins/demo-values.yaml 

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


 helm history jenkins helm rollback jenkins ${revision} 

рдЖрд╡реЗрджрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг


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


рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рд╣реЛрдЧреА:


  • рдЬрд╛рдВрдЪ
  • рд╕рдВрдХрд▓рди
  • рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг
  • рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг
  • рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп рд╡рд┐рдзрд╛рдирд╕рднрд╛
  • рдбреЙрдХрдЯрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп рддреИрдирд╛рддреА
  • рдордВрдЪрди рдХреЗ рд▓рд┐рдП рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреА рддреИрдирд╛рддреА (рдХреЗрд╡рд▓ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП)

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


рдЬрд╛рдВрдЪ



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


рд╕рдВрдХрд▓рди


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


 apiVersion: "v1" kind: "PersistentVolumeClaim" metadata: name: "repository" namespace: "jenkins" spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi 

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдиреЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд▓рдЧрднрдЧ 4 рд╕реЗ 1 рдорд┐рдирдЯ рддрдХ рдЧрддрд┐ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред


рд╡рд░реНрдЬрд╝рдирд┐рдВрдЧ


CI / CD рдХреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рд▓реНрдб рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


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


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдЖрдИрдбреА рдФрд░ рдХрдорд┐рдЯ рдХреА рддрд╛рд░реАрдЦ рд╕реЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдЙрддреНрдкрдиреНрди рдХрд░реВрдВрдЧрд╛, рд╕рд╛рде рд╣реА рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо, рдЕрдЧрд░ рдпрд╣ рдорд╛рд╕реНрдЯрд░ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 56e0fbdc-201802231623 рдпрд╛ b3d3c143-201802231548-PR-18 ред


рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рдн:


  • рд╕реНрд╡рдЪрд╛рд▓рди рдореЗрдВ рдЖрд╕рд╛рдиреА
  • рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рдордп рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ
  • рдиреЗрддреНрд░рд╣реАрди, рдЖрдк рдЙрдореНрдореАрджрд╡рд╛рд░ рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг (рд╡рд┐рдЬрд╝рд╛рд░реНрдб рд╕реЗ) рдпрд╛ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ (рд╢рд╛рдЦрд╛ рд╕реЗ) рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
    рд▓реЗрдХрд┐рди:
  • рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдореМрдЦрд┐рдХ рд╕рдВрдЪрд╛рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ
  • рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрд╕рдВрдЧрдд рдкрд░рд┐рд╡рд░реНрддрди рдереЗред

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


рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ


рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:


  • рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде docker рдХреА рдЫрд╡рд┐ рдЬреЛ рд╕рдВрдЧреНрд░рд╣ рдФрд░ docker рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рд▓реЛрдб рдХреА рдЬрд╛рдПрдЧреАред рдЙрджрд╛рд╣рд░рдг рдорд┐рдиреАрдХреНрдпреВрдм рд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕реЗ рдбреЙрдХрдЯрд░ рд╣рдм рдпрд╛ рдЕрдореЗрдЬрд╝реЕрди (рдИрдХреНрд░) рдпрд╛ Google рд╕реЗ рдПрдХ рдирд┐рдЬреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (withCredentials рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ)ред
  • рдкрддрд╡рд╛рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рддреИрдирд╛рддреА (рддреИрдирд╛рддреА, рд╕реЗрд╡рд╛, рдЖрджрд┐) рдХреЗ рд╡рд░реНрдгрди рдХреЗ рд╕рд╛рде рдкрддрд╡рд╛рд░ рдЪрд╛рд░реНрдЯред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЗрдВ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЗ рдПрдХ рдЕрд▓рдЧ рднрдВрдбрд╛рд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди, рд╕рд░рд▓реАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рддрд┐рдмрджреНрдз рд╕реЗ рдмрд╛рд╣рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдХреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Jenkinsfile


рдирддреАрдЬрддрди, рдЖрд╡реЗрджрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЗрдирдХрд┐рдВрд╕рдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:


Jenkinsfile
 def branch def revision def registryIp pipeline { agent { kubernetes { label 'build-service-pod' defaultContainer 'jnlp' yaml """ apiVersion: v1 kind: Pod metadata: labels: job: build-service spec: containers: - name: maven image: maven:3.6.0-jdk-11-slim command: ["cat"] tty: true volumeMounts: - name: repository mountPath: /root/.m2/repository - name: docker image: docker:18.09.2 command: ["cat"] tty: true volumeMounts: - name: docker-sock mountPath: /var/run/docker.sock volumes: - name: repository persistentVolumeClaim: claimName: repository - name: docker-sock hostPath: path: /var/run/docker.sock """ } } options { skipDefaultCheckout true } stages { stage ('checkout') { steps { script { def repo = checkout scm revision = sh(script: 'git log -1 --format=\'%h.%ad\' --date=format:%Y%m%d-%H%M | cat', returnStdout: true).trim() branch = repo.GIT_BRANCH.take(20).replaceAll('/', '_') if (branch != 'master') { revision += "-${branch}" } sh "echo 'Building revision: ${revision}'" } } } stage ('compile') { steps { container('maven') { sh 'mvn clean compile test-compile' } } } stage ('unit test') { steps { container('maven') { sh 'mvn test' } } } stage ('integration test') { steps { container ('maven') { sh 'mvn verify' } } } stage ('build artifact') { steps { container('maven') { sh "mvn package -Dmaven.test.skip -Drevision=${revision}" } container('docker') { script { registryIp = sh(script: 'getent hosts registry.kube-system | awk \'{ print $1 ; exit }\'', returnStdout: true).trim() sh "docker build . -t ${registryIp}/demo/app:${revision} --build-arg REVISION=${revision}" } } } } stage ('publish artifact') { when { expression { branch == 'master' } } steps { container('docker') { sh "docker push ${registryIp}/demo/app:${revision}" } } } } } 

рдЖрд╡реЗрджрди рдЬреАрд╡рди рдЪрдХреНрд░ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреЗрдирдХреАрдВрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЖрдпреЛрдЬрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐:


  • рдбреЙрдХрдЯрд░ рдЫрд╡рд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд░рдЦреЗрдВ
  • рдкрддрд╡рд╛рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рдкрддрд╡рд╛рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
  • рдПрдХ рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╕реНрдХрд░рдгрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрддрд╡рд╛рд░ рдЪрд╛рд░реНрдЯ рдореЗрдВ рд╕рдВрд╢реЛрдзрди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ helm / setVersion.sh рдлрд╝рд╛рдЗрд▓ рд╣реИ

рддреЛ рд╣рдо рдЖрд╡реЗрджрди рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЬреЗрдирдХрд┐рдВрд╕рдлрд╛рдЗрд▓ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН:



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


рдЬреЗрдирдХреАрдВрд╕ рдиреЗ рдкрд╛рдЗрдк рд▓рд╛рдЗрди рдХреЙрд▓ рдХреА рддреИрдирд╛рддреА рдХреА
 ... stage ('deploy to env') { when { expression { branch == 'master' || params.DEPLOY_BRANCH_TO_TST } } steps { build job: './../Deploy', parameters: [ [$class: 'StringParameterValue', name: 'GIT_REPO', value: 'habr-demo-app'], [$class: 'StringParameterValue', name: 'VERSION', value: revision], [$class: 'StringParameterValue', name: 'ENV', value: branch == 'master' ? 'staging' : 'test'] ], wait: false } } ... 

рдпрд╣рд╛рдВ рдЖрдк рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЗрдирдХрд┐рдВрд╕рдлрд╛рдЗрд▓ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред


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


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


Jenkinsfile рдФрд░ helm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдмрд╕ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП ci / cd рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдзрд┐ рдЙрди рдЫреЛрдЯреА рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдРрд╕реА рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде (рдХрд╛рд░рдг рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛) рд╣реИрдВ рдЬреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


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

Source: https://habr.com/ru/post/hi442614/


All Articles