Трубопроводы Bitbucket: Почему конвейер, похоже, не использует мой пользовательский образ docker?

#docker #bitbucket #bitbucket-pipelines

Вопрос:

В моем файле yml конвейеров я указываю пользовательское изображение для использования из моего репозитория AWS ECR. При запуске конвейера в журналах «Настройка сборки» указывается, что образ был извлечен и использован без проблем:

   Images used:    
      build : 123456789.dkr.ecr.ca-central-1.amazonaws.com/my-image@sha256:346c49ea675d8a0469ae1ddb0b21155ce35538855e07a4541a0de0d286fe4e80
 

Я проработал некоторые локальные проблемы, связанные с правильной работой моего набора тестов Cypress E2E в контейнере. Устранив эти проблемы, я ожидал, что в процессе все будет работать одинаково. Однако, глядя на журналы конвейера, кажется, что он запускался с изображением, отличным от указанного мной (я подозреваю, что он использует изображение Atlassian по умолчанию). Вот источник моих подозрений:

 STDERR: /opt/atlassian/pipelines/agent/build/packages/server/node_modules/.cache/mongodb-memory-server/mongodb-binaries/4.0.14/mongod: /usr/lib/x86_64-linux-gnu/libcurl.so.4: version `CURL_OPENSSL_3' not found (required by /opt/atlassian/pipelines/agent/build/packages/server/node_modules/.cache/mongodb-memory-server/mongodb-binaries/4.0.14/mongod)
 

Я знаю, что рабочий каталог образа Atlassian по умолчанию — «/opt/atlassian/конвейеры/агент/сборка/». Есть ли причина, по которой будет использоваться это изображение, а не то, которое я указал? Вот моя конфигурация трубопроводов:

 image:
name: 123456789.dkr.ecr.ca-central-1.amazonaws.com/my-image:1.4
aws:
access-key: $AWS_ACCESS_KEY_ID
secret-key: $AWS_SECRET_ACCESS_KEY

cypress-e2e: amp;cypress-e2e
name: "Cypress E2E tests"
caches:
- cypress
- nodecustom
- yarn
script:
- yarn pull-dev-secrets
- yarn install
- $(npm bin)/cypress verify || $(npm bin)/cypress install amp;amp; $(npm bin)/cypress verify
- yarn build:e2e
- MONGOMS_DEBUG=1 yarn start:e2e amp;amp; yarn workspace e2e e2e:run
artifacts:
- packages/e2e/cypress/screenshots/**
- packages/e2e/cypress/videos/**

pipelines:

custom:
cypress-e2e:
- step:
<<: *cypress-e2e
 

Ответ №1:

Для всех, кто случайно наткнется на это, я подозреваю, что репозиторий смонтирован в контейнере конвейера по адресу «/opt/atlassian/конвейеры/агент/сборка», а не в рабочем каталоге, указанном на изображении. Я запустил «pwd», который дал «/opt/atlassian/конвейеры/агент/сборка», хотя я также запустил «cat /etc/os-релиз», который привел меня к выводу, что на самом деле он запускал указанный мной образ. Я до сих пор не совсем понимаю, почему, даже тестируя все локально в одном и том же контейнере, я получал эту ошибку.

Для потомков: я использовал базу данных mongo в памяти из этого проекта «https://github.com/nodkz/mongodb-memory-server». Обычно это работает путем автоматической загрузки исполняемого файла mongod в ваши node_modules и использования его для запуска экземпляра mongo. Я столкнулся с аналогичной локальной ошибкой, которую я исправил, обновив свой базовый образ с Debian 9 до образа на основе Debian 10. Опять же, все еще не уверен, почему он не работал так же в конвейере, я полагаю, что могут быть некоторые особенности в том, как контейнеры запускаются в трубопроводах, о которых я не знаю. В конечном счете, моим решением было установить mongod в сам образ и заставить mongodb-сервер памяти использовать этот исполняемый файл, а не тот, что в node_modules.