ΠΠΎΠ΄Ρ ΠΎΠ΄ IaC (Infrastructure as Code) ΡΠΎΡΡΠΎΠΈΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ, Π½ΠΎ Π΅ΡΠ΅ Π»ΡΠ΄Π΅ΠΉ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΎΠΊΡΡΠΆΠ°ΡΡ. ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΈΠ· ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΠ Π² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ? ΠΡΠ΄Π΅Ρ Π½Π΅ Π»ΠΈΡΠ½ΠΈΠΌ Π΄Π΅ΡΠΆΠ°ΡΡ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ ΡΡΡ ΠΈΠ΄Π΅Ρ, ΠΏΠΎΠΊΠ° Π±ΡΠ΄Π΅ΡΠ΅ ΡΠΈΡΠ°ΡΡ ΡΡΠ°ΡΡΡ.
ΠΡΠΎ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠ° ΠΌΠΎΠ΅Π³ΠΎ
Slides and videos
English version Russian version - Dry run 2019-04-24
SpbLUG Video(RU) from DevopsConf 2019-05-28 Video(RU) from DINS DevOps EVENING 2019-06-20 Slides
Infrastructure as bash history
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΠ΅ Π²Ρ Π½Π° Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π° Π²Π°ΠΌ Π³ΠΎΠ²ΠΎΡΡΡ: «Ρ Π½Π°Ρ Infrastructure as Code«. Π ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, Infrastructure as bash history ΠΈΠ»ΠΈ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Documentation as bash history. ΠΡΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅Π°Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π» ΠΠ΅Π½ΠΈΡ ΠΡΡΠ΅Π½ΠΊΠΎ Π² Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅
ΠΡΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Infrastructure as bash history ΡΡΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄:
- Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ: Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π·ΡΡΡ bash history, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΡΡΡΠ΄Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΡΡΠ°ΡΠΈ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° Π²ΡΡ ΠΎΠ΄Π΅.
- Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: Π²Ρ Π·Π½Π°Π΅ΡΠ΅ ΠΊΡΠΎ Π·Π°Ρ ΠΎΠ΄ΠΈΠ» ΠΈ ΡΡΠΎ Π΄Π΅Π»Π°Π», ΠΎΠΏΡΡΡ ΠΆΠ΅ Π½Π΅ ΡΠ°ΠΊΡ, ΡΡΠΎ ΡΡΠΎ Π²Π°Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° Π²ΡΡ ΠΎΠ΄Π΅.
- ΠΈΡΡΠΎΡΠΈΡ: ΠΈΡΡΠΎΡΠΈΡ ΠΊΡΠΎ ΠΈ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π». ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π΅ΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠ΅ΡΡΠ΅ΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ.
Π§ΡΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°ΡΡ?
Infrastructure as Code
ΠΠ°ΠΆΠ΅ ΡΠ°ΠΊΠΎΠΉ ΡΡΡΠ°Π½Π½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΊΠ°ΠΊ Infrastructure as bash history ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΡΠ½ΡΡΡ Π·Π° ΡΡΠΈ ΠΊ Infrastructure as Code, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π·Π°Ρ ΠΎΡΠΈΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΠΎΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΡΠ΅ΠΌ ΡΡΠ°ΡΡΠΉ Π΄ΠΎΠ±ΡΡΠΉ LAMPΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ, ΠΌΡ ΠΏΡΠΈΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΊ-ΡΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ, Π΄ΠΎΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ. ΠΠ°Π»Π΅Π΅ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Infrastructure as Code ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΠ.
D.R.Y.
ΠΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π‘Π₯Π, Π±ΡΠ»Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠ°
- ΡΡΠ΄Π° Π·Π°ΠΉΠ΄ΠΈ ΠΏΠΎ ssh ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
- ΡΡΠ΄Π° ΡΠΊΠΎΠΏΠΈΡΡΠΉ ΡΠ°ΠΉΠ»ΠΈΠΊ.
- Π·Π΄Π΅ΡΡ ΠΏΠΎΠ΄ΠΏΡΠ°Π²Ρ ΠΊΠΎΠ½ΡΠΈΠ³.
- ΡΠ°ΠΌ Π·Π°ΠΏΡΡΡΠΈ ΡΠ΅ΡΠ²ΠΈΡ
- …
- PROFIT!
ΠΠ»Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ bash, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π½Π° ΡΠ°Π½Π½ΠΈΡ
ΡΡΠ°Π΄ΠΈΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΡΡΡΠ΅Ρ. ΠΡΠΎ
ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, Π΅ΡΡΡ ΡΠ°ΠΊΠ°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° D.R.Y. (Do not Repeat Yourself). ΠΠ΄Π΅Ρ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄. ΠΠ²ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ, Π½ΠΎ ΠΏΡΠΈΡΠ»ΠΈ ΠΊ ΡΡΠΎΠΌΡ Π½Π΅ ΡΡΠ°Π·Ρ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Π±ΡΠ»Π° Π±Π°Π½Π°Π»ΡΠ½Π°Ρ ΠΈΠ΄Π΅Ρ: ΠΎΡΠ΄Π΅Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΠΈ ΠΎΡ ΡΠΊΡΠΈΠΏΡΠΎΠ². Π’.Π΅. Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΊΠ°ΠΊ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, ΠΊΠΎΠ½ΡΠΈΠ³ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
S.O.L.I.D. for CFM
Π‘ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΎΡ ΠΈ
The Single Responsibility Principle
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π»ΠΈΡΡ ΠΎΠ΄Π½Ρ Π·Π°Π΄Π°ΡΡ.
ΠΠ΅ Π½Π°Π΄ΠΎ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΈ Π΄Π΅Π»Π°ΡΡ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠ½ΡΠ΅ Π±ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠ°ΠΊΠ°ΡΠΎΠ½Π½ΡΠ΅ ΠΌΠΎΠ½ΡΡΡΡ. ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· ΠΏΡΠΎΡΡΡΡ ΠΊΠΈΡΠΏΠΈΡΠΈΠΊΠΎΠ². ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΠ°Π·Π΄ΡΠΎΠ±ΠΈΡΡ Ansible playbook Π½Π° Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΊΡΡΠΎΡΠΊΠΈ, ΡΠΈΡΠ°ΠΉ Ansible ΡΠΎΠ»ΠΈ, ΡΠΎ ΠΈΡ ΠΏΡΠΎΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ.
The Open Closed Principle
ΠΡΠΈΠ½ΡΠΈΠΏ ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ/Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ.
- ΠΡΠΊΡΡΡΡ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ: ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΎ ΠΏΡΡΡΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΡΠΈΠΏΠΎΠ² ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ.
- ΠΠ°ΠΊΡΡΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ: Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠΈ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²Π½ΠΎΡΠΈΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΈ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ.
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΌΡ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π»ΠΈ ΡΠ΅ΡΡΠΎΠ²ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ , Π½ΠΎ Π·Π° ΡΡΠ΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ Π±ΡΠ»Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΌΡ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΠ°ΡΠΊΠ°ΡΠΊΡ Π½Π° baremetall.
The Liskov Substitution Principle
ΠΡΠΈΠ½ΡΠΈΠΏ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΠ°ΡΠ±Π°ΡΡ ΠΠΈΡΠΊΠΎΠ². ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌΠΈ Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΈΡ ΠΏΠΎΠ΄ΡΠΈΠΏΠΎΠ² Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΡΠ»ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΈΡΠ΅, ΡΠΎ Π½Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΡΠΎ ΡΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ S.O.L.I.D., ΠΎΠ½ΠΎ Π² ΡΠ΅Π»ΠΎΠΌ ΠΏΡΠΎ CFM, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΊΠΎΡΠΎΠ±ΠΎΡΠ½ΠΎΠ΅ Java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Java, ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π±Π°Π· Π΄Π°Π½Π½ΡΡ , OS, ΠΈΡΠ΄. ΠΠ° ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π±ΡΠ΄Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ S.O.L.I.D.
Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΅ΡΡΡ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ΅Π½Π½ΠΎΡΡΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΡΠΎΠ»Ρ imbjava ΠΈΠ»ΠΈ oraclejava, ΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠΉΠΌΡΠΉ ΡΠ°ΠΉΠ» java. ΠΡΠΎ Π½ΡΠΆΠ½ΠΎ Ρ.ΠΊ. Π²ΡΡΠ΅ΡΡΠΎΡΡΠ΅Π΅ ΡΠΎΠ»ΠΈ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΎΠ½ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ java. Π ΡΠΎΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΡΡΠΎ Π½Π°ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΌΠ΅Π½ΡΡΡ ΠΎΠ΄Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ/Π²Π΅ΡΡΠΈΡ java Π½Π° Π΄ΡΡΠ³ΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π΄Π΅ΡΡ ΠΊΡΠΎΠ΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Ansible Π½Π΅Π»ΡΠ·Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠ΅, ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ΅Π½Π½ΠΎΡΡΠΈ.
The Interface Segregation Principle
ΠΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Β«ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΌΡ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ Π²ΡΡ Π²Π°ΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΎΠ΄ΠΈΠ½ Ansible playbook, Π½ΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ, Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π°ΡΡΠΆΡ (ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ 443 ΠΏΠΎΡΡ) ΡΠΎ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΈΠ· ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠΈΡΠΏΠΈΡΠΈΠΊΠΎΠ².
The Dependency Inversion Principle
ΠΡΠΈΠ½ΡΠΈΠΏ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. ΠΠΎΠ΄ΡΠ»ΠΈ Π²Π΅ΡΡ Π½ΠΈΡ ΡΡΠΎΠ²Π½Π΅ΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π½ΠΈΠΆΠ½ΠΈΡ ΡΡΠΎΠ²Π½Π΅ΠΉ. ΠΠ±Π° ΡΠΈΠΏΠ° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ. ΠΠ±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ. ΠΠ΅ΡΠ°Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ.
ΠΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° Π°Π½ΡΠΈΠΏΠ°ΡΡΠ΅ΡΠ½Π΅.
- Π£ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠΎΠ² Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ΅ ΠΎΠ±Π»Π°ΠΊΠΎ.
- ΠΠ½ΡΡΡΠΈ ΠΎΠ±Π»Π°ΠΊΠ° ΠΌΡ Π·Π°ΠΊΠ°Π·ΡΠ²Π°Π»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ.
- ΠΠΎ Π² Π²ΠΈΠ΄Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΠΎΠ±Π»Π°ΠΊΠ°, ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ²ΡΠ·Π°Π½ΠΎ ΠΊ ΡΠΎΠΌΡ, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ Π³ΠΈΠΏΠ΅ΡΠ²ΠΈΠ·ΠΎΡ ΠΏΠΎΠΏΠ°Π»Π° ΠΠ.
Π’.Π΅. Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΏΡΠΎΡΠ΅ΠΊΠ°Π»Π° Π½Π° Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°ΡΠΈΠ΅ ΡΡΠΎΠ²Π½ΠΈ Π³ΠΈΠΏΠ΅ΡΠ²ΠΈΠ·ΠΎΡΠ°, ΠΈ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π»ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ. ΠΠ΅ Π½Π°Π΄ΠΎ ΡΠ°ΠΊ.
Interaction
ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ β ΡΡΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎ ΠΊΠΎΠ΄, Π½ΠΎ Π΅ΡΡ ΠΈ ΠΏΡΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, ΠΏΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
Bus factor
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Ρ Π²Π°Ρ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π΅ΡΡΡ ΠΠ°ΡΡ. ΠΠ°ΡΡ Π²ΡΡ Π·Π½Π°Π΅Ρ ΠΏΡΠΎ Π²Π°ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π΅ΡΠ»ΠΈ ΠΠ°ΡΡ Π²Π΄ΡΡΠ³ ΠΏΡΠΎΠΏΠ°Π΄Π΅Ρ? ΠΡΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅Π°Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, Π²Π΅Π΄Ρ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ±ΠΈΡΡ Π°Π²ΡΠΎΠ±ΡΡ. ΠΠ½ΠΎΠ³Π΄Π° ΡΠ°ΠΊΠΎΠ΅ ΡΠ»ΡΡΠ°Π΅ΡΡΡ. ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ΅ ΡΠ»ΡΡΠΈΡΡΡ ΠΈ Π·Π½Π°Π½ΠΈΠ΅ ΠΎΠ± ΠΊΠΎΠ΄Π΅, Π΅Π³ΠΎ ΡΡΡΡΠΊΡΡΡΠ΅, ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΡΠ²ΠΊΠ°Ρ ΠΈ ΠΏΠ°ΡΠΎΠ»ΡΡ , Π½Π΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ ΡΡΠ΄ΠΎΠΌ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ. Π§ΡΠΎ Π±Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈ ΡΠΈΡΠΊΠΈ ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π·Π½Π°Π½ΠΈΠ΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ
Pair Devopsing
ΠΡΠΎ Π½Π΅ ΠΊΠ°ΠΊ
ΠΡΡΠ³ΠΎΠΉ ΡΠ°ΡΡΠ½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ, ΡΡΠΎ incident call. ΠΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π³ΡΡΠΏΠΏΠ° Π΄Π΅ΠΆΡΡΠ½ΡΡ ΠΈ ΠΏΡΠΈΡΠ°ΡΡΠ½ΡΡ , Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ Π²Π΅Π΄ΡΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠΊΡΠ°Π½ ΠΈ ΠΎΠ·Π²ΡΡΠΈΠ²Π°Π΅Ρ Ρ ΠΎΠ΄ ΠΌΡΡΠ»ΠΈ. ΠΡΡΠ³ΠΈΠ΅ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ ΡΠ»Π΅Π΄ΡΡΡ Π·Π° ΠΌΡΡΠ»ΡΡ Π²Π΅Π΄ΡΡΠ΅Π³ΠΎ, ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΡΡΠΊΠΈ ΠΈΠ· ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ, ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΠΏΡΡΡΠΈΠ» ΡΡΡΠΎΡΠΊΡ Π² Π»ΠΎΠ³Π΅, ΡΠ·Π½Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠ± ΡΠΈΡΡΠ΅ΠΌΠ΅. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠΊΠΎΡΠ΅Π΅ ΡΠ°Π±ΠΎΡΠ°Π», ΡΠ΅ΠΌ Π½Π΅Ρ.
Code Review
Π‘ΡΠ±ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ, Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°Π½ΠΈΠΉ ΠΎΠ± ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ ΠΈ ΡΠΎΠΌ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΡΡΡΡΠΎΠ΅Π½Π° ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠ»ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ code review:
- ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΎΠΏΠΈΡΠ°Π½Π° ΠΊΠΎΠ΄ΠΎΠΌ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ.
- ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΠΊΠ΅.
- ΠΡΠΈ ΠΌΠ΅ΡΠ΄ΠΆΠ΅ ΡΠ΅ΠΊΠ²Π΅ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π΄Π΅Π»ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
ΠΠ·ΡΠΌΠΈΠ½ΠΊΠΎΠΉ Π·Π΄Π΅ΡΡ Π±ΡΠ»ΠΎ, ΡΠΎ ΡΡΠΎ ΡΠ΅Π²ΡΡΠ²Π΅ΡΡ Π²ΡΠ±ΠΈΡΠ°Π»ΠΈΡΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΠΏΠΎ Π³ΡΠ°ΡΠΈΠΊΡ, Ρ.Π΅. Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄ΠΎΠ»Π΅ΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ ΡΡ Π·Π°Π»Π΅Π·Π΅ΡΡ Π² Π½ΠΎΠ²ΡΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
Code Style
Π‘ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΡΡΠ°Π»ΠΈ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΡΠΊΠ»ΠΎΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅Π²ΡΡ, Ρ.ΠΊ. Ρ ΡΠ΅Π²ΡΡΠ²Π΅ΡΠΎΠ² Π±ΡΠ» ΡΠ²ΠΎΠΉ ΡΡΠΈΠ»Ρ ΠΈ ΡΠΎΡΠΈΡΡΠ΅ΠΌΠΎΡΡΠΈ ΡΠ΅Π²ΡΡΠ²Π΅ΡΠΎΠ² ΡΡΠ°ΠΊΠΈΠ²Π°Π»Π° ΠΈΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΡΠΈΠ»ΡΠΌΠΈ: 2 ΠΏΡΠΎΠ±Π΅Π»Π° ΠΈΠ»ΠΈ 4, camelCase ΠΈΠ»ΠΈ snake_case. ΠΠ½Π΅Π΄ΡΠΈΡΡ ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π½Π΅ ΡΡΠ°Π·Ρ.
- ΠΠ΅ΡΠ²ΠΎΠΉ ΠΈΠ΄Π΅ΠΉ Π±ΡΠ»ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΡΠΎΠ²Π΅ΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ linter, Π²Π΅Π΄Ρ Π²ΡΠ΅ ΠΆΠ΅ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡ, Π²ΡΠ΅ ΡΠΌΠ½ΡΠ΅. ΠΠΎ ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΡ, ΠΠ‘, Π½Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎ
- ΠΡΠΎ ΡΠ²ΠΎΠ»ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π»ΠΎ Π² Π±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΌΡ ΠΏΠΈΡΠ°Π» Π² slack, ΠΈ ΠΏΡΠΈΠΊΠ»Π°Π΄ΡΠ²Π°Π» Π²ΡΠ²ΠΎΠ΄ linter. ΠΠΎ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΡΠ΅ Π΄Π΅Π»Π° ΠΈ ΠΊΠΎΠ΄ ΠΎΡΡΠ°Π²Π°Π»ΡΡ Π½Π΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΌ.
Green Build Master
ΠΡΠ΅ΠΌΡ ΠΈΠ΄Π΅Ρ, ΠΈ ΠΏΡΠΈΡΠ»ΠΈ ΠΊ ΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΡΠΊΠ°ΡΡ Π² ΠΌΠ°ΡΡΠ΅Ρ ΠΊΠΎΠΌΠΌΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ Π½Π΅ΠΊΠΈΠ΅ ΡΠ΅ΡΡΡ. ΠΡΠ°Π»Ρ! ΠΌΡ ΠΈΠ·ΠΎΠ±ΡΠ΅Π»ΠΈ Green Build Master ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ Π΄Π°Π²Π½ΡΠΌ-Π΄Π°Π²Π½ΠΎ ΠΏΡΠ°ΠΊΡΠΈΠΊΡΠ΅ΡΡΡ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΠ:
- Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ΄Π΅Ρ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΠΊΠ΅.
- ΠΠΎ ΡΡΠΎΠΉ Π²Π΅ΡΠΊΠ΅ Π³ΠΎΠ½ΡΡΡΡΡ ΡΠ΅ΡΡΡ.
- ΠΡΠ»ΠΈ ΡΠ΅ΡΡΡ Π½Π΅ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ, ΡΠΎ ΠΊΠΎΠ΄ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ Π² ΠΌΠ°ΡΡΠ΅Ρ.
ΠΡΠΈΠ½ΡΡΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π±ΡΠ»ΠΎ Π²Π΅ΡΡΠΌΠ° Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΡΠΌ, Ρ.ΠΊ. Π²ΡΠ·Π²Π°Π»ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΏΠΎΡΠΎΠ², Π½ΠΎ ΠΎΠ½ΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠΈΠ»ΠΎ, Ρ.ΠΊ. Π½Π° ΡΠ΅Π²ΡΡ ΡΡΠ°Π»ΠΈ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΡΠ»ΠΈΡΠ½ΠΈΠ΅ Π±Π΅Π· ΡΠ°Π·Π½ΠΎΠ³Π»Π°ΡΠΈΠΉ ΠΏΠΎ ΡΡΠΈΠ»Ρ ΠΈ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠ»-Π²ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΡ ΠΌΠ΅ΡΡ ΡΡΠ°Π»ΠΎ ΡΠΌΠ΅Π½ΡΡΠ°ΡΡΡΡ.
IaC Testing
ΠΡΠΎΠΌΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠΈΠ»Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π²Π΅ΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΡΠΎ Π²Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡΡΡ. ΠΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ Π½Π΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ Π΄Π΅Π½Π΅Π³. ΠΠ°ΡΠ΅ΠΌ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ? ΠΠΎΠΏΡΠΎΡ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΈ ΡΠΈΠ»ΠΎΡΠΎΡΡΠΊΠΈΠΉ, ΠΎΡΠ²Π΅ΡΠΈΡΡ Π»ΡΡΡΠ΅ Π±Π°ΠΉΠΊΠΎΠΉ, ΡΡΠΎ ΠΊΠ°ΠΊ-ΡΠΎ Π±ΡΠ» auto-scaler Π½Π° Powershell ΠΊΠΎΡΠΎΡΡΠΉ, Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ» ΠΏΠΎΠ³ΡΠ°Π½ΠΈΡΠ½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ => ΡΠΎΠ·Π΄Π°Π»ΠΎΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΠ ΡΠ΅ΠΌ Π½Π°Π΄ΠΎ => ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΡΡΠ°ΡΠΈΠ» Π΄Π΅Π½Π΅Π³ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π». ΠΡΠΈΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΎ, Π½ΠΎ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΡΠ»ΠΎΠ²ΠΈΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΠΈΡ ΡΡΠ°Π΄ΠΈΡΡ .
ΠΠΎΠΆΠ½ΠΎ ΡΠΏΡΠΎΡΠΈΡΡ, Π° Π·Π°ΡΠ΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π΅ΡΠ΅ ΡΠ»ΠΎΠΆΠ½Π΅Π΅? Π’Π΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΊΠΎΠ΄Π°, ΡΡΠΎ Π½Π΅ ΠΏΡΠΎ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅, Π° ΠΏΡΠΎ Π·Π½Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Π²Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ.
IaC Testing Pyramid
IaC Testing: Static Analysis
ΠΡΠ»ΠΈ ΡΡΠ°Π·Ρ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ Π²ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΡΠΎ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ ΡΡΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΠΉΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΊΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π² ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΠΎ-ΡΠΎ Π±ΡΡΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π΅, Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ ΠΎΠ½ΠΎ ΠΏΠΎΠΊΡΡΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠΌΡΠΈΠ²Π½ΡΡ ΠΌΠ΅ΡΡ.
Bash is tricky
ΠΠΎΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π±Π°Π½Π°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ. Π²ΡΠ±ΡΠ°ΡΡ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΈ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π² Π΄ΡΡΠ³ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ. ΠΠ΅ΡΠ²ΠΎΠ΅ ΡΡΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π² Π³ΠΎΠ»ΠΎΠ²Ρ:
for i in * ; do
cp $i /some/path/$i.bak
done
Π ΡΡΠΎ Π΅ΡΠ»ΠΈ Π² ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΏΡΠΎΠ±Π΅Π» Π΅ΡΡΡ? ΠΡ ΠΎΠΊ, ΠΌΡ ΠΆΠ΅ ΡΠΌΠ½ΡΠ΅, ΡΠΌΠ΅Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°Π²ΡΡΠΊΠ°ΠΌΠΈ:
for i in * ; do cp "$i" "/some/path/$i.bak" ; done
ΠΠΎΠ»ΠΎΠ΄ΡΡ? Π½Π΅Ρ! Π§ΡΠΎ Π΅ΡΠ»ΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ, Ρ.Π΅. Π³Π»ΠΎΠ±ΠΈΠ½Π³ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
find . -type f -exec mv -v {} dst/{}.bak ;
Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎ ΠΌΠΎΠ»ΠΎΠ΄ΡΡ? Π½Π΅Π°β¦ ΠΠ°Π±ΡΠ»ΠΈ ΡΡΠΎ Π² ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ n
.
touch x
mv x "$(printf "foonbar")"
find . -type f -print0 | xargs -0 mv -t /path/to/target-dir
Static analysis tools
ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ°Π³Π° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΡΠ»ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π·Π°Π±ΡΠ»ΠΈ ΠΊΠ°Π²ΡΡΠΊΠΈ, Π΄Π»Ρ ΡΡΠΎ Π² ΠΏΡΠΈΡΠΎΠ΄Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ
Language
Tool
bash
Ruby
python
ansible
IaC Testing: Unit Tests
ΠΠ°ΠΊ ΠΌΡ ΡΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π»ΠΈΠ½ΡΠ΅ΡΡ Π½Π΅ Π²ΡΠ΅ΠΌΠΎΠ³ΡΡΠΈΠ΅ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠΊΠ°Π·Π°ΡΡ Π½Π° Π²ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠ΅ ΠΌΠ΅ΡΡΠ°. ΠΠ°Π»ΡΡΠ΅ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΠ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΏΡΠΎ unit tests. Π’ΡΡ ΡΡΠ°Π·Ρ Π½Π° ΡΠΌ ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡ
Π ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΏΡΠΎ S.O.L.I.D. ΠΈ ΡΠΎ ΡΡΠΎ Π½Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ ΠΊΠΈΡΠΏΠΈΡΠΈΠΊΠΎΠ². ΠΡΠΈΡΠ»ΠΎ ΠΈΡ Π²ΡΠ΅ΠΌΡ.
- ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π΄ΡΠΎΠ±ΠΈΡΡΡ Π½Π° ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΠΊΠΈΡΠΏΠΈΡΠΈΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ansible ΡΠΎΠ»ΠΈ.
- Π Π°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅, Π±ΡΠ΄Ρ ΡΠΎ docker ΠΈΠ»ΠΈ ΠΠ.
- ΠΠ° ΡΡΠΎ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π½Π°ΡΡ Ansible ΡΠΎΠ»Ρ.
- ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΡΠΎ Π²ΡΠ΅ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ (ΠΏΡΠΎΠ³ΠΎΠ½ΡΠ΅ΠΌ ΡΠ΅ΡΡΡ).
- Π Π΅ΡΠ°Π΅ΠΌ ΠΎΠΊ ΠΈΠ»ΠΈ Π½Π΅ ΠΎΠΊ.
IaC Testing: Unit Testing tools
ΠΠΎΠΏΡΠΎΡ, Π° ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅ΡΡΡ Π΄Π»Ρ CFM? ΠΌΠΎΠΆΠ½ΠΎ Π±Π°Π½Π°Π»ΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠΊΡΠΈΠΏΡ, Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ:
CFM
Tool
Ansible
Chef
Chef
saltstack
ΠΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ testinfra, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ test1
, test2
ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΈ ΡΠΎΡΡΠΎΡΡ Π² Π³ΡΡΠΏΠΏΠ΅ sshusers
:
def test_default_users(host):
users = ['test1', 'test2' ]
for login in users:
assert host.user(login).exists
assert 'sshusers' in host.user(login).groups
Π§ΡΠΎ Π²ΡΠ±ΡΠ°ΡΡ? Π²ΠΎΠΏΡΠΎΡ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΈ Π½Π΅ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΡΠΉ, Π²ΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Π½Π° github Π·Π° 2018-2019 Π³ΠΎΠ΄Π°:
IaC Testing frameworks
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΊΠ°ΠΊ ΡΡΠΎ Π²ΡΠ΅ ΡΠΎΠ±ΡΠ°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ? ΠΠΎΠΆΠ½ΠΎ
CFM
Tool
Ansible
Chef
Terraform
ΠΡΠΈΠΌΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Π½Π° github Π·Π° 2018-2019 Π³ΠΎΠ΄Π°:
Molecule vs. Testkitchen
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΌΡ
- Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΠ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»Ρ.
- ΠΡΠΈΠΌΠ΅Π½ΠΈΡΡ Ansible ΡΠΎΠ»ΠΈ.
- ΠΡΠΎΠ³ΠΎΠ½ΡΡΡ inspec.
ΠΠ»Ρ 25-35 ΡΠΎΠ»Π΅ΠΉ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ 40-70 ΠΌΠΈΠ½ΡΡ, ΡΡΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΠ»Π³ΠΎ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ ΡΡΠ°Π» ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° jenkins / docker / ansible / molecule. ΠΠ΄ΠΈΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ ΡΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅
- ΠΡΠΎΠ»ΠΈΠ½ΡΠΎΠ²Π°ΡΡ ΠΏΠ»ΡΠΉΠ±ΡΠΊΠΈ.
- ΠΡΠΎΠ»ΠΈΠ½ΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΠΈ.
- ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
- ΠΡΠΈΠΌΠ΅Π½ΠΈΡΡ Ansible ΡΠΎΠ»ΠΈ.
- ΠΡΠΎΠ³ΠΎΠ½ΡΡΡ testinfra.
- ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡΡ.
ΠΠΈΠ½ΡΠΎΠ²ΠΊΠ° Π΄Π»Ρ 40 ΡΠΎΠ»Π΅ΠΉ ΠΈ ΡΠ΅ΡΡΡ Π΄Π»Ρ Π΄Π΅ΡΡΡΠΊΠ° ΡΡΠ°Π»ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° 15 ΠΌΠΈΠ½ΡΡ.
Π§ΡΠΎ Π²ΡΠ±ΡΠ°ΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ°ΠΊΡΠΎΡΠΎΠ², ΠΊΠ°ΠΊ ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΡΡΠΊ, ΡΠΊΡΠΏΠ΅ΡΡΠΈΠ·Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΈΡΠ΄. ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅ΡΠ°Π΅Ρ ΡΠ°ΠΌ ΠΊΠ°ΠΊ Π·Π°ΠΊΡΡΠ²Π°ΡΡ Π²ΠΎΠΏΡΠΎΡ Unit ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
IaC Testing: Integration Tests
ΠΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΏΠ΅Π½ΠΈ ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΏΠΎΡΠ²Π»ΡΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΡΡΡ. ΠΠ½ΠΈ ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° Unit ΡΠ΅ΡΡΡ:
- ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π΄ΡΠΎΠ±ΠΈΡΡΡ Π½Π° ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΠΊΠΈΡΠΏΠΈΡΠΈΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ansible ΡΠΎΠ»ΠΈ.
- Π Π°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅, Π±ΡΠ΄Ρ ΡΠΎ docker ΠΈΠ»ΠΈ ΠΠ.
- ΠΠ° ΡΡΠΎ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Ansible ΡΠΎΠ»Π΅ΠΉ.
- ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΡΠΎ Π²ΡΠ΅ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ(ΠΏΡΠΎΠ³ΠΎΠ½ΡΠ΅ΠΌ ΡΠ΅ΡΡΡ).
- Π Π΅ΡΠ°Π΅ΠΌ ΠΎΠΊ ΠΈΠ»ΠΈ Π½Π΅ ΠΎΠΊ.
ΠΡΡΠ±ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΠΌΡ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π² unit ΡΠ΅ΡΡΠ°Ρ , ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ Π² ΡΠ΅Π»ΠΎΠΌ.
IaC Testing: End to End Tests
ΠΠ° Π²Π΅ΡΡΠΈΠ½Π΅ ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Ρ Π½Π°Ρ Π²ΡΡΡΠ΅ΡΠ°ΡΡ End to End ΡΠ΅ΡΡΡ. Π’.Π΅. ΠΌΡ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°, ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΈΡΠΏΠΈΡΠΈΠΊΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ. ΠΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ, Π½Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΊΠ°ΠΊ ΠΌΡ ΡΡΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ Π³ΠΎΡΠΎΠ²ΡΡ ΠΊΠΎΡΠΎΠ±ΠΎΡΠ½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΠΌΠ½Π΅ Π½Π΅ Π΄ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π²ΠΈΠ΄Π΅ΡΡ, Π½Π°Π²Π΅ΡΠ½ΠΎ Ρ.ΠΊ. ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π·Π° ΡΠ°ΡΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Π°Ρ ΠΈ Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΡΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ Π΅Π΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΊ ΠΈΡΠΎΠ³ Π²ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ. Π‘ΠΏΡΠΎΡ Π΅ΡΡΡ, Π° Π²ΠΎΡ ΠΎΡΠ²Π΅ΡΠ° Π½Π΅Ρ. ΠΠΎΡΡΠΎΠΌΡ, ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΡΡΠΎ Π΅ΡΡΡ, ΡΡΠΎΠ±Ρ Π½Π°ΡΠΎΠ»ΠΊΠ½ΡΡΡ Π΄ΡΡΠ³ΠΈΡ Π½Π° Π·Π΄ΡΠ°Π²ΡΠ΅ ΠΌΡΡΠ»ΠΈ ΠΈΠ»ΠΈ ΡΠΊΠ½ΡΡΡ ΠΌΠ΅Π½Ρ Π½ΠΎΡΠΎΠΌ, ΡΡΠΎ Π²ΡΡ Π΄Π°Π²Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ΅Π½ΠΎ Π΄ΠΎ Π½Π°Ρ.
ΠΡΠΎΠ΅ΠΊΡ Ρ Π±ΠΎΠ³Π°ΡΠΎΠΉ ΠΈΡΡΠΎΡΠΈΠ΅ΠΉ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡ ΠΈ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π²Π°Ρ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°Π»ΡΡ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π±Π°Π· Π΄Π°Π½Π½ΡΡ , ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ ΠΈΡΠ΄ ΠΈΡΠΏ. ΠΠ½Π°Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ docker-compose ΡΠ°ΠΉΠ»ΠΎΠ², Π° Π·Π½Π°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ β ΡΡΠΎ jenkins.
ΠΡΠ° ΡΡ
Π΅ΠΌΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ ΡΠ°Π±ΠΎΡΠ°Π»Π°, ΠΏΠΎΠΊΠ° Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΡΡΠ»Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠ»Π° Π΄Π°Π»ΡΡΠ΅, ΠΈ Π² openshift Π½Π°ΡΠ»Π°ΡΡ ΡΠ°ΠΊΠ°Ρ ΡΡΡΠΊΠ° APB (Ansible Playbook Bundle), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π°ΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ Π·Π½Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ. Π’.Π΅. Π΅ΡΡΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠ°Ρ, ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΠΎΡΠΊΠ° Π·Π½Π°Π½ΠΈΡ, ΠΊΠ°ΠΊ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
ΠΡΡ ΡΡΠΎ Π·Π²ΡΡΠ°Π»ΠΎ Ρ ΠΎΡΠΎΡΠΎ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΡΠΊΠ½ΡΠ»ΠΈΡΡ Π² Π³Π΅ΡΠ΅ΡΠΎΠ³Π΅Π½Π½ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ: Π½Π°ΠΌ Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ² Π½ΡΠΆΠ½Π° Windows. Π ΠΈΡΠΎΠ³Π΅ Π·Π½Π°Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ ΡΡΠΎ, Π³Π΄Π΅ ΠΊΠ°ΠΊ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ, ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠ΄ΠΈΡ Π² jenkins.
Conclusion
Infrastructure as Code ΡΡΠΎ
- ΠΠΎΠ΄ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ.
- ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π»ΡΠ΄Π΅ΠΉ.
- Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
links
English Version Cross post ΠΈΠ· Π»ΠΈΡΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠ³Π° - Dry run 2019-04-24
SpbLUG Video(RU) from DevopsConf 2019-05-28 Video(RU) from DINS DevOps EVENING 2019-06-20 Lessons Learned From Writing Over 300,000 Lines of Infrastructure Code &text version Integrating Infrastructure as Code into a Continuous Delivery Pipeline Π’Π΅ΡΡΠΈΡΡΠ΅ΠΌ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Ansible-ΡΠΎΠ»Π΅ΠΉ Ansible β ΡΡΠΎ Π²Π°ΠΌ Π½Π΅ bash!
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com