2017-06-02 164 views
1

我有一个描述jenkins从站的dockerfile。在这个奴隶我需要签出一些文件,以使我们的构建工作。要让这个文件夹始终保持最新状态,我打算在每次容器启动时执行一次svn更新。但是由于某种原因它不起作用。这里是我的Dockerfile:在Docker容器上运行svn更新脚本启动

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 

它完美地工作。我需要更改哪些内容以便在容器启动时执行脚本?

更新: 事实证明,脚本的“/ usr/sbin/sshd -D”阻止脚本继续。

我也改变了它使用的入口点,而不是CMD的:

ENTRYPOINT ["/bin/bash", "./home/svnUpdate.sh", "$svnUser", "$svnPassword"] 

现在我唯一的问题是,字符串“$ svnUser”传递给脚本,而不是解析值。

回答

0

似乎ARG值不能在运行时使用,因为它们是构建参数。我的解决方法是将它们保存在一个环境变量中Dockerfile:

... 
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