Jenkins的流水線


什么是Jenkins的流水線

Jenkins 流水線 (或簡單的帶有大寫"P"的"Pipeline") 是一套插件,它支持實現和集成持續交付流水線 到Jenkins。

(CD) pipeline_是你的進程的自動表達,用於從版本控制向用戶和客戶獲取軟件。 你的軟件的每次的變更 (在源代碼控制中提交)在它被釋放的路上都經歷了一個復雜的過程 on its way to being released. 這個過程包括以一種可靠並可重復的方式構建軟件, 以及通過多個測試和部署階段來開發構建好的軟件 (c成為 "build") 。

流水線提供了一組可擴展的工具,通過 Pipeline domain-specific language (DSL) syntax. [1]對從簡單到復雜的交付流水線 "作為代碼" 進行建模。

對Jenkins 流水線的定義被寫在一個文本文件中 (成為 Jenkinsfile),該文件可以被提交到項目的源代碼的控制倉庫。 [2] 這是"流水線即代碼"的基礎; 將CD 流水線作為應用程序的一部分,像其他代碼一樣進行版本化和審查。 創建 Jenkinsfile並提交它到源代碼控制中提供了一些即時的好處:

  • 自動地為所有分支創建流水線構建過程並拉取請求。
  • 在流水線上代碼復查/迭代 (以及剩余的源代碼)。
  • 對流水線進行審計跟蹤。
  • 該流水線的真正的源代碼 [3], 可以被項目的多個成員查看和編輯。

While定義流水線的語法, 無論是在 web UI 還是在 Jenkinsfile 中都是相同的, 通常認為在Jenkinsfile 中定義並檢查源代碼控制是最佳實踐

聲明式和腳本化的流水線語法

Jenkinsfile 能使用兩種語法進行編寫 - 聲明式和腳本化。
聲明式和腳本化的流水線從根本上是不同的。 聲明式流水線的是 Jenkins 流水線更近的特性:

  • 相比腳本化的流水線語法,它提供更豐富的語法特性,
  • 是為了使編寫和讀取流水線代碼更容易而設計的

然而,寫到Jenkinsfile中的許多單獨的語法組件(或者 "步驟"), 通常都是聲明式和腳本化相結合的流水線。 在下面的 [pipeline-concepts] 和 [pipeline-syntax-overview] 了解更多這兩種語法的不同。

Why Pipeline?

本質上,Jenkins 是一個自動化引擎,它支持許多自動模式。 流水線向Jenkins中添加了一組強大的工具, 支持用例 簡單的持續集成到全面的CD流水線。通過對一系列的相關任務進行建模, 用戶可以利用流水線的很多特性

  • Code: 流水線是在代碼中實現的,通常會檢查到源代碼控制, 使團隊有編輯, 審查和迭代他們的交付流水線的能力。
  • Durable: 流水線可以從Jenkins的主分支的計划內和計划外的重啟中存活下來。
  • Pausable: 流水線可以有選擇的停止或等待人工輸入或批准,然后才能繼續運行流水線。
  • Versatile: 流水線支持復雜的現實世界的 CD 需求, 包括fork/join, 循環, 並行執行工作的能力。
  • Extensible:流水線插件支持擴展到它的DSL [1]的慣例和與其他插件集成的多個選項。

然而, Jenkins一直允許以將自由式工作鏈接到一起的初級形式來執行順序任務, [4] 流水線使這個概念成為了Jenkins的頭等公民。

構建一個的可擴展的核心Jenkins值, 流水線也可以通過 Pipeline Shared Libraries 的用戶和插件開發人員來擴展。 [5]

下面的流程圖是一個 CD 場景的示例,在Jenkins中很容易對該場景進行建模

image

流水線概念

下面的概念是Jenkins流水線很關鍵的一方面 , 它與流水線語法緊密相連 (參考 overview below).

流水線

流水線是用戶定義的一個CD流水線模型 。流水線的代碼定義了整個的構建過程, 他通常包括構建, 測試和交付應用程序的階段 。

另外 , pipeline 塊是 聲明式流水線語法的關鍵部分.

節點

節點是一個機器 ,它是Jenkins環境的一部分 and is capable of執行流水線。
另外, node塊是 腳本化流水線語法的關鍵部分

階段

stage 塊定義了在整個流水線的執行任務的概念性地不同的的子集

jenkins創建Pipeline項目

本次環境為:

主機名 IP地址 安裝的應用 系統版本
jenkins 192.168.23.143 tomcat jenkins CentOS 8
客戶機 192.168.23.144 tomcat jenkins CentOS 8

安裝Pipeline、Publish Over SSH、Publish Over SSH、SSH Build Agents、Git、GitHub、GitLab、Gitee插件
image

  • Gitee配置公鑰
[root@jenkins ~]# ssh-keygen -t rsa -b 2048 -C "yanchuanglol@163.com" -N "" -f /root/.ssh/id_rsa
Generating public/private rsa key pair.
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:MtYf5/dFCJuwZ37E4sO3as6b5r0i3xbdoArF1ABiQv8 qinghao_yu@163.com
The key's randomart image is:
+---[RSA 2048]----+
|   .o o ...o     |
|     + .  . .    |
|      .  o. .    |
|       o  oo =.. |
|      + E.o B.+oo|
|     . o.. X.o..o|
|         ...* +..|
|          o.+O.o.|
|           BO==..|
+----[SHA256]-----+
  • 登錄Gitee然后將公鑰復制進去
    image

  • 添加私鑰

[root@jenkins ~]# cat /root/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
······
DVnODEbPs8q/FQM09wp8Cjk5ephdqdkyiUIyQPAAAAAwEAAQAAAQEAttAv7CgVzBpdYyyN
O0Lkzo0W/vmEtkI+O7kThleV9OBao8usZShckZyprJp0S376JG9W/ipG2FvF583ipR+Ulf
sEFD14o8OhoGa2E82WIr+sVjKM0tlJh0ncJGqd9aFAk23LEDcAAACBAN+sdj81xrcRXWob
EfqJGeXHHtiHgrtFBIzGnduthLCUJn97IrnSV0Tj+0AE6o1CKrko4ZuOFjMuGpFfN62sjC
yw8w1MVMG7xAfkvJiRDbetPeRa8mfMXTKiBPi5Bx8NDW9ctXSDomv8ChP25b7CEh71imLk
......
-----END OPENSSH PRIVATE KEY-----

創建一個項目

image

image

image

image

image

image

image

image

image

//在本地查看拉取下來的代碼
[root@jenkins ~]# cd .jenkins/
[root@jenkins .jenkins]# ls
com.dabsquared.gitlabjenkins.connection.GitLabConnectionConfig.xml
com.dabsquared.gitlabjenkins.GitLabPushTrigger.xml
com.gitee.jenkins.connection.GiteeConnectionConfig.xml
com.gitee.jenkins.trigger.GiteePushTrigger.xml
config.xml
hudson.model.UpdateCenter.xml
hudson.plugins.git.GitTool.xml
identity.key.enc
jenkins.install.InstallUtil.lastExecVersion
jenkins.install.UpgradeWizard.state
jenkins.model.JenkinsLocationConfiguration.xml
jenkins.security.apitoken.ApiTokenPropertyConfiguration.xml
jenkins.security.QueueItemAuthenticatorConfiguration.xml
jenkins.security.UpdateSiteWarningsConfiguration.xml
jenkins.telemetry.Correlator.xml
jobs
logs
nodeMonitors.xml
nodes
org.jenkinsci.plugins.workflow.flow.FlowExecutionList.xml
plugins
queue.xml
queue.xml.bak
secret.key
secret.key.not-so-secret
secrets
updates
userContent
users
workflow-libs
workspace
[root@jenkins .jenkins]# cd workspace/
[root@jenkins workspace]# ls
tomcat_demo
[root@jenkins workspace]# ls tomcat_demo/
db  Dockerfile  LICENSE  pom.xml  README.md  src
  • 開始打包
    image

image

pipeline {
    agent any
    
    stages {
        stage('pull code') {
            steps {
                git 'http://github.com/lizhenliang/tomcat-java-demo.git'
            }
        }

        stage('package') {
            steps {
                sh """
                mvn clean
                mvn package
                """
            }
        }
        
        
    }
}
  • 看到下面內容表示拉取完成
    image

  • 給客戶機做免密認證

[root@Jenkins ~]# ssh-keygen -t rsa
[root@Jenkins ~]# ssh-copy-id root@192.168.23.144
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.23.144's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.23.144'"
and check to make sure that only the key(s) you wanted were added.
yc
//關閉防火牆與selinux0
setenforce 0
systemctl disable  --now firewalld

image

//圖中完整代碼為
pipeline {
    agent any
    
    stages {
        stage('pull code') {
            steps {
                git 'http://github.com/lizhenliang/tomcat-java-demo.git'
            }
        }
        stage('package') {
            steps {
                sh """
                mvn clean
                mvn package
                """
            }
        }
        stage('deploy') {
            steps {
                sh """
                scp target/ly-simple-tomcat-0.0.1-SNAPSHOT.war root@192.168.23.144:/usr/src/tomcat/webapps/
                ssh root@192.168.23.144 '/usr/src/tomcat/bin/catalina.sh stop && /usr/src/tomcat/bin/catalina.sh start'
                """
            }
        }
    }
}
  • 看到與下圖內容相同則成功
    image

  • 瀏覽器訪問yc的ip看到下圖內容則成功
    image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM