我的 Azure DevOps 管道拉取 Docker 映像并创建 5 个容器。一个容器设置其他 4 个容器,然后退出,表明设置成功。但是,Azure Pipelines 由于“已退出”状态而将管道标记为失败,即使一切正常运行。
我唯一的修复方法是添加
continueOnError: true
,但这只会用警告标记管道。我也尝试过condition: succeededOrFailed()
,但它仍然将管道标记为失败。
以下是日志示例:
2024-07-01T14:47:08.8069778Z ##[error] Container airflow-postgres-1 Healthy
2024-07-01T14:47:08.8073598Z ##[error] Container airflow-postgres-1 Healthy
2024-07-01T14:47:08.8075304Z ##[error] Container airflow-redis-1 Healthy
2024-07-01T14:47:18.3181399Z ##[error] Container airflow-airflow-init-1 Exited Container airflow-airflow-init-1 Exited Container airflow-airflow-init-1 Exited
任何在
azure-pipelines.yml
中处理此问题的指导或提示将不胜感激,我希望管道能够继续处理管道,而不是标记为已退出,从而生成失败的作业。
这是 azure-pipelines.yml 的相关示例。
- task: SSH@0
inputs:
sshEndpoint: $(SSH_SERVICE_CONNECTION)
runOptions: 'inline'
inline: |
az login --identity
az acr login --name $(IMAGE_REGISTRY)
cd $(PROJECT_DIR)
export AIRFLOW_UID=$(AIRFLOW_UID)
export PROJECT_DIR=$(PROJECT_DIR)
docker pull $(IMAGE_REGISTRY).azurecr.io/$(IMAGE_NAME):latest
docker compose -f docker-compose.prod.yaml up -d
continueOnError: true
看起来由于某种原因,这些日志被写入了 stderr。根据 docs,SSH 任务的默认行为是在将某些内容写入 stderr 时使任务失败。要禁用此行为,请将
failOnStdErr
选项设置为 false
:
- task: SSH@0
inputs:
sshEndpoint: $(SSH_SERVICE_CONNECTION)
runOptions: 'inline'
failOnStdErr: false
inline: |
az login --identity
az acr login --name $(IMAGE_REGISTRY)
cd $(PROJECT_DIR)
export AIRFLOW_UID=$(AIRFLOW_UID)
export PROJECT_DIR=$(PROJECT_DIR)
docker pull $(IMAGE_REGISTRY).azurecr.io/$(IMAGE_NAME):latest
docker compose -f docker-compose.prod.yaml up -d