Ubuntu中安裝jenkins+docker,實現項目部署

来源:https://www.cnblogs.com/dhcnblog/archive/2019/08/02/11291709.html
-Advertisement-
Play Games

本人對於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的親測可安裝版!!!

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 界面顯示 2.前端 jqgrid 代碼 //載入表格 function GetGrid() { var selectedRowIndex = 0; var $gridTable = $('#gridTable'); $gridTable.jqGrid({ url: "../../BaseMan ...
  • 1.界面顯示效果 2.資源下載 地址 1. jstree https://www.jstree.com/ 2.表格jqgrid https://blog.mn886.net/jqGrid/ 3.界面佈局 https://cloud.tencent.com/developer/section/1489 ...
  • 1.引用System.Media名稱空間下的類SoundPlayer SoundPlayer player = new SoundPlayer(); 2.方法調用Play(); public void Play() { player.SoundLocation = @".\x0pbk-swz4q.w ...
  • 現在圖片文字識別已經很成熟了,比如qq長按圖片,點擊圖片識別就可以識別圖片的文字,將不認識的、文字數量大的、或者不能賦值的值進行二次可複製功能。 我們現在就基於百度Ai開放平臺進行個人文字識別,demo使用的是C#控制台應用程式,後續有需要的可以嫁接到指定項目中使用,比如提供選擇圖片,點擊識別, 獲 ...
  • 小白的第一次使用: 程式員寫程式,就好比一個物品的慢慢誕生,我們今天的這個例子就可以想象成一個物品慢慢的在編譯的過程中,讓我們所看到 一、創建我們所測試的項目 1.創建一個簡單的帶有模型層(Model)和數據訪問層(DAL)的控制台應用程式架構。 DAL:數據訪問層,實現對資料庫的操作控制 Mode ...
  • 1 需求概述 指定一批郵箱地址,使用指定的郵箱發送指定的內容。 2 功能需求 配置文件配置用於發送的郵箱信息 郵件發送功能 日誌視窗輸出顯示 3 界面介面 郵件列表框 標題內容輸入框 發送按鈕 日誌輸出框 4 技術選型 .Net 4.0 C Winform 5 實現 5.1 新建項目 項目命名為 S ...
  • 註:Invoke的第一個參數為類實例,第二個參數為反射的方法的參數列表,如無參數直接傳入null即可。 通過反射,可以通過參數動態的調用指定的方法,降低結構間的耦合性 ...
  • 1、上傳所需要的文件(這裡事先準備好了jdk和tomcat的安裝包,mysql需要線上安裝) jdk的安裝包名稱:jdk-8u151-linux-x64.tar.gz tomcat 的安裝包名稱:apache-tomcat-8.5.15.tar.gz 2、jdk安裝: 檢查是否有安裝jdk和cent ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...