在Docker容器上运行svn更新脚本启动
问题描述:
我有一个描述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”传递给脚本,而不是解析值。
答
似乎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