在docker container start上运行svn update脚本

时间:2017-06-02 12:36:30

标签: svn docker jenkins dockerfile

我有一个描述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;被传递给脚本而不是已解析的值。

1 个答案:

答案 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