Jenkins把GitHub項目作成Docker鏡像

本文是《Jenkins流水線(pipeline)實戰》系列的第三篇,前面已對Jenkins流水線有了基本認識,也試過從GitHub下載pipeline腳本並執行,今天的實戰是編寫一段pipeline腳本,該腳本的做用是從GitHub下載一個Java項目(Maven構建的),而後編輯構建此項目,並將構建結果製做成Docker鏡像而且推送到私有鏡像倉庫;git

系列文章地址

  1. 《Jenkins流水線(pipeline)實戰之:從部署到體驗》
  2. 《讓Jenkins執行GitHub上的pipeline腳本》
  3. 《Jenkins把GitHub項目作成Docker鏡像》

環境信息

爲了快速完成Jenkins部署,本次實戰用到了Docker,請在實戰前準備好如下環境:github

  1. 操做系統:Ubuntu 18.04.2 LT
  2. Jenkins:2.176.3
  3. Docker:19.03.1
  4. 私有鏡像倉庫:Harbor 1.9.0

實戰內容簡介

今天的實戰功能以下圖所示:在這裏插入圖片描述docker

關於Docker私有鏡像倉庫Harbor

構建好的Docker鏡像,會被推送到Docker鏡像倉庫Harbor,此倉庫是我本身在本地搭建的,詳細搭建步驟請參考《CentOS部署Harbor鏡像倉庫》若是您有hub.docker.com網站的帳號,也能夠直接將鏡像推送到此網站,這樣你們都能使用到您製做的鏡像了。jvm

關於本次用到的GitHub項目

本次實戰會將一個GitHub上的項目先編譯,再構建成Docker鏡像,我這邊準備了一個基於Maven構建的SpringBoot項目,這是個Hello world級別的工程,惟一特別之處是pom.xml中用到了Jib插件,用來將SpringBoot項目構建成Docker鏡像。maven

該項目的源碼能夠從GitHub上下載,地址和連接信息以下表所示:工具

這個git項目中有多個文件夾,本章的應用在hellojib文件夾下,以下圖所示:在這裏插入圖片描述來看看此工程的pom.xml,重點是Jib插件部分,以下所示:網站

<!--使用jib插件-->
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>1.3.0</version>
                <configuration>
                    <!--from節點用來設置鏡像的基礎鏡像,至關於Docerkfile中的FROM關鍵字-->
                    <from>
                        <!--使用openjdk官方鏡像,tag是8-jdk-stretch,表示鏡像的操做系統是debian9,裝好了jdk8-->
                        <image>openjdk:8-jdk-stretch</image>
                    </from>
                    <to>
                        <!--鏡像名稱和tag,使用了mvn內置變量${project.version},表示當前工程的version-->
                        <image>bolingcavalry/hellojib:${project.version}</image>
                    </to>
                    <!--容器相關的屬性-->
                    <container>
                        <!--jvm內存參數-->
                        <jvmFlags>
                            <jvmFlag>-Xms4g</jvmFlag>
                            <jvmFlag>-Xmx4g</jvmFlag>
                        </jvmFlags>
                        <!--要暴露的端口-->
                        <ports>
                            <port>8080</port>
                        </ports>
                    </container>
                </configuration>
            </plugin>
        </plugins>
    </build>複製代碼

使用Jib將SpringBoot項目構建成Docker鏡像的更多信息,請參考《Docker與Jib(maven插件版)實戰》ui

用私有的GitHub倉庫來實戰

  1. 考慮到實際工做中大多數源碼都沒有對外公開,所以我這裏也建了個私有GitHub倉庫,地址是:https://github.com/zq2599/pipeline.git ,將前面提到的的hellojib工程全部源碼都放入此倉庫;
  2. pipeline下載私有倉庫的源碼時須要身份驗證,驗證方式後面會說到。
  3. 這個私有倉庫裏面並不僅有hellojib一個工程,倉庫的根目錄下的hellojib目錄裏面纔是構建鏡像會用到的Maven工程:
    在這裏插入圖片描述

建立Jenkins任務

  1. 建立一個名爲build-image流水線任務:
    在這裏插入圖片描述
  2. 接來下咱們要藉助Jenkins提供的語法工具來生成下載GitHub的pipeline代碼,以下圖,在設置任務的頁面點擊紅框中的流水線語法按鈕:
    在這裏插入圖片描述
  3. 如今進入的頁面是Jenkins輔助咱們編寫pipeline腳本的地方,請按照下圖操做:
    在這裏插入圖片描述
  4. 在彈出的窗口配置一個保存了GitHub帳號和密碼的祕鑰配置項,請按照下圖的數字順序操做:
    在這裏插入圖片描述
  5. 以下圖紅框所示,在下拉菜單中選擇剛纔建立的祕鑰配置:
    在這裏插入圖片描述
  6. 此時能夠發現以前的紅色錯誤提示已經消失(由於鑑權經過了),點擊下圖紅框中的按鈕便可生成pipeline源碼:
    在這裏插入圖片描述
  7. 完整的pipeline腳本內容以下,其中Checkout階段從GitHub下載的那段腳本,就是上圖中自動生成的:
pipeline {
    agent any
    tools {
        maven 'mvn-3.6.2'
    }
    stages {
        stage('Checkout') {
            steps {
                echo '從GitHub下載項目源碼'
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'git-account-passwd', url: 'https://github.com/zq2599/pipeline.git']]])
            }
        }        
        stage('Build') {
            steps {
                echo '開始編譯構建'
                sh 'cd hellojib && mvn clean compile -U -DskipTests jib:dockerBuild'
            }
        }
        stage('Push') {
            steps {
                echo '將本地Docker鏡像推送到Harbor鏡像倉庫'
                echo '給當前鏡像設置帶有Harbor地址和項目名稱的Tag,這樣才能推送到Harbor的library項目之下'
                sh 'docker tag bolingcavalry/hellojib:0.0.1-SNAPSHOT 192.168.50.167/library/hellojib:0.0.1-SNAPSHOT'
                echo '登陸Harbor'
                sh 'docker login 192.168.50.167 -u admin -p Harbor12345'
                echo '登陸chengg成功,開始推送鏡像'
                sh 'docker push 192.168.50.167/library/hellojib:0.0.1-SNAPSHOT'
            }
        }
        stage('Clean') {
            steps {
                echo '清理Maven工程'
                sh 'cd hellojib && mvn clean'
                echo '刪除鏡像'
                sh 'docker rmi bolingcavalry/hellojib:0.0.1-SNAPSHOT 192.168.50.167/library/hellojib:0.0.1-SNAPSHOT'
                echo '清理完畢'
            }
        }
    }
}複製代碼
  1. 將上面的pipeline腳本填寫到build-image任務的流水線腳本輸入框中,以下圖:
    在這裏插入圖片描述
  2. 點擊下圖紅框中的當即構建便可開始執行流水線任務:
    在這裏插入圖片描述
  3. 若是配置無誤的話任務能夠執行成功,以下圖,每一個階段的執行結果和耗時都展示出來了:
    在這裏插入圖片描述
  4. 若是您的任務構架失敗了,點擊下圖紅框中的小圓球,會打開任務執行的詳細日誌,用來檢查錯誤緣由:
    在這裏插入圖片描述
  5. 登陸Harbor網站,能夠看到推送過來的鏡像:
    在這裏插入圖片描述

把pipeline腳本放在GitHub上

今天的實戰中,編寫的pipeline腳本是保存在任務的設置中的,還記得 《讓Jenkins執行GitHub上的pipeline腳本》一篇的內容麼?您能夠嘗試將今天的pipeline腳本存放在GitHub上,這樣從構建腳本到業務項目都實現了版本控制,在多人開發階段更加實用。google

至此,基於pipeline操做的GitHub項目的實戰就完成了,若是您正在尋求容器化環境的CI && CD方案,願本文能給您提供一些參考。url

相關文章
相關標籤/搜索