Jenkins集群下的pipeline實戰

来源:https://www.cnblogs.com/bolingcavalry/archive/2019/11/16/11874732.html
-Advertisement-
Play Games

關於Jenkins集群 在 "《快速搭建Jenkins集群》" 一文中,我們藉助docker快速搭建了Jenkins集群,今天就在這個集群環境中創建pipeline任務,體驗Jenkins集群下的並行任務; 環境信息 整個集群環境一共有三臺電腦,信息如下: | 主機名 | IP地址 | 作用 | | ...


關於Jenkins集群

《快速搭建Jenkins集群》一文中,我們藉助docker快速搭建了Jenkins集群,今天就在這個集群環境中創建pipeline任務,體驗Jenkins集群下的並行任務;

環境信息

整個集群環境一共有三臺電腦,信息如下:
| 主機名 | IP地址 | 作用 |
|--|--|--|
| master | 192.168.133.131 | Jenkins集群的master節點,提供web服務 |
| agent1 | 192.168.133.132 | Jenkins集群的一號工作接節點,標簽是maven |
| agent2 | 192.168.133.133 | Jenkins集群的二號工作接節點,標簽是gradle |

實戰內容

本次實戰要體驗Jenkins集群同時執行兩個任務,都是編譯構建GitHub上的熱門開源項目:

  1. 在agent1上編譯和構建spring-cloud-alibaba,再通過scp命令將構建結果傳輸到master電腦的/usr/local/build_result目錄下;
  2. 在agent2編譯和構建spring-framework,再通過scp命令將構建結果傳輸到master電腦的/usr/local/build_result目錄下;

準備工作

要做以下準備工作才能順利執行後續的任務:

  1. 在master電腦上創建文件夾/usr/local/build_result
  2. 配置maven,在Jenkins網頁上選擇Global Tool Configuration,如下圖紅框所示:
    在這裡插入圖片描述
  3. 新增一個maven配置,名為mvn-3.6.2,然後點擊“保存”按鈕,如下圖:
    在這裡插入圖片描述
  4. agent1和agent2上用scp命令傳輸文件到master上的時候,第一次ssh要在控制台輸入"yes",為了避免執行任務的時候出現這個等待輸入的操作,我們去手動執行一遍,後面就再也不用了,ssh登錄agent1之後,執行以下命令進入容器:
docker exec -it agent /bin/bash
  1. 執行命令ssh [email protected],這時候控制台提示輸入yes或者no,請您輸入yes,再根據提示輸入master的密碼,此時登錄master成功:
[root@agent1 16]# docker exec -it agent /bin/bash
root@82eb8cfec0a6:/# ssh [email protected]
The authenticity of host '192.168.133.131 (192.168.133.131)' can't be established.
ECDSA key fingerprint is SHA256:DPE2nldWHiOhC4DB9doy7jPWNZVup6XFZ+sR2i1gqz8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.133.131' (ECDSA) to the list of known hosts.
[email protected]'s password: 
Last login: Sat Nov 16 19:59:42 2019 from 192.168.133.132
  1. 此時您是在agent1的容器中ssh登錄了master,所以要連續輸入兩次exit命令才能返回到agent1的控制台;
  2. 在agent2電腦上也執行相同的操作;

至此,準備完畢,可以創建任務了;

編譯構建spring-cloud-alibaba的任務

spring-cloud-alibaba是個maven工程,要用maven來編譯構建:

  1. 在Jenkins網頁上,點擊下圖紅框位置,創建一個任務:
    在這裡插入圖片描述
  2. 如下圖,創建名為spring-clolud-alibaba的pipeline任務:
    在這裡插入圖片描述
  3. 下圖紅框位置就是輸入pipeline腳本的地方:
    在這裡插入圖片描述
  4. 在上圖紅框位置輸入以下內容:
pipeline {
    agent {
        label 'maven'
    }
    tools {
        maven 'mvn-3.6.2'
    }
    stages {
        stage('Checkout') {
            steps {
                echo '從GitHub下載spring-cloud-alibaba工程的源碼(2.1.1.RELEASE歸檔包)'
                sh 'wget https://github.com/alibaba/spring-cloud-alibaba/archive/v2.1.1.RELEASE.tar.gz'
                echo '下載結束,解壓歸檔包'
                sh 'tar -zxf v2.1.1.RELEASE.tar.gz'
            }
        }        
        stage('Build') {
            steps {
                echo '開始編譯構建'
                sh 'cd spring-cloud-alibaba-2.1.1.RELEASE && mvn clean package -U -DskipTests'
            }
        }
        stage('Save') {
            steps {
                echo '將構建結果傳送到存儲伺服器'
                sh 'cd spring-cloud-alibaba-2.1.1.RELEASE/spring-cloud-alibaba-nacos-discovery/target && sshpass -p 888888 scp ./*.jar [email protected]:/usr/local/build_result'
                echo '傳送完畢'
            }
        }
        stage('Clean') {
            steps {
                echo '清理Maven工程'
                sh 'cd spring-cloud-alibaba-2.1.1.RELEASE && mvn clean'
                echo '清理完畢'
            }
        }
    }
}
  1. 點擊底部的"保存"按鈕後,點擊下圖紅框中的"立即構建"即可開始任務:

在這裡插入圖片描述

  1. 點擊下圖紅框中的紅色圓球,即可跳轉到實時輸出任務信息的頁面:
    在這裡插入圖片描述

  2. 頁面實時輸出構建信息:
    在這裡插入圖片描述

  3. 主頁面可以看到是agent1在執行任務,如下圖紅框所示,可見pipeline腳本中的標簽已經生效了,將任務調度到標簽為maven的節點去執行:
    在這裡插入圖片描述
    編譯構建spring-cloud-alibaba工程是個費時的操作,我們現在去創建另一個任務:編譯構建spring-framework

    編譯構建spring-framework的任務

    spring-framework是個gradle工程,不需要準備gradle環境,在執行編譯命令時會自動下載gradle工具:
  4. 創建名為spring-framework的pipeline任務:
  5. pipeline腳本如下:
pipeline {
    agent {
        label 'gradle'
    }

    stages {
        stage('Checkout') {
            steps {
                echo '從GitHub下載spring-framework工程的源碼(master分支)'
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/spring-projects/spring-framework.git']]])
            }
        }        
        stage('Build') {
            steps {
                echo '開始編譯構建'
                sh './gradlew build'
            }
        }
        stage('傳送構建結果') {
            steps {
                echo '將構建結果傳送到存儲伺服器'
                sh 'cd spring-core/build/libs && sshpass -p 888888 scp ./*.jar [email protected]:/usr/local/build_result && cd ../../..'
                echo '傳送完畢'
            }
        }
        stage('Clean') {
            steps {
                echo '清理gradle工程'
                sh './gradlew clean'
                echo '清理完畢'
            }
        }
    }
}
  1. 立即執行此任務,可見任務已經被調度到agent2上去執行了,此時的agent1和agent2正在同時執行任務,如下圖:
    在這裡插入圖片描述

    查看構建結果

    上述兩個任務在構建成功後,都會通過scp命令將構建結果傳送到master的/usr/local/build_result目錄下:
[root@master build_result]# ls
agent.jar                      spring-cloud-alibaba-nacos-discovery-2.1.1.RELEASE.jar          spring-cloud-alibaba-nacos-discovery-2.1.1.RELEASE-sources.jar  spring-objenesis-repack-3.1.jar
spring-cglib-repack-3.3.0.jar  spring-cloud-alibaba-nacos-discovery-2.1.1.RELEASE-javadoc.jar  spring-core-5.2.2.BUILD-SNAPSHOT.jar



至此,Jenkins集群下的pipeline實戰就完成了,藉助pipeline的標簽參數可以控制任務的調度節點,實現多任務同時在多節點執行;

歡迎關註公眾號:程式員欣宸


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

-Advertisement-
Play Games
更多相關文章
  • 場景 Nginx入門簡介和反向代理、負載均衡、動靜分離理解 https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102790862 Ubuntu Server 16.04 LTS上怎樣安裝下載安裝Nginx並啟動: https://bl ...
  • 一份擁有良好可讀性和拓展性的代碼是項目里的良藥,它不僅看著舒服,改起來也方便,甚至還能重用,各模塊邏輯分明。“見碼知功底”,而要達到高手那種簡潔有力的境界,需要進行大量的總結和練習,今天我們就來談談如何寫出優美的代碼。 命名 好的命名應該具有如下特征: 1,意思正確。這是最基本的要求,不要掛羊頭賣狗 ...
  • 例10 最大公約數 問題描述 有三個正整數a,b,c(0<a,b,c<10^6),其中c不等於b。若a和c的最大公約數為b,現已知a和b,求滿足條件的最小的c。 輸入數據 第一行輸入一個n,表示有n組測試數據,接下來的n行,每行輸入兩個正整數a,b。 輸出格式 輸出對應的c,每組測試數據占一行。 輸 ...
  • 例9 生理周期 問題描述 人生來就有三個生理周期,分別為體力、感情和智力周期,它們的周期長度為 23 天、28 天和33 天。每一個周期中有一天是高峰。在高峰這天,人會在相應的方面表現出色。例如,智力周期的高峰,人會思維敏捷,精力容易高度集中。因為三個周期的周長不同,所以通常三個周期的高峰不會落在同 ...
  • 面向對象編程思想 抽象 抽象的介紹 我們在前面去定義一個結構體時候,實際上就是把一類事物的共有的 屬性( 欄位)和 行為( 方法)提取 出來,形成一個 物理模型(結構體)。這種研究問題的方法稱為抽象 比如一個銀行賬戶: 面向對象編程三大特性 封裝 基本介紹 Golang 仍然有面向對象編程的繼承,封 ...
  • 一、super關鍵字 我們先看一個例子 package com.bjpowernode.java_learning; ​ public class D51_ { public static void main(String[] args) { Manager51 m1 = new Manager51 ...
  • [TOC] 1. Localized Policy配置 重點說明 :Localized Policy是直接推送策略到vEdge。 創建入口: Configuration Policies Custom Options Localized Policy CLI Policy,Add Policy: 添 ...
  • 1. python線程 1.1 全局解釋器鎖GIL Python代碼的執行由Python虛擬機(也叫解釋器主迴圈)來控制。Python在設計之初就考慮到要在主迴圈中,同時只有一個線程在執行。雖然 Python 解釋器中可以“運行”多個線程,但在任意時刻只有一個線程在解釋器中運行。對Python虛擬機 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...