一篇通俗易通的 Jenkins 入門指南

2022-01-10 DevOps時代

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

開發

提交

編譯

測試

發布

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

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

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

安裝

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

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
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

然後創建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頁面上完成

設置Slave

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

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

設置Master到Node間的授信方式

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

創建Pipeline

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

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

用戶將代碼提交到git

Jenkins從git拉取最新代碼

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

下面是具體的配置步驟

編寫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倉庫的根目錄。

創建pipeline

回到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!

作者:程式設計師在深圳
連結:https://www.jianshu.com/p/b524b151d35f
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

7月4日,Jenkins X 實戰工作坊,原廠培訓,點擊連結了解更多:

官方大師親自授課、Jenkins X 實戰工作坊招收弟子

點擊閱讀原文,立即訂票

相關焦點

  • Jenkins Kubernetes操作器成為Jenkins官方子項目!
    這裡有入門指南[8]。關於作者Bartek Antoniak雲原生世界的工程經理,管理中型跨職能團隊,並在 VirtusLab 中負責雲相關計劃。https://github.com/SylwiaBrant參考資料[1]Jenkins 操作器: https://www.jenkins.io/projects/jenkins-operator/[2]VirtusLab: http://virtuslab.com/[3]雲原生 SIG 會議: https://www.jenkins.io/sigs/cloud-native
  • Jenkins 憑證管理 - 看這一篇就夠了~
    在Jenkins中添加/配置credentials,Pipeline項目就可以使用 credentials 與三方應用交互Credential 類型參考: https://jenkins.io/zh/doc/book/using/using-credentials/Jenkins可以存儲以下類型的
  • 一個本地快速搭建 Jenkins 的方法
    Docker Desktop[1]這個工具就不多介紹,之前一篇文章「如何快速搭建一個本地的 Kubernetes 環境?」也是依賴這個工具。2.工具打包首先需要基於官方 LTS 鏡像製作包含上面插件的鏡像FROM jenkins/jenkins:2.319.1-ltsENV JENKINS_SLAVE_AGENT_PORT 50000RUN jenkins-plugin-cli --verbose
  • 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詳細教程
    /configure --prefix=/usr/localmakesudo make installgit --version4、Jenkins官網地址:https://pkg.jenkins.io/redhat-stable/安裝
  • Jenkins連接k8s的多種姿勢
    C、D用作不同業務線集群因此,我們可以將不同環境定義為如下兩種情況:同集群:指k8s集群內部的jenkins連接本集群跨集群:指外部的jenkins連接k8s集群,或者是jenkins連接外部的k8s集群2、同集群同集群下,
  • 使用Kubernetes-Jenkins實現CI/CD
    如果你想在本地機器上試用它,我建議你試試Minikube,這裡有快速安裝指南:確認你的kubectl已經安裝完成,參考文檔確認已經下載完依賴的組件,參考先決條件下載、安裝MinikubeCarlossg在使用Jenkins和Kubernetes的方面做了驚人的工作,他為Jenkins創建了一個特棒Kubernetes插件,使用這個插件,你可以很容易地直接使用
  • 讓我們慶祝 Jenkins 對 Java 11 的支持
    ## 指南為了簡單起見,以下是使用 Docker 鏡像在 Java 11上啟動 Jenkins 的方法。您可以通過為鏡像的標籤添加後綴來選擇基於 Java 11的鏡像-jdk11。如果要升級現有實例,請在升級之前閱讀 Jenkins Java 版本升級從8到11。
  • jenkins詳細介紹
    一、jenkins是什麼?  Jenkins是一個開源的、提供友好操作界面的持續集成(CI)工具,起源於Hudson(Hudson是商用的),主要用於持續、自動的構建/測試軟體項目、監控外部任務的運行。Jenkins用Java語言編寫,可在Tomcat等流行的servlet容器中運行,也可獨立運行。通常與版本管理工具(SCM)、構建工具結合使用。
  • 乾貨 | Jenkins使用簡易教程
    設置允許開機啟動$ sudo chkconfig jenkins on確保系統中有一個jenkins帳戶,如果沒有則需要創建,理論上安裝了Jenkins後,會自動創建該用戶。然後創建ssh密鑰,密鑰被用來在多個節點中進行免密訪問,同時幫助打通git數據通道。
  • Docker+Jenkins+Github實現Golang項目自動部署
    服務拉取github上的項目構建golang項目並生成docker鏡像[jenkins調用的是宿主機上的docker環境,如何調用的,後面會說明]啟動golang項目的docker鏡像docker的安裝這裡就不說了
  • 基於 Kubernetes 構建企業 Jenkins 持續集成平臺
    : terminationGracePeriodSeconds: 10 serviceAccount: jenkins2 containers: - name: jenkins image: jenkins/jenkins:lts imagePullPolicy: IfNotPresent ports:
  • Docker+jenkins小知識,講解通俗易懂,有必要收藏
    有些人可能會想,持續構建很熟悉基本上也就是基於jenkins,沒錯jenkins確實是目前持續集成中最為流程也比較常見的一種解決方案,不過我們今天並不是僅僅單純地講jenkins,而是想再引入另外一個比較新穎也比較火的概念,也就是docker,對於熱點概念比較熟悉的朋友對docker並不陌生,這幾乎是近期最熱點的一門技術之一。
  • 手把手教你利用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
  • Jenkins持續集成體系 | 最完整的介紹及資料
    jenkins可以很好的支持各種語言(比如:java, c#, php等)的項目構建,也完全兼容ant、maven、gradle等多種第三方構建工具,同時跟svn、git能無縫集成,也支持直接與知名原始碼託管網站,比如github、bitbucket直接集成。簡單點說,Jenkins其實就是大的框架集,可以整個任何你想整合的內容,實現公司的整個持續集成體系!
  • 基於k8s部署cicd之新建jenkins任務、編寫shell命令(5)
    2、對k8s有較熟練的認識3、對rancher 有過使用經驗,基礎操作要懂4、對ci/cd 的概念不陌生5、對golang的基礎有較熟悉6、知道jenkins的最基本使用7、知道git的基本使用,對gitlab、gitea 有基本了解在 基於k8s部署cicd之利用rancher快速部署jenkins
  • CVE-2019-10392:Jenkins Git client插件RCE復現
    ----本文作者:PaperPen本文共836字,閱讀大約需要3分鐘0x00 簡介Jenkins是一個開源軟體項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工作,旨在提供一個開放易用的軟體平臺,使軟體的持續集成變成可能
  • Jenkins 多環境 CI/CD 架構設計
    >另外:也可以根據需要加入gitlab自動觸發構建、自動化測試、釘釘通知、郵箱通知等需求最終效果圖一鍵發布一鍵回滾Jenkins相關目錄設計----jenkins-exjenkins構建時使用到的目錄------software Jenkins安裝目錄--------master--------slave------backup jenkins備份目錄--------master
  • 《彩虹六號:圍攻》大盾新手入門指南
    《彩虹六號:圍攻》中大盾(全盾)是個比較特殊的幹員,單挑能力並不強(除非能近到身),一般做為推進的作用,能夠強行進點或者為隊友構建掩體,是個十分吃戰術和配合的幹員,新手要怎麼玩好大盾呢,下面小編就為大家帶來一篇「魂斷白樓°」分享的大盾新手入門指南,一起來看看吧。
  • 機器學習入門指南(2021版)
    使用渠道:噹噹小程序或APP使用時間:10/20-10/24大家不知道囤什麼書,可以參考我之前寫的這篇機器學習入門指南這是為朋友社群準備的一篇機器學習入門指南pdf版思維導圖,後臺回覆:指南Python——書之前跟出版社合作,書櫃裡積攢了很多Python相關的書,這裡推薦三本最有價值的吧:《流暢的Python》,很厚,比較全面,可以作為工具書常常翻看。《 Python編程從入門到實踐(第2版)》 非常全面,對新手還算友好,裡面有很多的練習項目非常不錯。