2015-09-17 57 views
2

所以我有一個詹金斯主從設置,在這裏主人旋轉了一個碼頭集裝箱(在從屬VM上)並在該集裝箱內建立作業,然後在完成後破壞集裝箱。這一切都是通過Jenkins的Docker plugin完成的。詹金斯在碼頭集裝箱外的店鋪工作區

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

No Workspace Error

我試圖連接從主機(從VM)出現「量」來存儲文件外還(其中可行的,因爲,如下圖所示的容器,我可以看到主機上的文件),它然後試圖映射到主機VM:

Host files

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

Docker template

任何幫助,非常感謝!

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

回答

1

好的,我解決這個問題的方法是從奴隸碼頭集裝箱裝載一個目錄到容器,然後使用NFS(說明如下所示)我已經將該從站碼頭集裝箱安裝到jenkins master 。

所以我的配置是這樣的:

enter image description here

我跟着這個答案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地址。

我希望這個答案能幫助你!

+0

注意:在遠程FS根目錄中寫入的地方,沒有工作空間。在我的情況下,我剛創建了另一個名爲workspace的文件夾。 – Fadi

2

我面臨同樣的問題,上面的帖子幫助我弄清楚我的環境配置中出現了什麼問題。但是,過了好一會兒,我理解這句話的邏輯:

Ok, so the way I've solved this problem was to mount a dir on the container from the slave docker container, then using NFS (Instructions are shown below) I've mounted the that slave docker container onto Jenkins master.

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

這是我的工作環境:

  1. 在Ubuntu 16.04服務器上運行的Jenkins master,IP:192.168.1.111
  2. 在Ubuntu 16.04服務器上運行的Jenkins Slave Build Server,IP:192.168.1。112
  3. 啓用Docker的Build Server(用於啓動Docker容器),在Ubuntu 16.04服務器上運行,IP:192.168.1.114。

問題聲明:在Docker容器上運行項目時,「Workspace」在Jenkins界面下不可用。

目標:能夠瀏覽Jenkins界面以及Jenkins主/從和碼頭服務器主機上的「工作區」。

好了,我的問題開始與不同的問題,這使我找到這篇文章,弄清楚什麼是錯在我的環境配置...

讓我們假設你已經正確配置詹金斯工作詹金斯/泊塢環境Docker插件。對於第一次運行,我沒有在Jenkins Docker插件的「容器設置...」選項下進行配置。一切順利 - 工作競爭成功,顯然我無法瀏覽作業工作空間,因爲Jenkins Docker Plugin設計在完成工作後破壞了碼頭集裝箱。到目前爲止這麼好......我需要保存碼頭工作空間以便能夠在作業失敗時查看文件或修復一些問題。對於使用「卷」從主持人在做容器的容器/路徑所以我已經映射的主機/路徑「容器設置...」,在詹金斯泊塢窗插件選項:

Configure "Volumes" in "Container settings..."

我已經運行相同作業再次和它詹金斯與以下錯誤消息失敗:

Jenkins error message

花費一些時間來學習詹金斯泊塢窗插件如何工作之後,我想通了,上述錯誤的原因是碼頭工人在主機服務器上錯誤的權限( 192.168.1.114)在自動創建的「workspace」文件夾中LY:

Wrong Permission on workspace folder

所以,從這裏我們必須分配「其他」組寫權限到該文件夾​​。將[email protected]用戶設置爲workspace文件夾的所有者是不夠的,因爲我們需要[email protected]用戶能夠在192.168.1.114服務器的workspace文件夾下創建子文件夾。 (在我的情況下,我有Jenkins主服務器上的jenkins用戶 - 192.168.1.111和jenkins用戶以及Docker主機服務器 - 192.168.1.114)。 爲了幫助解釋所有的分組和字母的意思是,看看這個特寫鏡頭的方式在上面的截圖:

Linux Permissions

ssh [email protected] 
cd /home/jenkins 
sudo chmod o+w workspace 

現在一切重新正常工作:詹金斯旋轉起來泊塢窗容器,當搬運工運行,工作區在詹金斯接口:

Workspace available on Jenkins Interface, when docker still running

但它的作業完成後消失...

Error: no Workspace

有些可以說,這是沒有問題的這裏,從集裝箱,現在保存在泊塢窗主機服務器上的工作空間目錄下的所有文件(我們下詹金斯泊塢窗插件的設置映射的文件夾)...這是對的!所有文件都在這裏: /home/jenkins/workspace/"JobName"/ Docker主機服務器(192.168.1。114) 但是在某些情況下,人們希望能夠直接從Jenkins界面瀏覽作業工作空間...

因此,從這裏我已經按照Fadi的後續鏈接 - 如何設置NFS共享。

提醒,我們的目標是:能夠瀏覽搬運工的工作直接從工作區詹金斯接口... 我做搬運工主機服務器(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 

這將允許裝載碼頭工人主機服務器(192.168.1.114)/家庭/詹金斯/工作區詹金斯主服務器(192.168.1.111)

在詹金斯主服務器上的文件夾:

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/ 

現在,192.168.1.114:/home/jenkins/workspace文件夾已安裝,並且在Jenkins master上的/ home/jenkins/workspace /「JobName」/文件夾下可見。

到目前爲止這麼好...我再次運行這個工作並面對相同的行爲:當docker仍在運行時 - 用戶可以從Jenkins界面瀏覽工作區,但是當作業完成時,我會得到相同的錯誤。沒有工作區「。儘管我現在可以瀏覽詹金斯主服務器本身的作業文件,但它仍然不是我們所期望的......
順便說一句,如果你需要卸載詹金斯主服務器,使用在工作區目錄下面的命令:

sudo umount -f -l /home/jenkins/workspace/<<mountpoint>> 

瞭解更多關於NFS:

How to configure an NFS server and mount NFS shares on Ubuntu 14.10

此問題的解決辦法是在詹金斯安裝Multijob Plugin,新作業添加到詹金斯將使用多椎插件選項:

MultiJob Settings in new Jenkins Job

在我的情況,我也轉移所有碼頭相關的作業,以便在奴隸生成服務器(192.168.1.112)上運行。因此,在此服務器上我已經安裝了NFS相關工作人員,正是因爲詹金斯在主服務器上,也可以添加多克主機服務器上的一些工作人員(192.168.1.114):

ssh [email protected] 
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) 

在另外的詹金斯從(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/ 

後上述配置是這樣做,我對詹金斯跑了新的工作,終於得到了我想要的:我可以直接從詹金斯接口使用工作區選項。

People can browse docker container Workspace directly from Jenkins Interface when job finished

對不起,長的帖子...我希望這是對你有幫助。

+0

順便說一下,我使用NFSv4的本指南:https://help.ubuntu.com/community/NFSv4Howto – Fadi

+1

添加了在工作區文件夾中添加「其他」組寫入權限的設置 –