jenkins+docker 持續集成

引言

面對愈來愈多的微服務,愈來愈頻繁的版本發佈,上週末在家倒騰了jenkins+docker的持續集成和持續交付。git

==實現了push tag 到git服務器後坐等新版本發佈的郵件通知==,她會自動觸發工程構建和版本發佈,那叫一個爽歪歪啊省心、省力。github

下面來和你們的一塊兒分享一下個人實踐過程。web

持續集成原理

持續集成, 簡稱CI(continuous integration).docker

  • CI做爲敏捷開發重要的一步,其目的在於讓產品快速迭代的同時,儘量保持高質量.
  • CI一種能夠增長項目可見性,下降項目失敗風險的開發實踐。其每一次代碼更新,都要經過自動化測試來檢測代碼和功能的正確性,只有經過自動測試的代碼才能進行後續的交付和部署.
  • CI 是團隊成員間(產研測)更好地協調工做,更好的適應敏捷迭代開發,自動完成減小人工干預,保證每一個時間點上團隊成員提交的代碼都能成功集成的,能夠很好的用於對各類WEB、APP項目的打包.

Jenkins數據庫

Jenkins 是一個用Java編寫的開源的持續集成工具,提供了軟件開發的持續集成服務,可監控並觸發持續重複的工做,具備開源,支持多平臺和插件擴展,安裝簡單,界面化管理等特色。vim

附網上jenkins持續交付流程圖 瀏覽器

image

持續集成,持續交付各個階段所使用的一些典型工具的使用,以及在各個階段中的相關團隊的相關活動,如下圖爲典型的DevOps相關的活動安全

image

jenkins和docker私有倉庫registry環境安裝

請先安裝好docker 配置好docker加速(你懂的!),沒有玩過的同窗請先百度。bash

jenkins安裝

docker 安裝jenkins很是方便執行下面的腳本就OK了服務器

docker run --name devops-jenkins --user=root -p 8080:8080 -p 50000:50000 -v /opt/data/jenkins_home:/var/jenkins_home -d jenkins/jenkins:lts
複製代碼

須要更多定製參數你能夠參考 https://github.com/jenkinsci/docker

registry安裝

docker run --name devops-registry -p 5000:5000 -v /opt/devdata/registry:/var/lib/registry -d registry
複製代碼

jenkins配置

初始化jenkins及安裝插件

啓動完jenkins後經過瀏覽器輸入地址http://部署jenkins主機IP:端口

image
根據提示從輸入administrator password 或者能夠經過啓動日誌

docker logs devops-jenkins
複製代碼

查看這個password 如:

image

選擇安裝插件方式,這裏我是默認第一個

image

進入插件安裝界面,連網等待插件安裝

image

安裝完插件後,進入建立管理員界面

image

輸入完管理員帳號後,點擊continue as admin 進入管理界面點擊系統管理-插件管理中安裝docker構建插件和角色管理插件

image

安裝docker構建插件,在可選插件中查找docker build step plugin

image

安裝角色管理插件,在可選插件中查找Role-based Authorization Strategy

image

安裝SSH插件,用於構建成功後執行遠端服務器腳本從docker本地倉庫獲取鏡像後發佈新版本

image

安裝 Email Extension Plugin 插件,配置自動發送郵件

image

配置jenkins屬性及相關權限

jenkins屬性

點擊系統管理->Global Tool Configuration->找到jdk點擊新增按鈕(自動安裝請先到Oracle註冊帳號)

image
點擊系統管理->Global Tool Configuration->找到maven點擊新增按鈕

image

點擊系統管理->系統設置 配置SSH

image

配置docker

image

設置docker主機能夠被遠程訪問

vim /usr/lib/systemd/system/docker.service
在ExecStart=/usr/bin/docker daemon 後追加 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

如:
ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
複製代碼

配置郵件

image

jenkins權限

  1. 選擇系統管理->Configuration Global Security->進入選擇啓用安全: TCP port for JNLP agents ->禁用,訪問控制-安全域->jenkins專有用戶數據庫,訪問控制-受權策略->Role-Based Strategy 如:
    image
  2. 選擇系統管理->Manage and Assign Roles->Manage Roles:
  • 添加Global Roles(admin、member、ops、others), 設置全局角色(全局角色能夠對jenkins系統進行設置與項目的操做) admin:對整個jenkins均可以進行操做 ops:能夠對全部的job進行管理 other/member:只有讀的權限
  • 添加project Roles(dmp-manager、dmp-view、tsc-manager、tsc-view)而且給添加的角色分配以下權限
    image
  • 注意:在添加project Roles時,若是想讓不一樣的用戶看到不一樣的job,必須設置Pattern,如上dmp_manager角色就只能查看以dmp開頭的job,Pattern規則必須是「dmp.」,注意是以「.」結尾的匹配規則,tsc亦是如此。
  1. 選擇系統管理->管理用戶:新建幾個管理員用戶如:dmpadmin、tscadmin

    image

  2. 選擇系統管理->Manage and Assign Roles->Assign Relos:把第三步的用戶加到user/group中並授於對應的角色權限 如:

    image

建立-編譯-打包-上傳docker鏡像任務-執行遠端腳本從私有倉庫獲取鏡像發佈新版本-發佈完成發送郵件推送

源碼管理

image

構建觸發器

image
插件安裝
image
web token 獲取
image
oschina webhook 配置 http://用戶名:webToken@Jenkins服務器地址:端口/generic-webhook-trigger/invoke

如http://admin:dsfadfadsfaf@192.168.1.1:8080/generic-webhook-trigger/invoke

image

構建

一、maven 構建項目 二、構建docker鏡像 三、推送docker鏡像

image
四、SSH執行遠端服務器腳本運行最新鏡像
image

構建後操做

發送郵件推送

image

驗證構建

見證奇蹟的時候到了

點擊當即構建

image

構建成功後自動發送了成功郵件

image
相關文章
相關標籤/搜索