Код-ревью 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. После удаления пароля из файла его всё равно нужно сменить: он остался в истории.

Что должен найти ревьюер

  1. Безопасностьстрока 3
    Пароль в репозитории: его видит каждый с доступом к коду и он останется в истории git. Хранить в CI/CD Variables (masked, protected) или во внешнем хранилище секретов.
  2. Ошибкастрока 6
    node:latest плавает: завтра придёт новая мажорная версия Node, и сборка сломается или поведёт себя иначе. Фиксировать версию, например node:22-alpine.
  3. Ошибкастрока 10
    dist/ передаётся через cache: кеш не гарантирован, deploy может не получить файлы. Нужны artifacts.
  4. Ошибкастрока 15
    || true глотает падение тестов: пайплайн зелёный при красных тестах.
  5. Ошибкастрока 16
    Деплой в прод запускается с любой ветки и без подтверждения. Нужны rules на main, environment: production и, при необходимости, when: manual.

Разбор

Пайплайн выглядит рабочим, но не защищает ни от чего: тесты не могут его остановить, деплой идёт с любой ветки, сборка непредсказуема, а пароль утёк в git. После удаления пароля из файла его всё равно нужно сменить: он остался в истории.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.