azure自托管代理linux不与“一起运行”--“一次”;参数

azure自托管代理linux不与“一起运行”--“一次”;参数,azure,docker,azure-devops,azure-pipelines,azure-devops-self-hosted-agent,Azure,Docker,Azure Devops,Azure Pipelines,Azure Devops Self Hosted Agent,我喜欢每个管道只运行一次自托管Linux容器 这意味着当管道完成时,我希望容器停止 我看到有一个名为“-once”的参数 请点击底部的链接: 但当我像这样启动docker时,在运行后使用一次: docker run --once --rm -it -e AZP_WORK=/home/working_dir -v /home/working_dir:/azp -e AZP_URL=https://dev.azure.com/xxxx -e AZP_TOKEN=nhxxxxxu76mlua -e

我喜欢每个管道只运行一次自托管Linux容器 这意味着当管道完成时,我希望容器停止
我看到有一个名为“-once”的参数
请点击底部的链接:

但当我像这样启动docker时,在运行后使用一次:

docker run --once --rm -it -e AZP_WORK=/home/working_dir -v /home/working_dir:/azp -e AZP_URL=https://dev.azure.com/xxxx -e AZP_TOKEN=nhxxxxxu76mlua -e AZP_AGENT_NAME=ios_dockeragent xxx.xxx.com:2000/azure_self_hosted_agent/agent:latest 
我得到:

unknown flag: --once
See 'docker run --help'.
如果我把它放在docker文件里 作为

尝试运行docker时出现错误:

docker:daemon的错误响应:OCI运行时创建失败:container\u linux.go:349:启动容器进程导致“exec:\”/start.sh--once\”:stat./start.sh--once:没有这样的文件或目录:unknow
n


在Docked agent中,我需要在哪里设置“-once”命令?

用于代理的
运行,而不是
docker运行。从:

对于配置为以交互方式运行的代理,您可以选择 代理只接受一份工作。要在此配置中运行,请执行以下操作:

/run.sh--一次

此模式下的代理只接受一个作业,然后降速 优雅(适用于运行Azure之类的服务 容器实例)

因此,在配置docker映像时,需要将其添加到bash脚本中:

FROM ubuntu:18.04

# To make it easier for build and release pipelines to run apt-get,
# configure apt to not require confirmation (assume the -y argument by default)
ENV DEBIAN_FRONTEND=noninteractive
RUN echo "APT::Get::Assume-Yes \"true\";" > /etc/apt/apt.conf.d/90assumeyes

RUN apt-get update \
&& apt-get install -y --no-install-recommends \
        ca-certificates \
        curl \
        jq \
        git \
        iputils-ping \
        libcurl4 \
        libicu60 \
        libunwind8 \
        netcat

WORKDIR /azp

COPY ./start.sh .
RUN chmod +x start.sh --once

据我所知,没有办法从外面传进来;您必须进入容器并编辑
start.sh
文件,将
--once
参数添加到相应的行中

  exec ./externals/node/bin/node ./bin/AgentService.js interactive --once & wait $!
  cleanup

旁注:根据您的要求,您还可以借此机会从
start.sh

n docker agent中删除未记录的web服务器,我没有运行.sh,docker从start.sh开始,这将传递
--once
chmod
命令,这不是我们想要的。@ShaykiAbramczyk你试过了吗?您将参数传递给chmod命令…@user63898否,但我认为第二个答案是正确的,它不应该出现在dockerfile中,而是出现在
start.sh
Thank中,但我不明白这不是文档中写的为什么我需要删除web服务器?还有为什么我需要添加&wait$!?网络服务器-这取决于您。如果你需要它,保留它;如果不需要,请将其删除。它完全没有文档记录,似乎没有任何有用的用途。当然,没有它,代理可以正常工作。
&wait$
是这样的,
清理
功能可以在代理退出后运行。如果我没记错的话,这将从池中注销代理。如果
exec
也被删除,它可能会被省略。为什么它没有被记录?我猜Web服务器是一个虚拟的健康检查端点;始终返回3xx重定向响应,不考虑代理运行状况。它还可以为一些“必须有一个web界面”的要求复选框;它重定向到Azure上的管理界面,而不是仅仅给出“200OK”。
  exec ./externals/node/bin/node ./bin/AgentService.js interactive --once & wait $!
  cleanup