[英]Jenkins store workspace outside docker container
所以我有一個Jenkins Master-Slave設置,主設備旋轉一個docker容器(在從VM上)並在該容器內構建作業然后它在完成后銷毀容器。 這一切都是通過Jenkins的Docker 插件完成的 。
一切都運行順利,但唯一的問題是,在作業完成后(作業失敗)我無法查看工作區(因為容器已經消失)。 我收到以下錯誤:
我已經嘗試將主機(從屬VM)中的“卷”附加到容器以將文件存儲在外部(這可以工作,因為如下所示,我可以看到主機上的文件),然后嘗試將其映射到主服務器VM:
這是我對特定泊塢窗圖像模板的設置:
任何幫助是極大的贊賞!
編輯:我已成功地將工作空間存儲在主機上。但是,當構建完成后,我仍然得到相同的錯誤(錯誤:沒有工作區)。 我不知道如何讓Jenkins查找主機上的文件而不是容器。
我遇到了同樣的問題,上面的帖子幫我弄清楚我的環境配置有什么問題。 但是我花了一段時間來理解這句話的邏輯:
好吧,所以我解決這個問題的方法是從奴隸碼頭集裝箱上裝載一個dir,然后使用NFS(說明如下所示)我已將該奴隸碼頭集裝箱安裝到Jenkins主機上。
所以我決定澄清一下並寫一些更多的解釋例子......
這是我的工作環境:
問題陳述:在Docker容器上運行項目時,“工作區”在Jenkins界面下不可用。
目標:能夠瀏覽Jenkins界面下的“Workspace”以及Jenkins主/從和Docker主機服務器。
好吧,我的問題始於不同的問題,這導致我找到這篇文章並找出我的環境配置有什么問題...
讓我們假設您已經使用正確配置的Jenkins Docker插件工作Jenkins / Docker環境。 對於第一次運行,我沒有在Jenkins Docker插件中的“容器設置...”選項下配置任何內容。 一切順利 - 工作競爭成功,顯然我無法瀏覽工作空間,因為Jenkins Docker插件設計在完成工作后銷毀了docker容器。 到目前為止一切都很好......我需要保存docker的工作空間,以便能夠在作業失敗時查看文件或修復一些問題。 為此,我使用Jenkins Docker插件中“容器設置...”選項中的“Volumes”將主機/路徑從主機映射到容器的容器/路徑:
我再次運行相同的工作,但在Jenkins中出現以下錯誤信息失敗:
花了一些時間來了解Jenkins Docker插件是如何工作的,我發現上面出錯的原因是Docker Host Server(192.168.1.114)上自動創建的“workspace”文件夾上的錯誤權限:
因此,從這里我們必須為此文件夾分配“其他”組寫入權限。 將jenknis@192.168.1.114用戶設置為工作區文件夾的所有者是不夠的,因為我們需要jenkins@192.168.1.111用戶能夠在192.168.1.114服務器的工作區文件夾下創建子文件夾。 (就我而言,我在Jenkins主服務器上有jenkins用戶 - 192.168.1.111和jenkins用戶以及Docker主機服務器 - 192.168.1.114)。 為了幫助解釋所有分組和字母的含義,請查看上面屏幕截圖中此模式的特寫:
ssh jenkins@192.168.1.114
cd /home/jenkins
sudo chmod o+w workspace
現在一切正常了:Jenkins旋轉了docker容器,當docker運行時,Jenkins界面中的Workspace可用:
但是當工作結束時它就消失了......
有人可以說這里沒問題,因為容器中的所有文件現在保存在docker主機服務器上的工作區目錄下(我們在Jenkins Docker插件設置下映射了文件夾)......這是對的! 所有文件都在這里: /home/jenkins/workspace/"JobName"/
在Docker主機服務器上(192.168.1.114)但在某些情況下,人們希望能夠直接從Jenkins界面瀏覽作業工作空間...
所以,從這里開始我就按照Fadi的帖子鏈接 - 如何設置NFS共享。
提醒一下,目標是:能夠直接從Jenkins界面瀏覽docker jobs workspace ...我在docker主機服務器上做了什么(192.168.1.114):
1. sudo apt-get install nfs-kernel-server nfs-common
2. sudo nano /etc/exports
# Share docker slave containers workspace with Jenkins master
/home/jenkins/workspace 192.168.1.111(rw,sync,no_subtree_check,no_root_squash)
3. sudo exportfs -ra
4. sudo /etc/init.d/nfs-kernel-server restart
這將允許在Jenkins主服務器(192.168.1.111)上安裝Docker主機服務器(192.168.1.114)/ home / jenkins / workspace文件夾
在Jenkins主服務器上:
1. sudo apt-get install nfs-client nfs-common
2. sudo mount -o soft,intr,rsize=8192,wsize=8192 192.168.1.114:/home/jenkins/workspace/ /home/jenkins/workspace/<JobName/
現在,在Jenkins master上的/ home / jenkins / workspace /“JobName”/文件夾下安裝並顯示192.168.1.114:/home/jenkins/workspace文件夾。
到目前為止一切都很好......我再次運行工作並面臨同樣的行為:當docker仍在運行時 - 用戶可以從Jenkins界面瀏覽工作區,但是當作業完成時,我得到相同的錯誤“...沒有工作區” 。 盡管我現在可以瀏覽Jenkins主服務器本身的作業文件,但它仍然不是所期望的......
順便說一句,如果您需要在Jenkins主服務器上卸載工作區目錄,請使用以下命令:
sudo umount -f -l /home/jenkins/workspace/<<mountpoint>>
閱讀有關NFS的更多信息
如何在Ubuntu 14.10上配置NFS服務器並掛載NFS共享
此問題的解決方法是在Jenkins上安裝Multijob插件 ,並向將使用Multijob插件選項的Jenkins添加新作業:
在我的情況下,我還將所有與docker相關的作業轉移到Slave Build Server(192.168.1.112)上運行。 所以在這台服務器上,我安裝了NFS相關人員,就像在Jenkins Master Server上一樣,並在Docker主機服務器上添加一些人員(192.168.1.114):
ssh jenkins@192.168.1.114
sudo nano edit /etc/exports
# Share docker slave containers workspace with build-server
/home/jenkins/workspace 192.168.1.112(rw,sync,no_subtree_check,no_root_squash)
另外在Jenkins Slave(192.168.1.112)服務器上我運行了以下內容:
1. sudo apt-get install nfs-client nfs-common
2. sudo mount -o soft,intr,rsize=8192,wsize=8192 192.168.1.114:/home/jenkins/workspace/ /home/jenkins/workspace/<JobName/
完成上述配置后,我在Jenkins上運行了新的Job,最終得到了我想要的東西:我可以直接從Jenkins界面使用Workspace選項。
很抱歉很長的帖子...我希望它對你有所幫助。
好吧,所以我解決這個問題的方法是從slave docker容器上安裝一個dir,然后使用NFS(說明如下所示)我已經將那個slave docker容器安裝到了jenkins master上。
所以我的配置看起來像這樣:
我按照這個答案將dir掛載為NFS:
一個小小的注意事項是,在該答案中提供的IP地址(您必須放入/ etc / exports )是本地計算機(或者在我的情況下是jenkins master)的ip地址。
我希望這個答案可以幫到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.