将 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 存储库更新,如果有新的图像发布,运行 您的管道。我认为这没有太大意义,你应该删除它,以防万一,虽然从你的问题的角度来看这是边缘问题。