Я новичок в Azure и сейчас играю с конвейерами. Моя цель — запустить альпийский докер-контейнер Postgres в фоновом режиме, чтобы я мог выполнять тесты через свой бэкэнд Python.
Это моя конфигурация конвейера
trigger:
- main
pool:
vmImage: ubuntu-latest
variables:
POSTGRE_CONNECTION_STRING: postgresql+psycopg2://postgres:passw0rd@localhost/postgres
resources:
containers:
- container: postgres
image: postgres:13.6-alpine
trigger: true
env:
POSTGRES_PASSWORD: passw0rd
ports:
- 1433:1433
options: --name postgres
stages:
- stage: QA
jobs:
- job: test
services:
postgres: postgres
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: $(PYTHON_VERSION)
- task: Cache@2
inputs:
key: '"$(PYTHON_VERSION)" | "$(Agent.OS)" | requirements.txt'
path: $(PYTHON_VENV)
cacheHitVar: 'PYTHON_CACHE_RESTORED'
- task: CmdLine@2
displayName: Wait for db to start
inputs:
script: |
sleep 5
- script: |
python -m venv .venv
displayName: create virtual environment
condition: eq(variables.PYTHON_CACHE_RESTORED, 'false')
- script: |
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
displayName: pip install
condition: eq(variables.PYTHON_CACHE_RESTORED, 'false')
- script: |
source .venv/bin/activate
python -m pytest --junitxml=test-results.xml --cov=app --cov-report=xml tests
displayName: run pytest
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: 'test-results.xml'
testRunTitle: 'Publish FastAPI test results'
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: 'Cobertura'
summaryFileLocation: 'coverage.xml'
Но конвейер всегда дает сбой на шаге «Инициализировать контейнеры», выдавая эту ошибку:
Error response from daemon: Container <containerID> is not running
как будто просто отключился, потому что делать нечего. Это кажется правильным, но я не знаю, как поддерживать его работу, пока мои тесты не будут выполнены, серверная часть просто запускает pytest для базы данных. Я также попытался добавить этот ресурс в качестве контейнера, используя свойство container
, но затем конвейер падает на том же этапе, говоря, что контейнер работает менее секунды.
Я благодарен за любые идеи!
Я подозреваю, что ваш контейнер не останавливается из-за того, что «нечего делать», образ postgres настроен таким образом, чтобы действовать как служба. Ваш контейнер, вероятно, останавливается из-за ошибки.
Я уверен, что есть что улучшить: вам нужно добавить PGPORT
env var в свой контейнер и установить 1433
, потому что этот порт не является портом по умолчанию для образа докера postgres, поэтому откройте этот порт в своем контейнере, как вы делаете with ports
в этом случае не слишком много делает.
Кроме того, ваше свойство trigger: true
будет означать, что вы ожидаете обновлений в официальном репозитории DockerHub для postgres, и в случае выпуска нового образа запустите свой конвейер. Я думаю, что это не имеет особого смысла, вы должны удалить его на всякий случай, хотя это маргинальная проблема с точки зрения вашего вопроса.
Не волнуйтесь. Мне просто повезло, вот и все :D
Вы правы насчет порта, это был тот, который я использовал ранее для базы данных mssql. Это фактически исправило это, и я ненавижу себя за то, что не понял этого раньше.