将 postgres docker 容器保留在 azure 管道作业 运行 中
Keep postgres docker container in azure pipeline job running
我是 Azure 的新手,目前正在研究这些管道。我的目标是在后台 运行 一个 postgres alpine docker 容器,这样我就可以通过我的 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
好像只是因为无事可做而关机。这似乎是正确的,但我不知道如何保持它 运行ning 直到我的测试完成,后端只是针对数据库的 运行s pytest。我还尝试使用 container
属性 添加该资源作为容器,但随后管道在同一步骤崩溃,说容器只 运行 不到一秒。
感谢任何想法!
我怀疑您的容器没有停止是因为“无事可做”,postgres 映像配置为充当服务。您的容器可能因错误而停止。
我确定有一些地方需要改进:您必须将 PGPORT
env var 添加到您的容器并设置为 1433
因为该端口不是 postgres docker 图像,因此在这种情况下,像使用 ports
一样在容器上打开该端口并没有做太多事情。
此外,您的 trigger: true
属性 将意味着您期待 postgres 的官方 DockerHub 存储库更新,如果有新的图像发布,运行 您的管道。我认为这没有太大意义,你应该删除它,以防万一,虽然从你的问题的角度来看这是边缘问题。
我是 Azure 的新手,目前正在研究这些管道。我的目标是在后台 运行 一个 postgres alpine docker 容器,这样我就可以通过我的 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
好像只是因为无事可做而关机。这似乎是正确的,但我不知道如何保持它 运行ning 直到我的测试完成,后端只是针对数据库的 运行s pytest。我还尝试使用 container
属性 添加该资源作为容器,但随后管道在同一步骤崩溃,说容器只 运行 不到一秒。
感谢任何想法!
我怀疑您的容器没有停止是因为“无事可做”,postgres 映像配置为充当服务。您的容器可能因错误而停止。
我确定有一些地方需要改进:您必须将 PGPORT
env var 添加到您的容器并设置为 1433
因为该端口不是 postgres docker 图像,因此在这种情况下,像使用 ports
一样在容器上打开该端口并没有做太多事情。
此外,您的 trigger: true
属性 将意味着您期待 postgres 的官方 DockerHub 存储库更新,如果有新的图像发布,运行 您的管道。我认为这没有太大意义,你应该删除它,以防万一,虽然从你的问题的角度来看这是边缘问题。