30分鐘搞定 Jenkins CI

本文首發於:Jenkins 中文社區java

原文連接    做者:Gunter Rotsaertlinux

譯者:Yanjun Shigit

30分鐘搞定 Jenkins CI

設置新的 Jenkins CI,以即可以開始測試新的 Jenkins 插件github

你想在本地設置中使用 Jenkins CI 進行實驗嗎?在本文中,咱們將設置一個本地 Jenkins CI 服務,爲一個簡單的 Spring Boot Maven 項目建立一個構建工做,並將建立的 Docker 鏡像推送到 DockerHub。這將是一個本地實驗的設置,但若是你想嘗試一個 Jenkins 插件,它會很是方便。spring

1.先決條件

開始以前,咱們須要如下先決條件:docker

  • 咱們使用了 Ubuntu 18.04;
  • 必須安裝 Docker,有關安裝說明,請參見此處
  • 咱們須要在 Docker registry 來推送咱們的 Docker 鏡像。最簡單的方法是在DockerHub上建立一個賬戶。你能夠免費建立賬戶。也不會收到垃圾廣告郵件;
  • 構建工做的 Spring Boot 應用程序。咱們將使用前一篇文章中的 Spring Boot MVC 應用程序。源代碼能夠在GitHub上找到,相應的Docker圖像能夠在DockerHub上找到。該應用程序包含 http://localhost:8080/hello 上的一個 HTTP 端點,並只返回一條 Hello Kubernetes 歡迎消息。apache

    2.運行 Jenkins CI

    咱們將使用 Jenkins CI Docker 官方鏡像運行 Jenkins 服務。完整的文檔能夠在這裏找到。用如下命令啓動容器:ubuntu

$ 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 插件。

相關文章
相關標籤/搜索