簡體   English   中英

Jenkins在docker容器外存儲工作區

[英]Jenkins store workspace outside docker container

所以我有一個Jenkins Master-Slave設置,主設備旋轉一個docker容器(在從VM上)並在該容器內構建作業然后它在完成后銷毀容器。 這一切都是通過Jenkins的Docker 插件完成的

一切都運行順利,但唯一的問題是,在作業完成后(作業失敗)我無法查看工作區(因為容器已經消失)。 我收到以下錯誤:

沒有工作區錯誤

我已經嘗試將主機(從屬VM)中的“卷”附加到容器以將文件存儲在外部(這可以工作,因為如下所示,我可以看到主機上的文件),然后嘗試將其映射到主服務器VM:

主機文件

這是我對特定泊塢窗圖像模板的設置:

Docker模板

任何幫助是極大的贊賞!

編輯:我已成功地將工作空間存儲在主機上。但是,當構建完成后,我仍然得到相同的錯誤(錯誤:沒有工作區)。 我不知道如何讓Jenkins查找主機上的文件而不是容器。

我遇到了同樣的問題,上面的帖子幫我弄清楚我的環境配置有什么問題。 但是我花了一段時間來理解這句話的邏輯:

好吧,所以我解決這個問題的方法是從奴隸碼頭集裝箱上裝載一個dir,然后使用NFS(說明如下所示)我已將該奴隸碼頭集裝箱安裝到Jenkins主機上。

所以我決定澄清一下並寫一些更多的解釋例子......

這是我的工作環境:

  1. Jenkins master在Ubuntu 16.04服務器上運行,IP:192.168.1.111
  2. Jenkins Slave Build Server在Ubuntu 16.04服務器上運行,IP:192.168.1.112
  3. Docker啟用構建服務器(用於啟動停靠器容器),在Ubuntu 16.04服務器上運行,IP:192.168.1.114。

問題陳述:在Docker容器上運行項目時,“工作區”在Jenkins界面下不可用。

目標:能夠瀏覽Jenkins界面下的“Workspace”以及Jenkins主/從和Docker主機服務器。

好吧,我的問題始於不同的問題,這導致我找到這篇文章並找出我的環境配置有什么問題...

讓我們假設您已經使用正確配置的Jenkins Docker插件工作Jenkins / Docker環境。 對於第一次運行,我沒有在Jenkins Docker插件中的“容器設置...”選項下配置任何內容。 一切順利 - 工作競爭成功,顯然我無法瀏覽工作空間,因為Jenkins Docker插件設計在完成工作后銷毀了docker容器。 到目前為止一切都很好......我需要保存docker的工作空間,以便能夠在作業失敗時查看文件或修復一些問題。 為此,我使用Jenkins Docker插件中“容器設置...”選項中的“Volumes”將主機/路徑從主機映射到容器的容器/路徑:

在“容器設置...”中配置“卷”

我再次運行相同的工作,但在Jenkins中出現以下錯誤信息失敗:

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)。 為了幫助解釋所有分組和字母的含義,請查看上面屏幕截圖中此模式的特寫:

Linux權限

ssh jenkins@192.168.1.114
cd /home/jenkins
sudo chmod o+w workspace

現在一切正常了:Jenkins旋轉了docker容器,當docker運行時,Jenkins界面中的Workspace可用:

當docker仍在運行時,Jenkins接口上可用的工作區

但是當工作結束時它就消失了......

錯誤:沒有工作區

有人可以說這里沒問題,因為容器中的所有文件現在保存在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添加新作業:

新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選項。

完成作業后,人們可以直接從Jenkins界面瀏覽docker容器Workspace

很抱歉很長的帖子...我希望它對你有所幫助。

好吧,所以我解決這個問題的方法是從slave docker容器上安裝一個dir,然后使用NFS(說明如下所示)我已經將那個slave docker容器安裝到了jenkins master上。

所以我的配置看起來像這樣:

在此輸入圖像描述

我按照這個答案將dir掛載為NFS:

https://superuser.com/questions/300662/how-to-mount-a-folder-from-a-linux-machine-on-another-linux-machine/300703#300703

一個小小的注意事項是,在該答案中提供的IP地址(您必須放入/ etc / exports )是本地計算機(或者在我的情況下是jenkins master)的ip地址。

我希望這個答案可以幫到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM