1. 程式人生 > >30分鐘搞定 Jenkins CI

30分鐘搞定 Jenkins CI

本文首發於:Jenkins 中文社群

原文連結    作者:Gunter Rotsaert

譯者:Yanjun Shi

30分鐘搞定 Jenkins CI

設定新的 Jenkins CI,以便可以開始測試新的 Jenkins 外掛

你想在本地設定中使用 Jenkins CI 進行實驗嗎?在本文中,我們將設定一個本地 Jenkins CI 服務,為一個簡單的 Spring Boot Maven 專案建立一個構建工作,並將建立的 Docker 映象推送到 DockerHub。這將是一個本地實驗的設定,但如果你想嘗試一個 Jenkins 外掛,它會非常方便。

1.先決條件

開始之前,我們需要以下先決條件:

  • 我們使用了 Ubuntu 18.04;
  • 必須安裝 Docker,有關安裝說明,請參見此處
  • 我們需要在 Docker registry 來推送我們的 Docker 映象。最簡單的方法是在DockerHub上建立一個帳戶。你可以免費建立帳戶。也不會收到垃圾廣告郵件;
  • 構建工作的 Spring Boot 應用程式。我們將使用前一篇文章中的 Spring Boot MVC 應用程式。原始碼可以在GitHub上找到,相應的Docker影象可以在DockerHub上找到。該應用程式包含 http://localhost:8080/hello

     上的一個 HTTP 端點,並只返回一條 Hello Kubernetes 歡迎訊息。

    2.執行 Jenkins CI

    我們將使用 Jenkins CI Docker 官方映象執行 Jenkins 服務。完整的文件可以在這裡找到。用以下命令啟動容器:

$ docker run -p 8080:8080 --name myjenkins -v jenkins_home:/var/jenkins_home -v jenkins_downloads:/var/jenkins_home/downloads jenkins/jenkins:lts

讓我們來仔細看看我們正在做什麼:

  • -p 8080:8080:我們將內部 Jenkins 埠(冒號後)對映到外部埠,該埠可從我們的 Docker 主機訪問;
  • –name myjenkins:我們為容器提供一個名稱;否則,Docker將為你生成一個名稱。最好給它起個名字;這樣,你可以輕鬆地啟動和停止容器;
  • -v jenkins_home:/var/jenkins_home:我們希望將內部 Jenkins 主目錄(冒號之後)對映到 Docker 主機上的一個目錄。通過這種方式,Jenkins 資料將被儲存在我們的主機上,這讓我們有機會備份資料;
  • -v jenkins_downloads:/var/jenkins_home/downloads:我們需要在Jenkins中安裝額外的工具; 因此,我們建立一個目錄來複制 *.tar.gz 檔案。在這篇文章的後面,我們將清楚地知道我們將使用目錄做什麼;
  • jenkins/jenkins:lts:要使用的 Docker 映象。我們將使用 LTS 版本,但如果你願意,也可以使用不太穩定的版本。在撰寫本文時,v2.150.1 是 LTS 版本。 在此之後,你可以通過其名稱停止和啟動容器:

··· $ docker stop myjenkins $ docker start myjenkins ···

3.配置 Jenkins 以供首次使用

一旦容器啟動後,我們就可以訪問 Jenkins Web 控制檯了。當然,我們需要知道 Jenkins 例項的 IP 地址。因此,請執行以下命令:

$ docker inspect myjenkins

這將顯示一些 JSON 輸出。轉到該 Networks 部分,引數 IPAddress 顯示我們的 Jenkins IP 地址(在我們的例子中為172.17.0.3):

"Networks": {
  "bridge": {
    "IPAMConfig": null,
    ...
    "IPAddress": "172.17.0.3",
    ...
    "DriverOpts": null
  }
}

Jenkins Web 控制檯可通過瀏覽器訪問 http://172.17.0.3:8080/

這將向我們顯示以下頁面:

jenkins-first-login

我們使用臨時密碼,啟動容器後在控制檯輸出中顯示:

*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
f586346583e04fa78e2cc8edbf7566e1
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************

輸入臨時密碼後,將顯示一個頁面,在這裡我們可以選擇要安裝的預設外掛集或自定義外掛集。我們將選擇預設設定。

jenkins-plugins

現在,坐等外掛安裝好:

jenkins-install-plugins

接下來,建立第一個管理員使用者:

jenkins-create-first-user

最後,配置 Jenkins 例項:

jenkins-instance-configuration

太棒了!Jenkins 現在已經準備好可以使用了:

jenkins-up-and-running

4.安裝所需的工具

我們的構建需要在 Jenkins 中提供一些工具。我們需要 JDK11,Maven 和 Docker。在下一節中,我們將展示如何在容器中使用這些屬性。

在啟動容器期間,我們在容器中建立了 /var/jenkins_home/downloads 的掛載卷。首先,我們將驗證是否可以從容器中訪問此路徑。執行以下命令:

··· $ docker exec -it myjenkins ls -l /var/jenkins_home/downloads total 0 ···

如上所述返回0個結果時,那麼我們就可以繼續了。否則,你必須檢查在啟動容器期間是否輸入正確。

4.1 安裝 JDK 11

我們將使用 Adopt OpenJDK 11,可在此處下載。我們必須將下載的 *.tar.gz 檔案複製到已安裝在主機上的卷 jenkins_home/downloads 中。為了檢索我們機器上的路徑,我們再次執行 docker inspect 命令,就像以前檢索Jenkins IP地址一樣。這一次,轉到分段 Mounts

"Mounts": [
  ...
  {
    "Type": "volume",
    "Name": "jenkins_downloads",
    "Source": "/var/lib/docker/volumes/jenkins_downloads/_data",
    "Destination": "/var/jenkins_home/downloads",
    ...
  }
],

在我們的示例中,卷位於 /var/lib/docker/volumes/jenkins_downloads/_data 上。將 *.tar.gz 檔案複製到此位置。

跳轉到 Manage Jenkins – Global Tool Configuration 和 *JDK 安裝部分*。單擊 Add JDK 按鈕。預設情況下,java.sun.com 會新增安裝程式。我們不會使用這個,所以刪除它並新增一個 Extract *.zip/*.tar.gzinstaller。根據下面的螢幕截圖填寫欄位。二進位制存檔的路徑是 file:/var/jenkins_home/downloads/OpenJDK11U-jdk_x64_linux_hotspot_11.0.1_13.tar.gzLabel 留空是很重要的;否則,JDK的安裝將失敗。

jenkins-install-jdk

跳轉到 *Manage Jenkins – Configure System*,到 Global properties 部分並啟用 *環境變數*。為其新增環境變數 JAVA_HOME並填充路徑 /var/jenkins_home/tools/hudson.model.JDK/JDK11/jdk-11.0.1+13

jenkins-java_home-1

4.2 安裝 Maven

我們將使用 Maven 3.6.0,可以在這裡下載。安裝過程與 JDK 安裝相同:下載 *.tar.gz 檔案並將其複製到 jenkins_home/downloads

轉到 Manage Jenkins – Global Tool Configuration 和 Maven 安裝部分。單擊 Add Maven 按鈕。預設情況下,Apache 會新增安裝程式。我們不會使用這個,所以刪除它並新增一個 Extract *.zip/*.tar.gzinstaller。根據下面的螢幕截圖填寫欄位。二進位制存檔的路徑是 file:/var/jenkins_home/downloads/apache-maven-3.6.0-bin.tar.gzLabel 留空是很重要的;否則,Maven 的安裝將失敗。將子目錄設定為 apache-maven-3.6.0 也很重要;否則,Maven 主目錄沒有正確設定,mvn 可執行檔案將無法找到。

jenkins-install-maven-1

4.3 配置 Docker

在 Docker 內部安裝 Docker 不是一個好主意,請參閱本文。因此,我們將使用宿主機的 Docker 安裝,並將宿主機的 Docker 套接字掛載到容器。實際上,這也不是一個好主意,但是對於我們的 Jenkins 實驗環境來說,這是可以的,但是出於安全原因,永遠不要以這種方式暴露 Docker 套接字。

我們刪除現有的容器(這不是有害的,因為我們的所有資料都儲存在我們的主機上,我們不會丟失任何資料),然後使用 -v /var/run/docker.sock:/var/run/docker.sock 重新啟動容器。

$ docker rm myjenkins
$ docker run -p 8080:8080 --name myjenkins -v /var/run/docker.sock:/var/run/docker.sock -v jenkins_home:/var/jenkins_home -v jenkins_downloads:/var/jenkins_home/downloads jenkins/jenkins:lts

為了使其工作,我們還必須設定 docker.sock 的許可權給 jenkins 使用者。預設情況下,它被掛載為 root,因此,由於 Permission Denied 錯誤,我們的構建將失敗。

以 root 身份登入 Docker 容器:

$ docker exec -it -u root myjenkins

檢查許可權 docker.sock,這表明它擁有者 root

$ ls -l /var/run/docker.sock
srw-rw---- 1 root 999 0 Jan 6 11:45 /var/run/docker.sock

讓 jenkins 成為新所有者,並再次列出許可權:

$ chown jenkins: /var/run/docker.sock
$ ls -l /var/run/docker.sock
srw-rw---- 1 jenkins jenkins 0 Jan 6 11:45 /var/run/docker.sock

現在,jenkins 是所有者,我們不會再得到 Permission Denied 的錯誤。

為了將 Docker 映象推入 Docker registry,我們需要通過 settings.xml 將憑據提供給 Maven。我們可以通過配置檔案提供程式外掛輕鬆地提供 settings.xml。去 Manage Jenkins – Manage plugins 並安裝外掛(不重啟安裝)。

轉到 *Manage Jenkins – Managed files*,然後單擊 *Add a new Config*。建立 Global Maven settings.xml 並使用 DockerHub 帳戶憑據新增以下部分:

<servers>
  <server>
    <id>docker.io</id>
    <username>docker_username</username>
    <password>docker_password</password>
  </server>
</servers>

5.建立構建工作

最後要做的是建立我們的構建工作。轉到 Jenkins CI 主頁,然後單擊 *New Item*。我們將把構建工作命名為 *MyKubernetesPlanet*,並選擇一個 *Freestyle Project*。

在構建工作的配置部分,我們轉到 Source Code Management 部分,並填寫 Git URL https://github.com/mydeveloperplanet/mykubernetesplanet.git 和 branch */feature/jenkinsci

jenkins-job-scm

在 Build 部分,我們添加了一個 Invoke top-level Maven targets 的構建步驟。我們將呼叫以下 Maven 目標來構建我們的應用程式並將 Docker 映象推送到 Docker registry:

$ clean install dockerfile:push

我們還需要設定之前建立的 Maven版本 和 *全域性配置檔案*。

jenkins-job-build-1

手動為我們的工作啟動構建,這將建立 jar 檔案,建立我們的 Docker 映象,並將其推送到 Docker registry。

6.結論

在本文中,我們提供了一種讓 Jenkins 例項執行的快速方法,包括執行 Maven 構建、建立 Docker 映象並將其推入 Docker registry 的構建作業。請注意,這不是一種安全的方法,但是對於實驗用例來說,它並沒有太大的危害。現在我們已經有了一個完全執行的 Jenkins 例項,我們可以使用它來測試新的 Jenkins 外掛。

相關推薦

30分鐘 Jenkins CI

本文首發於:Jenkins 中文社群 原文連結    作者:Gunter Rotsaer

項目實戰:iOS極光推送集成(30分鐘

adg append ati 技術分享 tro markdown ocs sym xcode 推送有非常多,如個推、友盟、融雲和極光等等。在這裏就講下怎樣使用極光推送。主要內容是將官方文檔資料詳細匯總並一步一步集成到項目中,您也能夠直接去官方文檔閱

Vue 30分鐘前端增刪改查

閱讀目錄 一、MVVM大比拼 二、Vue常用網址 三、Vue基礎入門 1、MVVM圖例 2、第一個Vue例項 3、雙向繫結 四、常用指令 1、v-text、v-html指令 2、v-model指令

JS元件系列——又一款MVVM元件:Vue(一:30分鐘前端增刪改查)

正文 前言:關於Vue框架,好幾個月之前就聽說過,瞭解一項新技術之後,總是處於觀望狀態,一直在猶豫要不要系統學習下。正好最近有點空,就去官網瞭解了下,看上去還不錯的一個元件,就抽空研究了下。最近園子裡vue也確實挺火,各種入門博文眼花繚亂,博主也不敢說寫

centos 安裝Jenkins yum方法-5分鐘

環境要求 centos + tomcat 先匯入倉庫 wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat-stable/jenkins.repo rpm --import http:/

10分鐘讓你困惑的 Jenkins 環境變數

## 前言 Jenkins, DevOps 技術棧的核心之一,CI/CD 離不開編寫 Pipeline 指令碼,上手 Jenkins ,簡單查一下文件,你就應該不會被 agent,stages,step 這類關鍵詞弄懵,也能很快構建出 pipeline 的骨架 但是當向骨架中填充內容的時候,尤其如何利

Python:10分鐘不寫代碼的爬蟲

出現 ring swe 導入 gem 取數據 bbb del delay 代碼自己敲 使用 Chrome 瀏覽器插件 Web Scraper 可以輕松實現網頁數據的爬取,不寫代碼,鼠標操作,點哪爬哪,還不用考慮爬蟲中的登陸、驗證碼、異步加載等復雜問題。 Web Scrap

厲害了Word杭州互聯網法院!網上提交訴狀5分鐘

nbsp 全國 效率 方案 2016年 規則 處理 轉換 視頻 你以為打官司只能驅車趕路去現場?你已經OUT了  你以為互聯網只能瀏覽購物打遊戲? 你又OUT了   “互聯網+法庭”讓你體驗不一樣的“網絡打官司”新常態   喲喲~~我已看見你滿臉質疑的小表情啦   真不是小

5分鐘Nginx安裝

stat nload nss zlib nginx配置 pen make figure ron 1. 安裝gcc(centos 7之後一般已自帶,可以在第6步失敗後再安裝) yum install gcc gcc-c++ 2. 安裝pcre yum install

懶人辦公|30PDF文檔合並

pdf合並在日常辦公學習中,經常遇到多個PDF文件的情況,一個個點擊查看非常麻煩,而且發郵件給客戶也不方便,需要添加多個附件,那麽問題如何解決呢?其實很簡單,僅需將多個PDF合並成一個PDF文檔即可,接下來和小編一起學習一下PDF合並技巧吧。1、 PDF365--在線PDF合並在瀏覽器直接輸入:PDF365.

30大數據爬蟲項目

jquery 監控 原理分析 redis myba 掌握 算法與數據結構 報表 nic 詳情請交流 QQ 709639943 00、30天搞定大數據爬蟲項目 00、零基礎實戰機器學學習 00、企業級實戰 Spark離線和實時電影推薦系統 00、三大項目掌握Sto

10分鐘Lync 2010和Quintum AF集成

Lync Quintum AF集成 接線拓撲接線方法:l 電信直線直接接在Quintum AF的FXO口上l AF采用RJ45接入網絡 使用效果:l PSTN用戶撥打直線的號碼,會聽到二次撥號音,然後再輸入Lync用戶的分機號碼就可以直接振鈴Lync用戶l Lync用戶直接撥打外部號碼就可以直

分鐘mongodb副本集

Java mongodb mongodb副本集配置 最近項目中用到了mongodb,由於是用mongodb來記錄一些程序的日誌信息和日常的統計,為了增加應用的可靠性,一直在找mongodb集群的一些資料,下面

zookeeper-1.操作與應用場景-《每日五分鐘大數據》

分享 似的 每日 文件 實現 多個 tasks 回復 task Zookeeper作為一個分布式協調系統提供了一項基本服務:分布式鎖服務,分布式鎖是分布式協調技術實現的核心內容。像配置管理、任務分發、組服務、分布式消息隊列、分布式通知/協調等,這些應用實際上都是基於這項

啟程 - 《每日五分鐘大數據》

alt 系列 梳理 分享 視頻 了解 href http 不定 ??想了很久,準備開始寫一系列的文章,記錄這些年來的所得所想,感覺內容比較多不知從哪裏開始,畫了個思維導圖確定了大的方向,內容會不斷添加。細節的東西我會邊寫邊定,大家也可以給我一些建議,我會根據寫的內容實時更

YARN-異常大全-《每日五分鐘大數據》

管理 cat love guarantee 解決 code 出現 shu sources #問題描述:NodeManager1 cpu負載飆高,進程還在但是不再向ResourceManager發送心跳,不斷重復下文2的動作。心跳停止一段時間後會重連上RM但是cpu仍然很高,

一篇文章懂DataSet、DataFrame、RDD-《每日五分鐘大數據》

implicit 操作數 frame 大數據 函數 for 臨時 變量 ade 1. 三者共性: 1、RDD、DataFrame、Dataset全都是spark平臺下的分布式彈性數據集,為處理超大型數據提供便利 2、三者都有惰性機制,執行trainform操作時不會立即執

分鐘macOS tensorflow + opencv配置

jpg bus main 個人 urn hub 打印 就是 學校 隔壁小白都簡單哭了 準備: MacOS(我的系統是10.12.6,比較懶很少更新) python 3.6(忘掉2.7吧~已經是遺留版本啦~下載地址 https://www.python.org/downloa

運維日常:五分鐘PHP的redis問題

stand GNU C execution top depend sbin ash arguments lib 一、前言 1.需求 2.解決LNMP環境中的PHP缺少redis擴展包,導致訪問頁面報錯500,處理問題,安裝PHP擴展功能redis。 下面記錄整個過程,如果不

3分鐘Linux系統正則表示式

正則表示式是一種字元模式,用於在查詢過程中匹配製定的字元。   元字元通常在Linux中分為兩類:Shell元字元,由Linux Shell進行解析; 正則表示式元字元,由vi/grep/sed/awk等文字處理工具進行解析; 正則表示式一