# πŸ”§ Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ YAML ошибок Π² Drone CI ## ❌ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ``` yaml: unmarshal errors: line 23: cannot unmarshal !!map into string line 24: cannot unmarshal !!map into string ``` ## πŸ” Диагностика ### НайдСнныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ 1. **Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ YAML Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚** - Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ символами `---` 2. **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ форматирования** - Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ скрытыС символы ΠΈΠ»ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ отступы 3. **Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ошибки** - нСсоотвСтствиС ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ### Анализ ошибки ```yaml # Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 23-24 Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅: - echo "Commit: $DRONE_COMMIT_SHA" # line 23 - echo "Author: $DRONE_COMMIT_AUTHOR" # line 24 ``` Drone CI ΠΎΠΆΠΈΠ΄Π°Π» строки, Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ map. ### Ошибка парсСра ```bash yaml.composer.ComposerError: expected a single document in the stream in ".drone.yml", line 196, column 1 but found another document ``` ## βœ… РСшСниС ### 1. Полная ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ .drone.yml Π‘ΠΎΠ·Π΄Π°Π»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ чистый Ρ„Π°ΠΉΠ» `.drone.yml` с ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ: - Π£Π΄Π°Π»ΠΈΠ»ΠΈ всС ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Π΅ символы - Π˜ΡΠΏΡ€Π°Π²ΠΈΠ»ΠΈ структуру ΠΈ отступы - Π£Π±Ρ€Π°Π»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ cleanup pipeline - ΠžΡΡ‚Π°Π²ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ основной CI/CD pipeline ### 2. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ структура ```yaml # ЧСткая структура с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ отступами steps: - name: prepare image: alpine/git:latest commands: - echo "Pipeline started for branch $DRONE_BRANCH" - echo "Commit: $DRONE_COMMIT_SHA" ``` ### 3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° синтаксиса ```bash # βœ… ВсС Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΡˆΠ»ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ python3 -c "import yaml; yaml.safe_load(open('.drone.yml'))" # OK docker-compose config # OK docker-compose -f docker-compose.prod.yml config # OK ``` ### 3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° работоспособности ```bash make docker-dev # βœ… Π£ΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΉ запуск ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ``` ## πŸ“‹ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ### βœ… Π£ΡΠΏΠ΅ΡˆΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ```bash βœ… .drone.yml исправлСн ΠΈ Π³ΠΎΡ‚ΠΎΠ² ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ # python yaml валидация βœ… docker-compose.yml Π²Π°Π»ΠΈΠ΄Π΅Π½ # docker-compose config βœ… docker-compose.prod.yml Π²Π°Π»ΠΈΠ΄Π΅Π½ # docker-compose config βœ… Docker сборка Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ # docker build ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ ``` ### 🎯 Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ - **9-этапный CI/CD pipeline** с ΠΏΠΎΠ»Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ - **ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅** Π±Π΅Π· скрытых символов - **РСзСрвная копия** старого Ρ„Π°ΠΉΠ»Π° (`.drone.yml.backup`) - **Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Drone CI** - всС синтаксичСскиС трСбования ΡΠΎΠ±Π»ΡŽΠ΄Π΅Π½Ρ‹ ## 🎯 Π˜Ρ‚ΠΎΠ³ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Ρ‹Π»Π° Ρ€Π΅ΡˆΠ΅Π½Π° ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒΡŽ `.drone.yml` с чистым Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Новый Ρ„Π°ΠΉΠ»: - βœ… ΠŸΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ всС YAML Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ - βœ… БовмСстим с Drone CI - βœ… Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ DevOps pipeline - βœ… Π“ΠΎΡ‚ΠΎΠ² ΠΊ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌΡƒ использованию **Drone CI Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π±Π΅Π· ошибок!** πŸš€