docker決戰到底(五) 製作自己的Jenkins映象

gamebus發表於2021-09-09

一、前言概要

本篇實踐記錄主要圍繞製作一個自己的jenkins映象而展開,前提是需要你瞭解怎麼製作一個映象,如果你還不瞭解,那麼建議你先閱讀docker官方文件   。 在 中,我們從jenkins中構建的 也使用到了自己製作的Dockerfile,只是它是基於springboot開發的web應用來製作的,你也可以參考一下,在以後你自己開發類似應用服務時應該能用上。

在 中,我們使用的是官方的jenkins/jenkins:alpine映象,啟動映象後還需要經過一系列操作,如我們對maven的安裝以及配置,這樣的操作可能你在另一臺計算機上部署相同的jenkins時也需要做出同樣的操作,這時候我們就有必要製作一個自己的jenkins映象,把相同操作過程固定到映象中。當然,不只是針對jenkins,當有類似情況時,你應該學會舉一反三。

那麼接下來,我們就開始編寫一個Dockerfile來製作jenkins映象,這個映象將會滿足如下功能:

  • 沿用官方jenkins/jenkins:alpine映象的所有功能

  • 能夠作為docker客戶端直接使用docker命令(共用宿主機docker.sock),就是所謂的DooD (Docker outside of Docker)

  • 整合maven並使用自定義的maven配置

二、編寫Dockerfile

宿主機執行命令,在家目錄下建立一個dockerfiles/jenkins資料夾用來存放我們的配置檔案以及Dockerfile檔案

$ cd ~
$ mkdir -p dockerfiles/jenkins

在jenkins目錄下建立兩個檔案,分別是settings.xml與Dockerfile

$ cd dockerfiles/jenkins
$ touch settings.xml Dockerfile

編輯settings.xml,主要是對maven的repository與mirror進行配置,內容如下

<?xml version="1.0" encoding="UTF-8"?><settings xmlns=""
          xmlns:xsi=""
          xsi:schemaLocation=" ">
  <localRepository>/usr/share/maven/ref/repository</localRepository>
  <mirrors>
     <mirror>
        <id>aliyun-nexus</id>
        <mirrorOf>central</mirrorOf> 
        <name>Nexus aliyun</name>
        <url>
      </mirror>
      <mirror>
        <id>CN</id>
        <name>OSChina Central</name>
        <url>
        <mirrorOf>central</mirrorOf>
      </mirror>
  </mirrors></settings>

編輯Dockerfile,來源於 jenkins/jenkins:alpine,alpine系統中採用apk安裝軟體,我們把軟體安裝源換為國內映象源,安裝docker以及maven,並把jenkins使用者加入docker所在的999使用者組,內容如下

# =====================================================================# Jenkins with DooD (Docker outside of Docker) and integration maven# =====================================================================FROM jenkins/jenkins:alpine

USER root

ARG MAVEN_VERSION=3.6.0ARG MAVEN_SHA=fae9c12b570c3ba18116a4e26ea524b29f7279c17cbaadc3326ca72927368924d9131d11b9e851b8dc9162228b6fdea955446be41207a5cfc61283dd8a561d2f
ARG MAVEN_BASE_URL={MAVEN_VERSION}/binaries

RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone 
  && echo "" > /etc/apk/repositories 
  && echo "" >> /etc/apk/repositories 
  && apk add --no-cache tar procps shadow docker 
  && mkdir -p /usr/share/maven /usr/share/maven/ref/repository 
  && curl -fsSL -o /tmp/apache-maven.tar.gz ${MAVEN_BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz 
  && echo "${MAVEN_SHA}  /tmp/apache-maven.tar.gz" | sha512sum -c - 
  && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 
  && rm -f /tmp/apache-maven.tar.gz 
  && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn 
  && usermod -aG 999 jenkins 
  && chown 1000:1000 /usr/share/maven/ref/repository

ENV MAVEN_HOME /usr/share/maven
VOLUME /usr/share/maven/ref/repository
COPY settings.xml /usr/share/maven/conf/settings.xml

USER jenkins

三、構建映象

在Dockerfile檔案所在目錄執行如下命令進行映象的構建,就是docker build命令

$ docker build -t jenkins-dood .

首次構建時需要等待時間可能稍微較長一點,但也不會很慢,因為我們使用的國內映象源,最終還是要視你的網路而定

圖片描述

直到出現 Successfully tagged jenkins-dood:latest 說明構建完成,接下來我們來檢查一下剛才構建的映象

$ docker image ls

圖片描述

四、部署自定義jenkins

在rancher中部署我們新制作的jenkins-dood:latest映象,埠對映到主機30010

圖片描述

在宿主機中重新建立兩個資料卷掛載目錄,執行如下命令

$ cd /docker_volume
$ mkdir maven-repo jenkins-dood-home

資料卷中選擇新增路徑對映卷,需要新增兩個,分別命名為maven-repo與jenkins-dood-home,把我們剛才建立的兩個目錄分別對映到容器內部

圖片描述

再對映一個主機目錄到容器中,主要實現我們的dood,共用/var/run/docker.sock

圖片描述

確認一下安全/主機設定中,拉取映象為從不,因為我們映象在宿主機中

圖片描述

最後點選啟動即可, 可以看到我們的工作負載中又多了一個我們剛才部署的jenkins-dood服務

圖片描述

接下來我們訪問  http://192.168.225.129:30010/ , 然後就需要和 中的第二節 初始化Jenkins 做一樣的操作,這裡就不重複進行記錄了。 初始化完成後進入到如下介面

圖片描述

思考: 初始jenkins步驟也是重複的,是否可以製作到Dockerfile中

五、使用自定義jenkins

我們建立一個新任務restful-api-demo,如下圖所示,選擇自由風格的軟體專案,然後確認

圖片描述

在原始碼管理中選擇git,輸入git資源地址 https://github.com/wendell-dev/restful-api-demo.git

圖片描述

因為我們需要測試一下是否可以使用docker以及maven,所以直接選擇在構建裡執行shell指令碼來使用命令進行測試, shell命令中輸入的內容如下

mvn clean packagedocker build -t wendell/restful-api-demo:dood .

圖片描述


圖片描述

儲存配置並進行構建後,我們檢視一下構建日誌

圖片描述

圖片描述

可以看出我們的maven命令能夠直接執行,而且還是從阿里雲映象倉庫下載的包,我們的docker build命令也執行成功,接下來我們進行最後的驗證,在宿主機執行如下命令檢查下載的包是否掛載到我們指定的目錄了以及映象是否存在

$ ls /docker_volume/maven-repo
$ docker images

圖片描述

圖片描述

六、使用小結

到此為止,我們成功製作了自己的jenkins映象,不需要再像前面那篇 中那樣對jenkins進行繁瑣的配置,你也可以看見,我們除了初始化時安裝的預設外掛外並沒有安裝任何其他外掛就完成了springboot應用的編譯打包構建,我們把配置過程對映到了Dockerfile中,從而讓我們使用更輕鬆,以及可以更快速的遷移到其他容器機器上。

好了,本篇docker決戰到底實踐記錄就到這裡,如果你有什麼疑問或者文中有什麼錯誤的地方,歡迎在留言區留言。 如果你願意,可以告訴我接下來你更希望看到哪方面的內容,我們可以一起加油!



作者:wendell_dev
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4687/viewspace-2821212/,如需轉載,請註明出處,否則將追究法律責任。

相關文章