2017-06-02 163 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