我有一个描述jenkins奴隶的dockerfile。在这个奴隶我需要签出一些文件,以使我们的构建工作。为了让这个文件夹始终保持最新,我打算每次容器启动时都进行svn更新。但它出于某种原因并不起作用。这是我的Dockerfile:
FROM ubuntu:16.04
...
# Arguments which can be passed via --build-arg <varname>=<value>
ARG svnPassword
ARG svnUser
...
#Install Subversion
RUN apt-get install -y subversion
# Checkout config from SVN
RUN mkdir -p /home/jenkins/workspace/config && cd /home/jenkins/workspace && svn checkout --username $svnUser --password $svnPassword http://myRepo/config
...
# Add svnUpdate.sh script
ADD svnUpdate.sh /home/svnUpdate.sh
CMD /home/svnUpdate.sh $svnUser $svnPassword
我的svnUpdate.sh看起来像这样:
#!/bin/sh
/usr/sbin/sshd -D
cd /home/jenkins/workspace/config && svn update --username $1 --password $2
我不明白的是:当我登录正在运行的容器并执行
时./home/svnUpdate.sh user password
它完美无缺。我需要更改什么才能在容器启动时执行脚本?
更新: 事实证明&#34; / usr / sbin / sshd -D&#34;脚本阻止脚本继续。
我还将其更改为使用ENTRYPOINT而不是CMD:
ENTRYPOINT ["/bin/bash", "./home/svnUpdate.sh", "$svnUser", "$svnPassword"]
现在我唯一的问题是String&#34; $ svnUser&#34;被传递给脚本而不是已解析的值。
答案 0 :(得分:0)
似乎ARG值不能在运行时使用,因为它们是构建参数。我的解决方法是将它们保存在Dockerfile中的Environment变量中:
...
ENV SVN_USER $svnUser
ENV SVN_PW $svnPassword
...
并在脚本中使用它:
#!/bin/sh
cd /home/jenkins/workspace/config && svn update --username $SVN_USER --password $SVN_PW
unset SVN_USER
unset SVN_PW
/usr/sbin/sshd -D