在容器中創建目錄 /var/svn/repos(mkdir -p /var/svn/repos),并基于該目錄創建 Subversion 資源庫(svnadmin create /var/svn/repos)。
在資源庫目錄下的 svnserve.conf 文件中刪除“password-db = passwd”前面的注釋符 #,并在 passwd 文件中添加一行“shenrui = password”。
用命令“docker commit mysvn”把上面所做的修改保存下來創建一個新鏡像 mysvn。
最后,用命令“docker run -t -d -p 3690:3690 --name mysvn mysvn svnserve -d --foreground -r /var/svn/repos”啟動 mysvn 容器。啟動時,添加容器到主機的端口映射“-p 3690:3690”以便之后直接通過主機 IP 提交測試腳本。
至此,Docker 上有兩個正在運行的容器(docker ps),名字分別是 myjenkins 和 mysvn。
準備 Sahi 測試腳本
為實例編寫的 Sahi 測試腳本是針對developerWorks 中國網站做的一些簡單測試。目錄結構如下圖。Downloads.sah 和 topics.sah 分別點擊首頁上的“軟件下載”和“技術主題”鏈接,然后驗證跳轉后的頁面的標題。Search.sah 在首頁的搜索框中輸入 docker 并對搜索結果頁面進行簡單驗證。Mytest.suite 是一個測試套件文件,用來包含其他三個測試腳本。
圖 7. Sahi 測試腳本目錄
run_tests.sh 的文件內容如下。它首先調用 init.sh 啟動 Xvfb 和 Sahi,然后觸發測試腳本的運行。命令中指定了 JUnit 報表的輸出路徑和 Sahi 自身的 HTML 報表的輸出路徑。
圖 8. run_tests.sh 文件內容
將測試腳本提交到 Docker 的 Subversion 容器(svn://172.17.42.1/mytest)。
配置 Jenkins
首先,安裝兩個 Jenkins 插件:
Docker Plugin
該插件能夠集成 Jenkins 與 Docker。其功能前文已有描述。
HTML Publisher Plugin
該插件用以發布構建生成 HTML 報表,方便日后查看。
接下來,要開啟 Docker 的 TCP 監聽端口。開啟的方法在不同的系統上有所不同。本實例 Docker 主機為 RHEL 6.5。開啟的方法是在/etc/sysconfig/docker 中設置 other_args="-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock",然后運行“service docker restart”重啟 Docker 服務。CoreOS 上的開啟方法請參見Customizing docker。
進入 Jenkins 的系統配置頁面(Manager Jenkins>Configure System),在最底部比之前增加了一個 Cloud 的部分。點擊 Add a new cloud,選擇 Docker 添加一個 Docker 主機。這里,因為 Jenkins 運行在 Docker 的容器里,直接用私有 IP(ifconfig 里 docker0 對應的 IP)加端口 4243 填寫 Docker URL 輸入域。
圖 9. Docker Cloud 配置
Figure xxx. Requires a heading
接下來,添加 Docker 鏡像。
圖 10. Docker 鏡像配置
建議將 Jenkins Slave 的 workspace 目錄映射到 Docker 主機的一個文件夾,這樣 workspace 的內容才能持久保存,并且從 Subversion 或者其他版本控制軟件更新代碼的時候才會以增量方式更新。在該實例中,配置如下。
圖 11. Docker 鏡像 Volumes 配置
同之前在啟動 Jenkins 容器部分講到的一樣,必須修改主機上的目錄的權限,以確保容器能夠對其讀寫。
現在,可以創建 Jenkins Job 了。
圖 12. Job 配置 – Docker 容器部分
此時,Job 配置的頁面里比之前增加了一個 Docker Container 的部分。在 Label Expression 里輸入“docker”與之前定義的 shenrui/sahi 鏡像綁定 (該輸入域的值與鏡像配置里的 Labels 輸入域值相同)。
Source Code Management 部分,選擇 Subversion,并填入之前在 Subversion 容器上創建的資源庫 URL。
圖 13. Job 配置 – 源代碼管理部分
原文轉自:http://www.uml.org.cn/Test/201507314.asp