91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

jenkins持續集成--看我如何從1到代碼自動部署

發布時間:2020-10-22 17:37:48 來源:網絡 閱讀:3363 作者:菜鵝小生 欄目:系統運維

jenkins持續集成看我如何從1到代碼自動化部署

背景

近期由于工作原因需要學習jenkins持續化集成。對于一個好學又帥氣的我來說。學習他還不是手到擒來。公司為一個中小型創業公司,在部署代碼上面,很少用gitlab、jenkins等等,也沒有清晰的生產環境-測試環境-線上環境之分。唯一有的就是寫完代碼-登陸服務關閉服務,上傳代碼-開啟服務。這樣往往會到來很多問題,同時也會給程序員帶來很多繁瑣的工作。這不,公司內部整頓,需要一套清晰的流程,而且為了減輕程序員的負擔,于是就希望采用gitlab+jenkins來部署代碼。

需求

程序員通過提交代碼到gitlab上;觸發jenkins自動部署觸發器;部署到測試服務器,如果正常,提交到正式線上環境

環境介紹

Ubuntu18.04 :

          網絡:內網環境
          服務:gitlab環境

Ubuntu16.04:

          網絡:內網環境
          服務:jenkins

Centos 7 :

          網路:公網環境
          服務:php+nginx+mysql

公網環境為一個測試環境,這里沒有線上環境,引一個環境就可以,測試成功上線是同理的道理。

部署過程

為什么從1到自動化部署呢?是因為我不太想寫安裝部署的過程。過程非常簡單,沒有坑點和難點。稍稍百度一下就有很多。

前提條件:
1、你要有自己的gitlab賬號和自己的項目,當然用別人的項目也行,不過在后面設置一些權限信息的時候,可能會很麻煩別人。所以自己的才是最方便的。
2、你的公網服務器一定要能訪問到內網gitlab的項目,因為為了減少出錯,采用的是公網服務器pull gitlab的代碼。具體的我們后面聊。
3、有一個不怕困難的心,和帥氣的臉。

一、安裝相關插件

點擊系統管理-插件管理,通過搜索框即可下載你想要對插件。這個在剛初始化jenkins的時候也有一次安裝插件的步驟,盡量裝,使勁裝。根據自己的需求哈!

二、在jenkins上創建一個job

1、新建任務
jenkins持續集成--看我如何從1到代碼自動部署
2、輸入任務名稱-選擇-選擇流水線-確定
jenkins持續集成--看我如何從1到代碼自動部署
簡要介紹一下這幾個項目的優缺點

Freestyle Job
需在頁面添加模塊配置項與參數完成配置
每個Job只能實現一個功能
無法代碼化,不利于遷移與版本控制

流水線項目
所有參數都可以體現為一個pipeline腳本
可以定義多個stage構建一個管道工作集
配置代碼化,方便Job配置遷移與版本控制
腳本寫在Jenkins項目里

多分支流水線
優點同流水線
腳本寫在GitLab項目里(Jenkinsfile)

關于多分支的流水線,推薦博客https://blog.51cto.com/12639039/2352222

3、進入到job的配置界面-點擊構建觸發器
General不需要配置
因為需求是程序員向gitlab提交了新的代碼,jenkins觸發。所以在構建觸發器的時候選擇下面這個選項

jenkins持續集成--看我如何從1到代碼自動部署

這里請不要忽略Gitlab webhook URL:。這個webhook就是用來觸發jenkins自動構建的。

點擊高級,創建 Secret token

jenkins持續集成--看我如何從1到代碼自動部署
4、gitlab上添加步驟3 的webhook
jenkins持續集成--看我如何從1到代碼自動部署
在url處填寫webhook;Secret Token處填寫步驟三隨機生成的字符串。完成過,點擊添加即可。
jenkins持續集成--看我如何從1到代碼自動部署

在這里可以進行測試連通性。
注意到這里的時候,你可能會遇到一個問題:有些用戶添加的時候會報這樣一個錯誤,
jenkins持續集成--看我如何從1到代碼自動部署
說是不允許本地網絡請求。這是由于新版本安全性的問題造成的,非常容易解決!
解決方法:使用gitlab管理員賬戶登陸。
jenkins持續集成--看我如何從1到代碼自動部署
將那兩個全部勾選。然后回去重新添加即可。
5、編寫pipeline腳本
jenkins持續集成--看我如何從1到代碼自動部署
這里有兩個選擇,第一個是在這里直接寫入腳本(溫馨提示,腳本在自己電腦上的編輯器上寫好粘貼到這里,因為這里的編輯器像吃了翔一樣難用!太難了。。。)第二個是使用jenkinsfile文件。我使用了第一個(因為演示操作簡單,易懂!嘿嘿)。
寫完后點擊保存。即可完成一個job的創建

你以為這就完了。最重要的才剛剛開始!!!!!!!!!!!!!!!!!!!!!!!!!!!


三、pipeline script編寫

讓我們再來回顧一下需求:

程序員通過提交代碼到gitlab上;出發jenkins自動部署觸發器;部署到測試服務器,如果正常,提交到正式線上環境。不過,我覺得這個沒有任何挑戰性。我想自己加點難度,不管部署過程是否成功,都要有個釘釘消息發到程序員小哥哥的群里,給他們個警示!

話不多說,上代碼一點點解釋:
溫馨提示:這是我為了滿足自身需要而編寫的代碼,請不要照搬,當然與我有同樣需求的隨意嘍。同時中間的解釋也根據我的代碼去解釋,沒有刻意去講解語法,請諒解!

pipeline{
    agent any
    stages{
        stage("拉去代碼"){
            steps {
                echo "STEP 1 :clone code"
            }

        }
        stage("打包代碼"){
            steps {
                echo "step 2 : code package"
                sh label: '', script: '/usr/bin/ssh -p 62322 root@*.*.*.* "cd /var/www/html/pipeline/mytest && git pull && chmod -R 777 /var/www/html/pipeline/mytest/storage && composer install"'
            }
        }
        stage("上線發布"){
            steps {
                echo "step 3 :deploy package"
            }
        }
    }
    post {
        success {
            dingTalk accessToken:'釘釘機器人的token', 
            imageUrl:'圖片的url', 
            jenkinsUrl:'http://192.168.5.194:8080/', 
            message:'pipeline-test代碼部署成功。', 
            notifyPeople:''
        }
        failure {
            dingTalk accessToken:'釘釘機器人的token', 
            imageUrl:'圖片的url', 
            jenkinsUrl:'http://192.168.5.194:8080/', 
          message:'pipeline-test代碼部署失敗'。, 
          notifyPeople:''
        }
    }

}

詳解:

agent

          指示 Jenkins 為整個流水線分配一個執行器(在 Jenkins 環境中的任何可用代理/節點上)和工作區。

echo

          寫一個簡單的字符串到控制臺輸出。注意這里不是shell命令行的echo或php語法。和他們作用相同而已。

stage

          定義了在整個流水線的執行任務的概念性地不同的的子集(比如 "Build", "Test" 和 "Deploy" 階段), 它被許多插件用于可視化 或Jenkins流水線目前的 狀態/進展.

可能這句話不太形象(我第一次看官文也是蒙蔽),來張圖
jenkins持續集成--看我如何從1到代碼自動部署

其中最后一個是post處理的狀態。

在打包代碼的stage塊中

sh label: '', script: '/usr/bin/ssh  root@*.*.*.* "cd /var/www/html/pipeline/mytest && git pull && chmod -R 777 /var/www/html/pipeline/mytest/storage && composer install"'

這是通過jenkins的片段生成器生成的符合語法的命令,可以在shell中去執行的命令
那么,如何使用jenkins片段生成器?
(1)、點擊流水線語法
jenkins持續集成--看我如何從1到代碼自動部署

(2)、從實例步驟中選擇sh:shell script。在文本框輸入需要生成的shell命令,
jenkins持續集成--看我如何從1到代碼自動部署
(3)、點擊生成流水線腳本 按鈕即可成成相應的流水線語法

Post

類似于python中try語句。如何根據stage執行的結果而進行特定處理則是實際Pipeline使用中經常會碰到的問題。所以這里post就是來做對異常處理的功能。同時,你也可以理解為自由風格中的構建后的操作步驟(在自由風格中發釘釘可以下載dingding的插件)。而這個post塊,就是我要滿足自己加的釘釘反饋的需求。說到這里為了讓大家更明白post的使用方法想再多解釋一下:

使用限制:

需要寫在pipeline或者stage塊中
注意:post塊的位置一定要遵循這個原則,否則不會執行。

支持的條件預置:

always: 無論pipeline或者stage的執行結果如何,此塊中的預置操作都會執行。

changed:只有當pipeline或者stage的執行后,當前狀態與之前發生了改變時,此塊中的預置操作才會執行。

fixed:前一次運行為不穩定狀態或者失敗狀態,而且本次運行成功結束,這兩個條件同時滿足時,此塊中的預置操作才會執行。

regression: 本次運行狀態為不穩定狀態,失敗狀態或者是中止狀態,而且前一次運行成功結束,這兩個條件同時滿足時,此塊中的預置操作才會執行。

aborted:當前pipeline或者stage的狀態為aborted時,此塊中的預置操作才會執行。通常是由于流水線被手工中會導致此狀態產生,而產生此狀態后,通常在Jenkins的UI界面會顯示為灰色。

failure:當前pipeline或者stage的狀態為failed時,此塊中的預置操作才會執行。而產生此狀態后,通常在Jenkins的UI界面會顯示為紅色。

success:當前pipeline或者stage的狀態為success時,此塊中的預置操作才會執行。而產生此狀態后,通常在Jenkins的UI界面會顯示為綠色。

unstable: 當前pipeline或者stage的狀態為unstable時,此塊中的預置操作才會執行。通常情況下測試失敗或者代碼規約的違反都會導致此狀態產生,而產生此狀態后,通常在Jenkins的UI界面會顯示為黃色。

unsuccessful:當前pipeline或者stage的狀態不是success時,此塊中的預置操作才會執行。

cleanup:無論pipeline或者stage的狀態為何種狀態,在post中的其他的條件預置操作執行之后,此塊中的預置操作就會執行。

我用到了兩個,分別是success和failure,在成功時應該做什么操作,在失敗時應該做什么操作。

dingTalkaccessToken:'釘釘機器人的token', 如果不知道如何添加釘釘機器人,去隔壁百度即可
imageUrl:'在發送的信息里會附加這個圖片',
jenkinsUrl:'自己jenkins的訪問地址', 發送的信息就是這個鏈接,可以直接跳轉到我們的jenkins
message:'發送的文本信息、提示信息',
notifyPeople:'需要通知的人'

到這里我的腳本的大概情況也就介紹完畢。如果想了解詳細的jenkins語法,推薦學習地址
https://jenkins.io/zh/doc/book/pipeline/ 中文的,而且挺詳細。我這里寫的腳本僅僅是滿足我的個人需求,有類似需求的伙伴可以參考!

再來一個溫馨提示:初學者一定注意好代碼塊的書寫,盡量做到規范,因為這樣才好容易排錯。 Groovy 語法大都代碼塊可能因為一個花括號就能找個半天。所以盡量規范。如果有 Groovy 語法高亮的編輯器就更好了。

四、測試job運行情況
點擊立即構建
jenkins持續集成--看我如何從1到代碼自動部署

執行完畢后,通過控制臺輸出可以看到整個過程

jenkins持續集成--看我如何從1到代碼自動部署
釘釘消息
jenkins持續集成--看我如何從1到代碼自動部署

到此便大功告成,讓你們的程序員小哥哥去推代碼試試吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榆树市| 天水市| 蒲城县| 黎平县| 洛扎县| 寿阳县| 谢通门县| 西平县| 永城市| 泽州县| 商河县| 万全县| 石门县| 怀仁县| 三门县| 柳州市| 卢龙县| 沅江市| 仁布县| 达孜县| 津市市| 康乐县| 西吉县| 安康市| 甘肃省| 那曲县| 清水县| 元朗区| 靖远县| 安多县| 吉水县| 宿松县| 平谷区| 宁蒗| 吉隆县| 陆丰市| 栖霞市| 容城县| 林州市| 铁力市| 芦山县|