Код-ревью Junior CI: пайплайны и артефакты обновлено
Код-ревью: .gitlab-ci.yml
Вопрос
Найдите проблемы в пайплайне сервиса.
stages: [build, test, deploy]
variables:
DB_PASSWORD: "S3cret!"
build:
stage: build
image: node:latest
script:
- npm ci
- npm run build
cache:
paths: [dist/]
test:
stage: test
script:
- npm test || true
deploy:
stage: deploy
script:
- rsync -a dist/ deploy@prod:/srv/app/
Коротко
Пайплайн выглядит рабочим, но не защищает ни от чего: тесты не могут его остановить, деплой идёт с любой ветки, сборка непредсказуема, а пароль утёк в git. После удаления пароля из файла его всё равно нужно сменить: он остался в истории.
Что должен найти ревьюер
- Безопасностьстрока 3Пароль в репозитории: его видит каждый с доступом к коду и он останется в истории git. Хранить в CI/CD Variables (masked, protected) или во внешнем хранилище секретов.
- Ошибкастрока 6
node:latestплавает: завтра придёт новая мажорная версия Node, и сборка сломается или поведёт себя иначе. Фиксировать версию, напримерnode:22-alpine. - Ошибкастрока 10
dist/передаётся через cache: кеш не гарантирован, deploy может не получить файлы. Нужныartifacts. - Ошибкастрока 15
|| trueглотает падение тестов: пайплайн зелёный при красных тестах. - Ошибкастрока 16Деплой в прод запускается с любой ветки и без подтверждения. Нужны
rulesнаmain,environment: productionи, при необходимости,when: manual.
Разбор
Пайплайн выглядит рабочим, но не защищает ни от чего: тесты не могут его остановить, деплой идёт с любой ветки, сборка непредсказуема, а пароль утёк в git. После удаления пароля из файла его всё равно нужно сменить: он остался в истории.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.