要實現的目標 : 提交代碼到github的master分支後, 觸發webhook, jenkins從github上從新拉取代碼=>編譯=>打包成docker鏡像=>從新發布html
機器: centos 7.4linux
1. 安裝git,jenkins,docker-cegit
git能夠直接yum 安裝 : github
yum install git -y
也能夠安裝新版本 參考文章: https://linuxize.com/post/how-to-install-git-on-centos-7/web
jenkins 安裝參考文章 http://www.javashuo.com/article/p-vjyyfiqf-z.htmldocker
docker-ce 安裝參考官網: https://docs.docker.com/install/linux/docker-ce/centos/shell
2. 新建一個net core demo上傳到githubcentos
新建時候點擊啓用docker支持,會生成一個Dockerfile的docker文件 api
把這個Dockerfile移動到 解決方案(.sln)同目錄服務器
這個Dockerfile基本就是把當前目錄的文件拷貝到aspnetcore-build鏡像中,再裏面編譯好以後再發布到aspnetcore:3.1鏡像中,
最後指定運行你的dotnet core程序
建立完項目後 用desktop 建立一個倉庫 傳到github
3. 測試下dockerfile是否正常工做
#這個是jenkins默認的存放代碼位置 cd /var/lib/jenkins/workspace/; git clone https://github.com/bbenph/WebApplication1.git cd WebApplication1 image_version=`date +%Y%m%d%H%M`; echo $image_version; # 中止以前的docker container docker stop test || true; # 刪除這個container docker rm test || true; # build鏡像而且打上tag docker build -t test:$image_version .; docker images; # 把剛剛build出來的鏡像跑起來 docker run -p 8810:80 --restart=always --name test -d test:$image_version; docker logs test;
能夠看到 image container 都有了 程序也跑起來了
4. 配置jenkins拉取github代碼
經過上面這個dockfile腳本,咱們已經把dotnet core程序編譯好了,而且打包成了docker images,還直接跑起來了.
可是咱們想要的應該是自動化編譯部署,並且上面咱們都把jenkins跑起來了,因此….
jenkins job配置
新建Job
打開jenkins首頁,左側選擇」新建任務」(newJob) => Freestyle project
添加源碼倉庫
確認以後進入Job配置頁面, 先只配置 源碼管理和構建模塊
上面的shell腳本說明:
/var/lib/jenkins/workspace/ 是jenkins的默認工做路徑 後面的/test 是新建jenkins 任務的名稱
|| true 是即便這個container不存在 報錯也不影響下面shell腳本執行 由於有時候container不存在/沒運行 也是可能的
docker run 命令能夠 經過 docker run --help 查看各參數啥意思
點擊應用 => 保存
測試下jenkins配置是否正常
如今修改代碼,提交github 後 再次jenkins中的馬上構建 發現使用新的image從新建立了一個容器
修改的內容也看到了
5. 配置jenkins 代碼提交github master分支後 自動化編譯部署
參考 https://dzone.com/articles/adding-a-github-webhook-in-your-jenkins-pipeline
什麼是webhook?Webhook的概念很簡單。Webhook是HTTP回調,HTTP POST在經過HTTP POST經過簡單的事件通知發生某些狀況時發生。
每當開發人員向master分支提交某些內容時,便會使用Jenkins中的GitHub webhooks觸發構建。
讓咱們看看如何在GitHub中添加構建Webhook,而後在Jenkins中添加此Webhook。
5.1 github配置
sercret text
注:此處須要一個對項目有寫權限的帳戶
進入github --> setting --> Personal Access Token --> Generate new token
本身先保存此token
,若是丟失,以後再也沒法找到這個token
。
5.2 GitHub webhooks 設置
進入GitHub上指定的項目 --> setting --> WebHooks&Services --> add webhook --> 輸入剛剛部署jenkins的服務器的IP
PayloadURL 是咱們的Jenkins運行的URL,添加github-webhook告訴GitHub這是一個Webhook
github的webhook必定要是一個外網可訪問的url , github的服務器訪問不到你的內網ip地址的
[補充] 填寫jenkins公網ip:8080 並無生效, 用ngrok提供的免費域名 代理到 jenkins服務器 就能夠 緣由不明
若是是你本機沒有外網ip的話 能夠用下 https://www.ngrok.cc/ 外網映射到你內網
5.3 jenkins的github配置
安裝GitHub Plugin
系統管理-->插件管理-->可選插件
直接安裝Github Plugin, jenkins會自動幫你解決其餘插件的依賴,直接安裝該插件Jenkins會自動幫你安裝plain-credentials 、Git 、 credentials 、 github-api
這個在jenkins第一次進入的時候 選擇install suggested plugins 會默認安裝的
配置GitHub Plugin
系統管理 --> 系統設置 --> GitHub --> Add GitHub Sever
以下圖所示
API URL 輸入 https://api.github.com
,Credentials點擊Add添加,Kind選擇Secret Text,具體以下圖所示。
設置完成後,點擊TestConnection
,提示Credentials verified for user UUserName, rate limit: xxx
,則代表有效。
修改步驟4中建立的任務
每次push代碼後能夠看到有觸發webhook去調用接口