乾貨 | Jenkins使用簡易教程

2022-01-10 小黑格子屋

作者:馮雅傑

來源:簡書

是的,這篇文章是來給大家普及Jenkins知識的。下面我們先來了解一下它。

Jenkins是一個廣泛用於持續構建的可視化Web工具,持續構建說得更直白點,就是各種項目的"自動化"編譯、打包、分發部署。

Jenkins可以很好的支持各種語言(比如:Java,C#,PHP等)的項目構建,也完全兼容ant、maven、gradle等多種第三方構建工具,同時跟SVN、Git能無縫集成。

也支持直接與知名原始碼託管網站,比如GitHub、Bitbucket直接集成。

簡單點說,

Jenkins其實就是一個框架集,可以整合任何你想整合的內容,實現公司的整個持續集成體系!

如:自動化,性能,打包,部署,發布&發布結果自動化驗證,接口測試,單元測試,每日構建,等等.

各種你能想到的,和不能想到的,都可以。

Jenkins可自由部署在各平臺:

Windows, Linux, Mac

Jenkins是一款能提高效率的軟體,它能幫你把軟體開發過程形成工作流,典型的工作流包括以下幾個步驟

開發

提交

編譯

測試

發布

有了Jenkins的幫助,在這5步中,除了第1步,後續的4步都是自動化完成的,具體的,當你完成了提交,Jenkins會自動運行你的編譯腳本,編譯成功後,再運行你的測試腳本,這一步成功後,接著它會幫你把新程序發布出去,特別的,在最後一步,你可以選擇手動發布,或自動發布,畢竟發布這件事情,還是需要人為的確認一下比較好。

簡而言之,Jenkins可以幫你在寫完代碼後,一鍵完成開發過程中的一系列工作。

使用Jenkins的好處顯而易見,它減少了你的重複勞動。更重要的是,一個團隊的開發流程一開始是不一致的,不一致往往會帶來各種各樣的問題,最終體現在軟體的質量或開發效率不夠高,而Jenkins會幫你規範大家的行為,從而避免一系列的問題。

Jenkins安裝非常簡單,以CentOS為例,執行以下命令即可

sudo wget -O /etc/yum.repos.d/jenkins.repo http:
sudo rpm --import https:
sudo yum -y install jenkins

值得注意的是,如果你的作業系統是CentOS,且運行的是GCJ版本的Java,則需要做一下更新

$ java -version
java version "1.5.0"
gij (GNU libgcj) version 4.4.6 20110731 (Red Hat 4.4.6-3)
$ sudo yum remove java
$ sudo yum install -y java-1.7.0-openjdk
$ java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (rhel-2.5.5.1.el6_6-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

如果你的Jenkins使用Git作為數據傳輸的管道,那麼的所有Jenkins節點都要安裝Git

$ sudo yum install -y git

設置Git帳戶

$ git config --global user.name "yourname"
$ git config --global user.email "yourmail"

安裝成功後,配置文件在/etc/sysconfig/jenkins下,默認埠為8080,你需要設置一下防火牆,讓該埠可以被外部訪問到。

設置允許開機啟動

$ sudo chkconfig jenkins on

確保系統中有一個jenkins帳戶,如果沒有則需要創建,理論上安裝了Jenkins後,會自動創建該用戶。

然後創建ssh密鑰,密鑰被用來在多個節點中進行免密訪問,同時幫助打通git數據通道。在這之前要確認jenkins用戶的home目錄是否有效(在下面的例子中home是/var/bin/jenkins),並切換到jenkins用戶下

$ grep jenkins /etc/passwd
jenkins:x:496:496:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/bash
$ su jenkins
$ cd ~
$ pwd
/var/lib/jenkins

創建非對稱密鑰,執行ssh-keygen命令,並一路回車

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/fengyajie/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/fengyajie/.ssh/id_rsa.
Your public key has been saved in /home/fengyajie/.ssh/id_rsa.pub.
The key fingerprint is:
The key's randomart image is:
+--[ RSA 2048]----+
|        ....   +=|
|        ... |
|         . ...o +|
|          E. . *.|
|        S  .= +  |
|         . o + . |
|          . o o  |
|             o o |
|              o  |
+--+
$ ls ~/.ssh/
id_rsa  id_rsa.pub  known_hosts

Jenkins是一個Master-Slave的架構,它可以把任務發布到不同的節點上執行,典型的應用場景是你有2個運行環境,一個是測試環境,一個是生產環境,你可以指定工作流中,哪些任務在測試環境中執行,哪些任務在生產環境中執行。當然,如果你沒有這樣的需求,也可以不配置Slave,這篇文章討論的是有Slave的情況。

如果你需要配置Slave,在Slave節點上創建一個jenkins用戶,並建立Master和Slave的授信關係(你需要將下面的host替換為具體的伺服器IP,注意一定要保證Master和Slave之間是內網通信的,否則公網環境延遲較大,經常會出現Slave掉線情況)

ssh jenkins@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub


同時,為了讓jenkins可以執行更高權限的命令,所有節點都需要把jenkins用戶設置為sudo用戶。當然,我這是為了偷懶,更好的辦法是設置一個專門的用戶組,讓這個組有一定的權限,然後把jenkins加入到這個用戶組。

$ sudo grep jenkins /etc/sudoers
jenkins          ALL=(ALL)   NOPASSWD: ALL

以上為全部終端的配置,剩下操作基本都在Jenkins提供的Web頁面上完成。

打開Jenkins頁面http://hostname:8080,進入管理頁面,點擊New Node

配置Node,Labels是環境設置,例如開發環境,測試環境,編譯環境等,後續可以根據Lables值,指定具體的任務在某個環境中執行

設置Master到Node間的授信方式

成功後,可以在控制臺看到新增的Node

基本環境搭建好後,我們來配置一個工作流親自感受一下。

工作流在Jenkins中被稱為pipeline,pipeline的運行行為由用戶自己定義,定義的內容存放在一個Jenkinsfile文件中,並將該文件存放在git倉庫的根目錄,大致的流程如下:

用戶將代碼提交到git

Jenkins從git拉取最新代碼

讀取根目錄下的Jenkinsfile文件,並依次執行文件中定義的任務

下面是具體的配置步驟

pipeline {
   agent {
       label 'Production'
   }
   stages {
       stage('Build') {            
           steps {                
               echo 'Building'            
           }        
       }        
       stage('Test') {            
           steps {                
               echo 'Testing'            
           }        
       }
       stage('Deploy - Staging') {            
           steps {                
               sh './deploy staging'                
               sh './run-smoke-tests'            
           }        
       }        
       stage('Sanity check') {            
           steps {                
               input "Does the staging environment look ok?"            
           }        
       }        
       stage('Deploy - Production') {            
           steps {                
               sh './deploy production'            
           }        
       }    
   }

   post {        
       always {            
           echo 'One way or another, I have finished'            
           deleteDir() /* clean up our workspace */        
       }        
       success {            
           echo 'I succeeeded!'        
       }        
       unstable {            
           echo 'I am unstable :/'        
       }        
       failure {            
           echo 'I failed :('        
       }        
       changed {            
           echo 'Things were different before...'        
       }    
   }
}

以上是一個基本的Jenkinsfile模板,其中有以下幾個關鍵概念

agent - 指定在哪臺機器上執行任務,還記得上面配置Node時候填的Label嗎,如果這兩個label匹配得上,就在該Node中執行

stage - 組成工作流的大的步驟,這些步驟是串行的,例如build,test,deploy等

steps - 描述stage中的小步驟,同一個stage中的steps可以並行

sh - 執行shell命令

input - 需要你手動點擊確定,pipeline才會進入後續環節,常用於部署環節,因為很多時候部署都需要人為的進行一些確認

post - 所有pipeline執行完成後,會進入post環節,該環節一般做一些清理工作,同時還可以判斷pipeline的執行狀態

了解了這些後,你會發現寫一個Jenkinsfile是一件很容易的事情。好了,現在要測試pipeline功能,把上面的代碼中的sh換成echo,拷貝到你的Jenkinsfile中,並存放在git倉庫的根目錄。

回到Jenkins web頁面,添加pipeline

如果你想每次git commit時自動執行該pipeline,有兩種方法,一種是讓Jenkins對git進行輪詢,每分鐘檢查git倉庫有沒有更新,如下配置:

另一種方式是使用git提供的hook,該方式原理是git一旦提交,便會觸發hook中的腳本,讓腳本給Jenkins發送執行pipeline的指令,這種方式更優雅,但相應要做的事情更多一點,這裡就不演示這種方法了,感興趣的同學可以自己研究一下。

最後,我們需要設置git的地址,其中的授信設置,和上面說的Master到Node的授信設置一致


設置完畢後,一旦你的git倉庫收到新的提交,就會觸發這個pipeline的運行,以下這張圖是上面Jenkinsfile例子的運行狀態,可以看到當運行到Sanity check這一步時,需要你手動觸發是否執行後面的操作。

最後總結一下,這篇教程主要講述了以下幾個方面:

Jenkins是什麼,及它的應用場景舉例

如何搭建一個Jenkins服務

Jenkins Pileline是什麼,我們如何定義一個Pipeline

如何具體的操作一個Pipeline

Have fun!

END

 長按左側二維碼關注

 微信ID:xhmsvip

 小黑QQ1:275326202(已滿)

 小黑QQ2:3251175005

 QQ群:252568026

 小黑微博:小黑黑的格子屋

 ☟ 點個    讓本黑知道你來過~

相關焦點

  • Jenkins詳細教程
    通常與版本管理工具(SCM)、構建工具結合使用。常用的版本控制工具有SVN、GIT,構建工具有Maven、Ant、Gradle。二、CI/CD是什麼?CI(Continuous integration,中文意思是持續集成)是一種軟體開發時間。持續集成強調開發人員提交了新代碼之後,立刻進行構建、(單元)測試。根據測試結果,我們可以確定新代碼和原有代碼能否正確地集成在一起。
  • 一篇通俗易通的 Jenkins 入門指南
    簡而言之,Jenkins可以幫你在寫完代碼後,一鍵完成開發過程中的一系列工作使用Jenkins的好處顯而易見,它減少了你的重複勞動。更重要的是,一個團隊的開發流程一開始是不一致的,不一致往往會帶來各種各樣的問題,最終體現在軟體的質量或開發效率不夠高,而Jenkins會幫你規範大家的行為,從而避免一系列的問題。
  • Jenkins 多環境 CI/CD 架構設計
    支持多分支、多環境、多項目、多套配置文件、多程式語言支持一鍵構建、集群發布支持一鍵回滾歷史版本快捷配置添加新的部署項目支持多個項目使用同一個>另外:也可以根據需要加入gitlab自動觸發構建、自動化測試、釘釘通知、郵箱通知等需求最終效果圖一鍵發布一鍵回滾Jenkins相關目錄設計----jenkins-ex
  • Jenkins持續集成體系 | 最完整的介紹及資料
    如:自動化,性能,打包,部署,發布&發布結果自動化驗證,接口測試,單元測試各種你能想到的,和不能想到的Jenkins可自由部署在各平臺:Windows, Linux, Mac如下簡單列幾個應用場景:使用Jenkins搭建iOS/Android
  • 基於 Kubernetes 構建企業 Jenkins 持續集成平臺
    namespace: kube-opsroleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: jenkins2subjects: - kind: ServiceAccount name: jenkins2 namespace: kube-ops因為默認的鏡像使用的是 jenkins 這個用戶
  • Jenkins插件-常用
    A、通用插件1、Embeddable Build Status Icon 連結:https://ci.jenkins-ci.org/job/lib-jira-api/badge/ | https://wiki.jenkins-ci.org/display/JENKINS/Embeddable
  • jenkins詳細介紹
    一、jenkins是什麼?  Jenkins是一個開源的、提供友好操作界面的持續集成(CI)工具,起源於Hudson(Hudson是商用的),主要用於持續、自動的構建/測試軟體項目、監控外部任務的運行。Jenkins用Java語言編寫,可在Tomcat等流行的servlet容器中運行,也可獨立運行。通常與版本管理工具(SCM)、構建工具結合使用。
  • 一個本地快速搭建 Jenkins 的方法
    但在現實使用過程中,需要把整理好的代碼工程通過構建發布平臺統一管理,這時就需要測試各種配置、工具和插件。今天運維小識堂就分享一個本地快速搭建 Jenkins 的方法。工具介紹現在容器當道,我們的搭建方法也是採用容器的方式搭建。本地容器搭建需要準備以下兩個工具:1.
  • Jenkins 憑證管理 - 看這一篇就夠了~
    在Jenkins中添加/配置credentials,Pipeline項目就可以使用 credentials 與三方應用交互Credential 類型參考: https://jenkins.io/zh/doc/book/using/using-credentials/Jenkins可以存儲以下類型的
  • 簡易床墊手工製作教程
    簡易床墊手工製作教程花了很多錢買的床墊,又重又不舒服,還可能與自己的床大小不一,非常苦惱,洗起來更是困難。現在不用擔心啦,今天教你自己製作簡易床墊,舒服實用,更可以隨意搭配自己喜歡的顏色,洗起來很便利,而且也可以帶到戶外!1.首先,買幾個枕頭套。
  • Docker+jenkins小知識,講解通俗易懂,有必要收藏
    有些人可能會想,持續構建很熟悉基本上也就是基於jenkins,沒錯jenkins確實是目前持續集成中最為流程也比較常見的一種解決方案,不過我們今天並不是僅僅單純地講jenkins,而是想再引入另外一個比較新穎也比較火的概念,也就是docker,對於熱點概念比較熟悉的朋友對docker並不陌生,這幾乎是近期最熱點的一門技術之一。
  • 乾貨素材丨肌理插畫教程及素材合集
    本期獨家欄目為【乾貨素材】,欄目會推出一系列的設計類專業必備專業繪圖素材,幫助大家更快的掌握作圖技巧,提升自己的作圖能力與審美水平~今天為大家帶來的內容是肌理插畫教程及素材合集!快速了解肌理插畫插畫風圖紙相比於寫實性圖紙更具藝術性和抽象性在操作上也更為簡易
  • CVE-2019-10392:Jenkins Git client插件RCE復現
    ----本文作者:PaperPen本文共836字,閱讀大約需要3分鐘0x00 簡介Jenkins是一個開源軟體項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工作,旨在提供一個開放易用的軟體平臺,使軟體的持續集成變成可能
  • Docker+Jenkins+Github實現Golang項目自動部署
    服務拉取github上的項目構建golang項目並生成docker鏡像[jenkins調用的是宿主機上的docker環境,如何調用的,後面會說明]啟動golang項目的docker鏡像docker的安裝這裡就不說了
  • 文獻管理工具Mendeley:簡易使用教程
    百度學術使用文獻管理工具這裡就是本文的重點了,使用文獻管理工具可以幫助科研狗們快速整理自己的參考文獻(何謂簡易教程,就是從入門到熟練只需要1-2天。本人只折騰了半天就搞定了~)。回到已安裝的頁面,選中想要使用的格式,右鍵點擊,然後選擇Edit Style
  • 手把手教你利用Docker+jenkins部署你的網站
    中文版docker pull jenkinszh/jenkins-zh這裡選擇的是中文的鏡像創建存儲目錄並授權(很重要)mkdir /home/jenkins_homechown -R 1000 /home/jenkins_homechmod 777 /var/run/docker.sock參考連結:https://www.jianshu.com/p/db58d1cfd01b
  • 真三國無雙7 with 猛將傳 dds轉換data簡易圖文教程
    《真三國無雙7 with 猛將傳》dds轉換data簡易圖文教程。真三國無雙7dds轉化為data的簡易方法教程。—更多精彩遊戲攻略和相關資訊盡在3DMGAME!《真三國無雙7 with 猛將傳》dds轉換data簡易圖文教程。
  • 簡易微積分教程(二)
    一個物理老師為什麼要寫微積分教程?能問出這個問題的人本身就是外行!只需要簡單的查閱一下牛頓老爵爺的生平就能知道,沒有微積分的理論支撐,物理簡直寸步難行。在此安利一本書,去年夏天看過後令我受益匪淺。書名為《機械宇宙——艾薩克·牛頓、皇家學會與現代世界的誕生》,詳細的介紹了現代人的精神世界是如何從蒙昧的中世紀走出來的。
  • ggplot2簡易教程
    3 常用圖形在文章《R基本畫圖教程》介紹了工作中的常用圖形。現在用ggplot()實現柱狀圖、直方圖和盒箱圖。ggplot2簡易教程介紹ggplot()函數使用、圖像常用裝飾和常用圖形的實現。
  • Jenkins 2019 年 Board 和 Officer positions 選舉更新
    如果符合條件,您將在註冊的 jenkins.io 電子郵件地址中收到一封電子郵件。該郵件來自 elections@jenkins.io,標題為 2019 Jenkins Election - Invitation to Participate。