azure自托管代理linux不能使用“ --once”参数运行

时间:2020-09-15 09:43:59

标签: azure docker azure-devops azure-pipelines azure-devops-self-hosted-agent

我喜欢每个管道只运行一次自托管的Linux容器 这意味着当管道完成时,我希望容器停止
我看到有一个名为“ --once”的参数
请将此链接放在底部:
https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/docker?view=azure-devops

但是当我像这样运行一次之后启动docker时:

select d.department, d.account, ap.month, coalesce(a.amount, 0) amount
from accounting_period ap 
cross join (select distinct department, account from amounts where department in ('a','b')) d
left join amounts a
on ap.month = a.month and d.department = a.department and d.account = a.account
order by d.department, d.account, ap.month

我得到了:

> DEPARTMENT | ACCOUNT | MONTH | AMOUNT
> :--------- | :------ | ----: | -----:
> a          | x       |     1 |    100
> a          | x       |     2 |    100
> a          | x       |     3 |    100
> a          | x       |     4 |    100
> a          | x       |     5 |    100
> a          | x       |     6 |    100
> a          | x       |     7 |    100
> a          | x       |     8 |    100
> a          | x       |     9 |    100
> a          | x       |    10 |    100
> a          | x       |    11 |    100
> a          | x       |    12 |    100
> b          | x       |     1 |      0
> b          | x       |     2 |    300
> b          | x       |     3 |      0
> b          | x       |     4 |      0
> b          | x       |     5 |      0
> b          | x       |     6 |      0
> b          | x       |     7 |      0
> b          | x       |     8 |      0
> b          | x       |     9 |      0
> b          | x       |    10 |      0
> b          | x       |    11 |      0
> b          | x       |    12 |      0

如果我把它放在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 

尝试运行docker时出现错误:

unknown flag: --once See 'docker run --help'. n

我需要在dockerized代理中将此命令设置为“ --once”吗?

2 个答案:

答案 0 :(得分:1)

用于代理的run,而不是docker run。来自docs

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

./run.sh --once

处于此模式的代理商仅接受一项工作,然后调低速度 优雅地(对于在类似Azure的服务上在Docker中运行很有用 容器实例)。

因此,您需要将其添加到配置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

答案 1 :(得分:0)

据我所知,没有办法将它从外面传递出去;您必须进入容器并编辑start.sh文件,将--once参数添加到适当的行。

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

旁注:根据您的要求,您还可以借此机会从start.sh中删除未记录的Web服务器。