我喜欢每个管道只运行一次自托管的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”吗?
答案 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服务器。