本人對於linux系統是個小白,恰逢公司新框架需要docker+jenkins部署項目,所以通過同事口述+一頓亂查,終於實現在虛擬機上搭建的ubuntu系統中 實現jenkins +docker 自動部署拉取項目。 趕緊做個記錄! 準備條件: 1、虛擬機內安裝ubuntu隨後再做記錄,雖說同事已經演 ...
本人對於linux系統是個小白,恰逢公司新框架需要docker+jenkins部署項目,所以通過同事口述+一頓亂查,終於實現在虛擬機上搭建的ubuntu系統中 實現jenkins +docker 自動部署拉取項目。
趕緊做個記錄!
準備條件:
1、虛擬機內安裝ubuntu隨後再做記錄,雖說同事已經演示過,但是自己還是得記錄下。
2、jenkins 需要環境:由於本人直接將jenkins安裝於宿主機中(還可以將jenkins安裝於docker中---這個隨後再研究,一步一步來),所以需要JDK+Tomcat環境做支撐
ubuntu 中JDK8+Tomcat8環境的安裝另做記錄;
3、本文只記錄Jenkins和dockers的安裝。
安裝docker:
借鑒同事現成方法:
sudo apt-get updat
說明:更新系統軟體(為啥?不知道)
sudo apt-get install apt-transport-https ca-certificates
說明:安裝ssl證書--因為要訪問https協議的網站
curl -sSL https://get.daocloud.io/docker | sh
說明:下載並安裝docker,安裝完成後自動啟動了
安裝jenkins
網上查了很久也試過好幾個方法有的不是很靠譜也很麻煩,現在把本人親測的一個靠譜的方法做記錄,其它方法等有空了再做研究
包含在預設Ubuntu軟體包中的Jenkins版本往往落後於項目本身的最新版本。 為了利用最新的修複和功能,我們將使用項目維護的軟體包來安裝Jenkins。
首先,我們將存儲庫密鑰添加到系統。
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
添加密鑰後,系統將返回OK
。 接下來,我們將Debian包存儲庫地址附加到伺服器的sources.list
:
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
當這兩個都到位時,我們將運行update
,以便apt-get
將使用新的存儲庫:
sudo apt-get update
最後,我們將安裝Jenkins及其依賴項,包括Java:
sudo apt-get install jenkins
指定早期版本可以安裝
sudo apt-get install jenkins=2.138.1
如果太慢的話 可以去官網下載後 再安裝
啟動jenkis
sudo /etc/init.d/jenkins [start|restart|stop]
瀏覽jenkins
打開我們的瀏覽器輸入jenkins的伺服器地址,在這裡我的是192.168.44.135
http://192.168.44.135:8080
但是呢有時候這個埠就會被萬惡的tomcat占用我們不得不修改jenkins的埠(此時如果你打開的是jenkins此步驟可以省略)
1、修改jenkins埠
$ sudo vi /etc/default/jenkins
記錄vi編輯器的操作步驟1、 o --
開始編輯輸入
ESC --推出編輯:wq --保存並推出 :q! --強制退出,不保存
#修改如下內容 HTTP_PORT=8085 #重啟jenkins服務 $ sudo /etc/init.d/jenkins restart
首次進入jenkins如要輸入密碼,密碼位置:/var/lib/jenkins/secrets/initialAdminPassword,查看命令
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
插件安裝
點擊“Install suggested plugins”,即安裝推薦的插件:
開始安裝插件,安裝插件比較慢,要多等一會兒
創建管理員賬戶
創建任務
由於我不需要什麼後臺的編譯只需要編譯流水線,填寫docker指令,因此就沒有配置jdk maven什麼的。因此只創建了一個流水線項目
保存之後,點擊立即構建,會發現死活都編譯不過去,各種失敗!接下來我們逐個擊破它!
第一個問題:沒有許可權的問題(截圖沒有保留隨後添加)
我的當前登陸用戶是dh
在Ubuntu下,當執行apt-get install方式安裝Jenkins的時候,會自動創建jenkins用戶,這是一個沒有用戶目錄的賬號。
可想而知jenkins用戶肯定是沒有什麼許可權的,所以我們要想辦法讓jenkins用dh賬戶運行
將dh用戶添加到jenkins用戶組中,讓dh用戶擁有管理jenkins的許可權
$ sudo gpasswd -a dh jenkins
現在root可以管理jenkins了,我們需要配置jenkins的配置文件讓jenkins用dh身份運行,配置文件在/etc/default/jenkins
#打開文件 vi /etc/default/jenkins #修改用戶--只修改這一個地方 JENKINS_USER=dh JENKINS_GROUP=dh
ok,重啟jenkins
$ sudo /etc/init.d/jenkins restart
第二個問題
由於jenkins的工作目錄在/var/lib/jenkins我們查看下它的所屬用戶和所屬組
這裡顯然是不對的,由於我們把jenkins的預設運行用戶改成了dh,接著改
$ sudo chown -R dh:dh /var/lib/jenkins
再重啟jenkins
$ sudo /etc/init.d/jenkins restart
ok,沒毛病了,這回跑通了
第三個問題:docker守護進程攔截不能直接執行docker命令
我的解決方案 在配置文件中 加上sudo 執行docker指令
網上還有把當前的用戶添加到docker用戶組中(這個方法我沒有試過)附上查到的方法:
問題描述
安裝完docker後,執行docker相關命令,出現
”Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/json: dial unix /var/run/docker.sock: connect: permission denied“ 原因
摘自docker mannual上的一段話
Manage Docker as a non-root user The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can only access it using sudo. The docker daemon always runs as the root user. If you don’t want to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.
大概的意思就是:docker進程使用Unix Socket而不是TCP埠。而預設情況下,Unix socket屬於root用戶,需要root許可權才能訪問。
解決方法1
使用sudo獲取管理員許可權,運行docker命令
解決方法2
docker守護進程啟動的時候,會預設賦予名字為docker的用戶組讀寫Unix socket的許可權,因此只要創建docker用戶組,並將當前用戶加入到docker用戶組中,那麼當前用戶就有許可權訪問Unix socket了,進而也就可以執行docker相關命令
sudo groupadd docker #添加docker用戶組 sudo gpasswd -a $USER docker #將登陸用戶加入到docker用戶組中 newgrp docker #更新用戶組 docker ps #測試docker命令是否可以使用sudo正常使用
第四個問題:執行sudo命令得輸入當前用戶的密碼,以切換至root用戶
問題描述
上述處理完成後 執行發現
sudo: no tty present and no askpass program specified
解決方法:
給jenkins添加不用密碼使用sudo
的許可權。
sudo vi /etc/sudoers
有時候發現上述 編輯不能保存:則可以執行如下命令
sudo visudo
保存文件(註意保存的時候修改文件名,文件名尾碼不要加上預設的.tmp,即可覆蓋原文件)
Ctrl+O
退出編輯 Ctrl+X
在sudoers文件中加一行:
jenkins ALL=(ALL) NOPASSWD:ALL
執行完上述操作後發現還是不行!!!!!為毛線呢? 原來我的用戶是dh 雖然jenkins安裝時自創了個用戶叫jenkins但是之前我已經改成dh來管理jenkins了所以需要添加
dh ALL=(ALL) NOPASSWD:ALL
到此可以終於可以構建了!!!!!!!
另外,記錄個小事,登陸阿裡雲倉庫的時候 用-u 和-p 不然阿裡雲提示沒有許可權
記錄結束。
下次記錄JDK+TOMCAT的親測可安裝版!!!