Dockerfile:關于Dockerfile的使用說明,我在文章《讓.NetCore程式跑在任何有docker的地方》中有說到,這裡不在贅述,需要的可以先看下,本文主要介紹Jenkinsfile結合dockerfile配合使用,自動建構.NetCore應用程式。
Jenkinsfile :Jenkinsfile 是 Jenkins 2.x 或更高版本核心特性 Pipeline(流水線) 的腳本,或者說對于Jenkins 流水線的定義被寫在一個叫Jenkinsfile的文本檔案中,該檔案可以被送出到項目的源代碼的控制倉庫。這是"流水線即代碼"的基礎; 将CD 流水線作為應用程式的一部分,像其他代碼一樣進行版本化和審查。 建立 `Jenkinsfile`并送出它到源代碼控制中提供了以下幾個好處:
自動地為所有分支建立流水線建構過程并拉取請求。
在流水線上代碼複查/疊代 (以及剩餘的源代碼)。
對流水線進行審計跟蹤。
該流水線的真正的源代碼 , 可以被項目的多個成員檢視和編輯。
Jenkinsfile 能使用兩種文法進行編寫,分别是“聲明式”和“腳本化”,二者文法都是 DSL(Domain-specific language) 語言,二者文法差不多,下面我們具體看下
工欲善其事,必先利其器
Jenkins的安裝可以看我之前的一篇文章:https://www.cnblogs.com/peyshine/p/12891935.html
Gitlab的安裝推薦看下這篇文章:https://segmentfault.com/a/1190000021593151
1.這裡先建立一個.net core應用程式,除了新增加了一個Jenkinsfile檔案以外,其他沒有任何代碼的修改

注意,Jenkinsfile的J需要大寫,我測試了,小寫會提示找不到檔案.
Jenkinsfile中添加了幾行測試代碼:
然後将程式檔案push到Gitlab上
2.在Jenkins系統管理,系統配置中,在Gitlab處添加相關資訊
下面點選添加憑據,類型選擇GitLab Api Token,由于這個Token需要由GitLab來提供,是以先到GitLab生成一個Api Token
3.生成Api Token
點選建立之後,Token就生效了
将Api Token複制到Jenkins中,點選添加
添加完成後,就可以在Credentials中選擇剛剛添加好的憑據
點選儲存,這樣系統配置中的Gitlab的全局配置就生效了
4.建立流水線任務測試
下面打開Jenkins,建立一個流水線釋出任務,取名test,然後點選确定.
勾選建構觸發器
由于我們需要達到的目的是在GitLab送出代碼,Jenkins可以自動建構相關任務,是以我們還需要配置一個觸發器。如圖,點選下面的"進階"按鈕
點選“Generate”,生成一個SecretToken
然後再流水線Tab定義處,下拉選擇“Pipeline script from SCM”,SCM選擇Git,然後填寫代碼庫的位址和通路使用者密碼,下面腳本路徑有個Jenkinsfile,意思就是從我們送出到源代碼管理根目錄下面的Jenkinsfile中讀取相關定義好的的流水線任務流程
點選儲存
在Gitlab如下圖地方進入,來配置web鈎子
将在Jenkin中截圖的一個url和生成的token分别填寫在下方,在觸發器的地方勾選上 Push events,然後點選下方的“Add webhook” 按鈕。如果你還有其他事件發生時想觸發Jenkins的任務,也可以自行勾選上
添加完成後點選測試
這個時候可以看到上方出現了成功的提示
而另一邊Jenkins中,正在執行任務,并且任務的執行是 GitLab有推送任務
完成之後,可以看到流水線任務流程圖
下面通過代碼推送來測一下,我在跟目錄建立一個空的README.md檔案,然後推送,推送完成後可以看到Jenkins開始執行第二次建構任務
至此,從GitLab送出代碼到Jenkins自動建構的整個流程已經完成了,細心的你會發現,隻是流程跑通了,這個Jenkinsfile沒有實質性的内容,下面進入Jenkinsfile
編寫Dockerfile如下:
編寫Jenkinsfile如下:
說明:
stages 必須,包括順序執行的一個或多個stage指令,在pipeline内僅能使用一次,通常位于agent/options後面
steps 必須,steps位于stage指令塊内部,包括一個或多個step。僅有一個step的情況下可以忽略關鍵字step及其{}
這裡為了示範,隻添加了幾個核心的步驟,可以根據需要自行添加自動測試,郵件提醒等額外步驟
流水線文法,可以參照下圖中的示例步驟點選後,可以生成腳本資訊,上面Jenkinsfile中的git credentialsId資訊就是在這裡生成的
完成之後,将Jenkinsfile和Dockerfile推送到Gitlab,推送成功可以看到如下圖的Jenkins自動建構過程,并且遵照定義規範釋出了應用
如果需要檢視日志,或者在釋出失敗後檢視失敗原因,可以通過下面的 Console Output來檢視
Console Output中的詳細日志資訊如下圖,可以看到建構過程是遵循在Dockerfile中的定義
docker 容器運作狀态檢查
自動部署效果截圖
五.結束總結
在定義web鈎子的時候,我勾選的是push events,是以每次有送出代碼到master,都會自動去走Jenkinsfile中的流水線任務,在實際生産中,如果不想這樣操作,可以将持續內建流水線與持續釋出流水線獨立開來
其實隻需要前期一次将Jenkins和Gitlab觸發器打通之後,後面隻需要在源代碼中維護Dockerfile和Jenkinsfile即可,這是比較優雅的一種CI、CD方式,動手試試吧!