廬山真面目之十一微服務架構手把手教你搭建基於Jenkins的企業級CI/CD環境

                廬山真面目之十一微服務架構手把手教你搭建基於Jenkins的企業級CI/CD環境

1、介紹
      提及微服務架構來,有一個環節是少不了的,那就是CI/CD持續集成的環境。固然,搭建CI/CD環境的工具不少,可是有一個工具它倒是出類拔萃,是搭建持續集成環境的首選,它就是Jenkins。在這裏,有關Jenkins的具體內容我就不說了,網上有不少,我在這裏只作很簡單的介紹。Jenkins 自動化部署能夠解決集成、測試、部署等重複性的工做,工具集成的效率明顯高於人工操做;而且持續集成能夠更早的獲取代碼變動的信息,從而更早的進入測試階段,更早的發現問題,這樣解決問題的成本就會顯著降低:持續集成縮短了從開發、集成、測試、部署各個環節的時間,從而也就縮短了中間出現的等待時間;持續集成也意味着開發、集成、測試、部署得以持續。咱們今天就開始搭建一個企業級別的CI/CD的環境,這個內容不少,也須要有不少的基礎,好比:必須安裝Docker了,必須會使用Linux系統,必須會使用Git,對GitHub比較熟悉,固然也要對Net5.0有所認識,等等還有不少,這些基礎知識,我假定你們都是熟悉的,畢竟,文章要有主有次。

2、準備工做

          一、開發環境升級,將Net Core3.1的環境升級爲 Net5.0
                   官方文檔:https://docs.microsoft.com/zh-cn/aspnet/core/migration/31-to-50?view=aspnetcore-5.0&tabs=visual-studio#prerequisites
                   下載地址:https://dotnet.microsoft.com/download/dotnet/5.0

          二、安裝 Git 源代碼託管工具。
                在工做開始以前,先要檢查本身是否安裝了Git工具,若是安裝了,就能夠跳過本節,若是沒有安裝,那就跟着咱們開始安裝吧。固然了,安裝完成以後,咱們還要配置Visual Studio 2019 的源代碼管理工具是 Git,很簡單,我就不寫了。
                  (1)、去官網下載Git的安裝文件,地址::https://git-scm.com/downloads/
                            

                  (2)、將下載下來的 Git 安裝包,存在本身的目錄裏,文件名:Git-2.30.0-64-bit.exe,雙擊該文件開始安裝。                  
              

                  (3)、選擇安裝的組件,保持默認就好(個人選擇)。
                            

                  (4)、選擇默認編輯器,保持默認就好(個人選擇)。
                            

                  (5)、能夠修改默認分支的名稱,我選擇保持默認(個人選擇)。                   
              

                  (6)、能夠設置環境變量,保持默認就能夠(個人選擇)。                   
              

                  (7)、選擇Https 傳輸協議,保持默認。                   
              

                  (8)、配置終端使用 Git Bash,保持默認就好。                   
              

                  (9)、配置行未的轉換符。
              

                  (10)、選擇「git pull」的默認行爲,默認選擇。                   
              

                  (11)、選擇憑據幫助程序。
                            

                  (12)、配置額外選項。
                            

                  (13)、配置實驗選項。
                            

                  (14)、開始安裝。                   
              

                  (15)、安裝成功。                   
              

                  (16)、如何判斷 Git 是否安裝成功,在空白地方(任何地方),點擊右鍵,出現如圖效果表示安裝成功。
                            

          三、新建一個Net5.0的項目,而後將其上傳至 Git 服務器。         
                 因爲是測試項目,因此每一個項目的代碼都很簡單,由於代碼不是重點。
                  
                  (1)、新建項目                   
                            【1】、PatrickLiu.CICD.Clients(Asp.Net Core WebApi),一個Core API項目。
                                       
                    代碼以下:html

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Threading;
  5 using Microsoft.AspNetCore.Mvc;
  6 using Microsoft.Extensions.Configuration;
  7 using Microsoft.Extensions.Logging;
  8 using PatrickLiu.CICD.Interfaces;
  9 using PatrickLiu.CICD.Models;
 10 
 11 namespace PatrickLiu.CICD.Clients.Controllers
 12 {
 13     /// <summary>
 14     /// 用戶的 API 類型。
 15     /// </summary>
 16     [Route("api/[controller]")]
 17     [ApiController]    
 18     public class UsersController : ControllerBase
 19     {
 20         #region 私有字段
 21 
 22         private readonly ILogger<UsersController> _logger;
 23         private readonly IUserService _userService;
 24         private IConfiguration _configuration;
 25 
 26         #endregion
 27 
 28         #region 構造函數
 29 
 30         /// <summary>
 31         /// 初始化該類型的新實例。
 32         /// </summary>
 33         /// <param name="logger">日誌記錄器。</param>
 34         /// <param name="userService">用戶服務接口。</param>
 35         /// <param name="configuration">配置服務。</param>
 36         public UsersController(ILogger<UsersController> logger, IUserService userService, IConfiguration configuration)
 37         {
 38             _logger = logger;
 39             _userService = userService;
 40             _configuration = configuration;
 41         }
 42 
 43         #endregion
 44 
 45         #region 實例方法
 46 
 47         /// <summary>
 48         /// 獲取一條記錄
 49         /// </summary>
 50         /// <param name="id"></param>
 51         /// <returns></returns>
 52         [HttpGet]
 53         [Route("Get")]
 54         public User Get(int id)
 55         {
 56             return _userService.FindUser(id);
 57         }
 58 
 59         /// <summary>
 60         /// 獲取全部記錄。
 61         /// </summary>
 62         /// <returns></returns>
 63         [HttpGet]
 64         [Route("All")]
 65         //[Authorize]
 66         public IEnumerable<User> Get()
 67         {
 68             Console.WriteLine($"This is UsersController {this._configuration["port"]} Invoke");
 69 
 70             return this._userService.UserAll().Select((user => new User
 71             {
 72                 ID = user.ID,
 73                 Name = user.Name,
 74                 Account = user.Account,
 75                 Password = user.Password,
 76                 Email = user.Email,
 77                 Role = $"{this._configuration["ip"]}:{this._configuration["port"]}",
 78                 LoginTime = user.LoginTime
 79             })); ;
 80         }
 81 
 82         /// <summary>
 83         /// 超時處理
 84         /// </summary>
 85         /// <returns></returns>
 86         [HttpGet]
 87         [Route("Timeout")]
 88         public IEnumerable<User> Timeout()
 89         {
 90             Console.WriteLine($"This is Timeout Start");
 91             //超時設置。
 92             Thread.Sleep(3000);
 93 
 94             Console.WriteLine($"This is Timeout End");
 95 
 96             return this._userService.UserAll().Select((user => new User
 97             {
 98                 ID = user.ID,
 99                 Name = user.Name,
100                 Account = user.Account,
101                 Password = user.Password,
102                 Email = user.Email,
103                 Role = $"{this._configuration["ip"]}:{this._configuration["port"]}",
104                 LoginTime = user.LoginTime
105             })); ;
106         }
107 
108         #endregion
109     }
110 }

 

 1 using Microsoft.AspNetCore.Builder;
 2 using Microsoft.AspNetCore.Hosting;
 3 using Microsoft.Extensions.Configuration;
 4 using Microsoft.Extensions.DependencyInjection;
 5 using Microsoft.Extensions.Hosting;
 6 using Microsoft.OpenApi.Models;
 7 using PatrickLiu.CICD.Interfaces;
 8 using PatrickLiu.CICD.Services;
 9 
10 namespace PatrickLiu.CICD.Clients
11 {
12     public class Startup
13     {
14 
15         /// <summary>
16         /// 
17         /// </summary>
18         /// <param name="services"></param>
19         public void ConfigureServices(IServiceCollection services)
20         {
21             services.AddSingleton<IUserService, UserService>();
22             services.AddControllers();
23             services.AddSwaggerGen(c =>
24             {
25                 c.SwaggerDoc("v1", new OpenApiInfo { Title = "PatrickLiu.CICD.Clients", Version = "v1" });
26             });
27         }        
28     }
29 }


                            【2】、PatrickLiu.CICD.Interfaces(Net Core 類庫項目),定義抽象接口。
                                       
                    代碼以下java

 1 using PatrickLiu.CICD.Models;
 2 using System.Collections.Generic;
 3 
 4 namespace PatrickLiu.CICD.Interfaces
 5 {
 6     /// <summary>
 7     /// 用戶服務的接口定義。
 8     /// </summary>
 9     public interface IUserService
10     {
11         /// <summary>
12         /// 查找指定主鍵的用戶實例對象。
13         /// </summary>
14         /// <param name="id">用戶的主鍵。</param>
15         /// <returns>返回查找到的用戶實例對象。</returns>
16         User FindUser(int id);
17 
18         /// <summary>
19         /// 獲取全部用戶的實例集合。
20         /// </summary>
21         /// <returns>返回全部的用戶實例。</returns>
22         IEnumerable<User> UserAll();
23     }
24 }


                            【3】、PatrickLiu.CICD.Models(Net Core 類庫項目),定義數據模型。
                                       
                    代碼以下:nginx

 1 using System;
 2 
 3 namespace PatrickLiu.CICD.Models
 4 {
 5     /// <summary>
 6     /// 用戶模型。
 7     /// </summary>
 8     public class User
 9     {
10         /// <summary>
11         /// 獲取或者設置用戶主鍵。
12         /// </summary>
13         public int ID { get; set; }
14 
15         /// <summary>
16         /// 獲取或者設置用戶姓名。
17         /// </summary>
18         public string Name { get; set; }
19 
20         /// <summary>
21         /// 獲取或者設置用戶帳號名稱。
22         /// </summary>
23         public string Account { get; set; }
24 
25         /// <summary>
26         /// 獲取或者設置用戶密碼。
27         /// </summary>
28         public string Password { get; set; }
29 
30         /// <summary>
31         /// 獲取或者設置用戶的電子郵箱地址。
32         /// </summary>
33         public string Email { get; set; }
34 
35         /// <summary>
36         /// 獲取或者設置用戶角色。
37         /// </summary>
38         public string Role { get; set; }
39 
40         /// <summary>
41         /// 獲取或者設置用戶的登陸時間。
42         /// </summary>
43         public DateTime LoginTime { get; set; }
44     }
45 }


                            【4】、PatrickLiu.CICD.Services(Net Core 類庫項目),定義服務實現類型。
                                       
                    代碼以下:                    git

 1 using PatrickLiu.CICD.Interfaces;
 2 using PatrickLiu.CICD.Models;
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6 
 7 namespace PatrickLiu.CICD.Services
 8 {
 9     /// <summary>
10     /// 實現用戶服務接口的實現類型。
11     /// </summary>
12     public class UserService : IUserService
13     {
14         private IList<User> dataList;
15 
16         /// <summary>
17         /// 初始化類型的實例
18         /// </summary>
19         public UserService()
20         {
21             dataList = new List<User>()
22             { new User {ID=1,Name="黃飛鴻-修改",Account="HuangFeiHong",Password="HuangFeiHong123456",Email="huangFeiHong@sina.com", Role="Admin", LoginTime=DateTime.Now },
23             new User {ID=2,Name="洪熙官",Account="HongXiGuan",Password="HongXiGuan54667",Email="HongXiGuan@sina.com", Role="Admin", LoginTime=DateTime.Now.AddDays(-5) },
24             new User {ID=3,Name="方世玉",Account="FangShiYu",Password="FangShiYu112233",Email="fangShiYu@163.com", Role="Admin", LoginTime=DateTime.Now.AddDays(-30) },
25             new User {ID=4,Name="苗翠花",Account="MiaoCuiHua",Password="MiaoCuiHua887766",Email="miaoCuiHua@sohu.com", Role="Admin", LoginTime=DateTime.Now.AddDays(-90) },
26             new User {ID=5,Name="嚴詠春2",Account="YanYongChun",Password="YanYongChun09392",Email="yanYongChun@263.com", Role="Admin", LoginTime=DateTime.Now.AddMinutes(-50) }};
27         }
28 
29         /// <summary>
30         /// 查找指定主鍵的用戶實例對象。
31         /// </summary>
32         /// <param name="id">用戶的主鍵。</param>
33         /// <returns>返回查找到的用戶實例對象。</returns>
34         public User FindUser(int id)
35         {
36             return dataList.FirstOrDefault(user => user.ID == id);
37         }
38 
39         /// <summary>
40         /// 獲取全部用戶的實例集合。
41         /// </summary>
42         /// <returns>返回全部的用戶實例。</returns>
43         public IEnumerable<User> UserAll()
44         {
45             return dataList;
46         }
47     }
48 }


                  (2)、在Visual Studio 2019中增長Git帳號。
                            若是沒有在Visual Studio 2019種添加帳號,那就增長一下,方便進行Git相關操做。

                            【1】、點擊 Visual Studio 2019 【幫助】菜單,選擇【註冊產品】,打開添加帳號窗口。
                                      
                            【2】、點擊【全部帳戶】右邊的【+添加】菜單,將 GitHub 帳號增長進來。
                                       

                            【3】、若是已經添加過帳號,會顯示出來。
                                    若是沒有GitHub帳號,趕忙去申請一個,畢竟,咱們要使用Git做爲咱們的源代碼管理工具。說明:帳號的確認頁面,不要使用Microsoft Edge瀏覽器,由於這個瀏覽器老是驗證(驗證圖標老是轉圈),換個瀏覽器,我使用的是 Firefox ,很快就添加成功,具體緣由我還沒找到。

                  (3)將項目推送至Git服務器。

                             【1】、在【解決方案】上點擊右鍵,選擇【Git建立遠程倉庫】,打開建立倉庫的窗體。
                                      

                             【2】、打開【建立GIT存儲庫】頁面,進行設置,去掉【專用】選項,很簡單就很少說了。
                                     

                             【3】、點擊按鈕【建立並推送】,完成操做。
                                     完成操做,已經將咱們的項目成功推送到 Github服務器

                  (4)、檢查Github服務器上是否存在咱們的項目。
                            

3、開始搭建環境

             1、準備4臺服務器,構建企業級別 CI/CD 環境。github

        (1)、Jenkins 持續集成服務器,地址:192.168.127.146。web

        (2)、Docker Harbor 私服服務器,地址:192.168.127.143。docker

        (3)、Docker 鏡像構建服務器,地址:192.168.127.144。json

        (4)、發佈服務器,地址:192.168.127.145。

             2、搭建 Jenkins 持續集成服務器,服務器地址【192.168.127.146】。
        要想搭建持續集成的環境,Jenkins是一個繞不過的話題。這臺服務器也是咱們企業級持續集成環境的核心,它搭建好了,也就完成了60%配置的任務了,廢話很少說,咱們開始吧,環節不少,你們要好好的看了。

                  (1)、開始安裝 Jenkins,這裏就省略了,若是想看安裝步驟,請看個人《如何在Linux(CentOS7)環境搭建 Jenkins 服務器環境》。

                            網頁地址:http://192.168.127.146:8084
                            登陸帳號:Administrator
                            登陸密碼:***********

                  (2)、登陸Jenkins服務器,點擊【Manage Jenkins--》【Global Tool Configuration】按鈕,打開【Global Tool Configuration】配置頁面。
              第一次登錄 Jenkins ,主要是爲了兩項全局配置,第一項是查看 Java 的 JDK 是否安裝好,第二項是查看 Git 是否安裝好。
                              【1】、增長JDK設置,配置JDK信息。                             
                    

                              【2】、增長Git,配置GIT執行路徑。
                                        vim


                              【3】、Git 執行路徑如何獲取。
                                        命令:#whereis git
                  
                  Java 的 JDK 安裝路徑能夠經過命令:#which java 查看。
                  
                              
                  (3)、繼續配置,點擊【Manage Jenkins--》【Manage Plugins】,檢查Git是否安裝。
                              


                  (4)、配置 Jenkins 從 GitHub上拉取源碼,這是手動拉取的。

                            【1】、點擊【Dashboard】菜單,【新建Item】,在右側打開【Create a Job】頁面。
                                         

                            【2】、建立一個任務。
                                        
                                        工做列表以下
                                         
                            【3】、開始配置工做。
                                       
                            【4】、配置源代碼管理。
                                       

                            【5】、爲源代碼管理配置認證。
                                       

                            【6】、開始構建,從 GitHub 服務器上拉取源碼。
                                       

                            【7】、個人工做任務正在拉取源碼。
                                        

                            【8】、成功拉取源碼。
                                       
                  

                            【9】、點擊【Dashboard】--》【項目名稱】--》【工做空間】能夠查看項目源碼。
                                       

                            【10】、咱們要實如今 Visual Studio 2019 裏面,修改源碼,自動同步到 Jenkins 服務器。
                                         咱們開始配置GitHub Server,在桌面【Dashboard】,點擊【Manage Jenkins】--》【System Configuration】--》【Configure System】,打開【Configure System】頁面。在這裏咱們主要配置 GitHub,其餘保持默認。

                                          1)、增長GitHub Server
                                                 

                      而後,咱們點擊【管理Hook】,進入配置 Hook 頁面,點擊【覆蓋 Hook Url】,因爲咱們這個地址是內網地址,因此這個url不能直接使用(外網地址就不用穿透了),要經過內網穿透實現,下邊有實現方法。

                       
                        這個地址能夠直接保存,後面,我把這個內網地址穿透就能夠。

                                          2)、增長認證。
                                                  

                                          3)、咱們獲取認證 Token,咱們必須登陸 GitHub.com 服務器。

                                                  1》、點擊系統【Settings】菜單,進入設置頁面。
                                                          

                                                  2》、點擊【Developer settings】,進入設置頁面。
                                                          

                                                  3》、點擊【Personal access tokens】菜單,繼續點擊【Generate new token】按鈕。
                                                          


                                                  4》、進入【New personal access token】頁面,進入相關設置。
                                                         

                                                  5》、回到【Personal access tokens】頁面,點擊【複製】就能夠獲取Token,這個 Tokens 是爲了創建 GitHub Server 通訊憑據使用的,也就是步驟 2)裏面要寫的祕密文本。
                                                         


                            【11】、GitHub Server Url 不能直接用,能夠經過【Nat內網穿透】實現。
                             
                                       1)、https://natapp.cn/,登陸官網,註冊帳號。
                                                

                                       2)、https://natapp.cn/,官網下載客戶端工具。
                                                  

                                       3)、登陸官網,購買【免費隧道】
                                                  

                      


                                       4)、點擊【個人隧道】--》【配置】,配置個人隧道。
                                                
                                                  開始配置。
                                                 

                      
                   

                                       5)、運行客戶端程序,登陸App,必須在APP的當前目錄。
                                              命令:#natapp -authtoken=9b25a6fb003b7a36               //每次從新執行獲取的地址都不同,該窗口若是長時間打開,該地址也會刷新,改變地址。
                                                 
                                    
                                       6)、獲取外網的地址。
                                                 

                                       7)、將 NatAPP 獲取的網址配置到 GitHub.Com 的 WebHook,這樣就能夠經過外網訪問 Http://192.168.127.146:8084/github-webhook/。
                    

                  (5)、配置 WebHook 完成觸發 Jenkins 拉取新的源碼到本地工做空間。

                             【1】、在GitHub 右側,點擊用戶帳號圖標,選擇【Your Repositories】菜單,打開全部倉庫列表。
                                       

                             【2】、進入目標倉庫【PatrickLiu.CICD.Demo】後,點擊該項目的【Settings】菜單。
                                       
                                       進入項目,而後點擊項目的【Settings】菜單。
                                       

                             【3】、而後選擇左側【Webhooks】,而後點擊右側【Add webhook】,增長一個 Hook。
                                                               

                                       將(12)步驟中經過內網穿透生成的Url地址增長進去。
                  

                             【4】、WebHook 增長成功,恭喜,還好成功了。
                                        

                  (6)、配置 Jenkins 裏面的項目,點擊左側【My Views】,在右側點擊項目名稱旁邊的下拉菜單【配置】,進入配置頁面。
                               

                             咱們要配置【構建觸發器】,選擇完畢,確認無誤後點擊【應用】,最後點擊【保存】。
                                

                  (7)、測試是否能夠自動生成、拉取,看看是否能觸發咱們 Hook

             通過以上步驟,咱們的 Hook 配置成功,當VS2019 修改代碼,並提交到 Github 上,並觸發 Hook ,促使 Jenkins 自動拉取 Github 上的源碼到 Jenkins 中。
後端

                                    【1】、在 Visual Studio2019 修改咱們的代碼,而後提交,最後推到服務器上。

                                       

                 修改完畢,而後所有提交,最後推送到GitHub服務器。       

                         

                                    【2】、在 Jenkins 裏面,點擊左側【My Views】,而後點擊右側項目的名稱,進入該項目頁面。

                                      

                                    【3】、點擊【Build History】或者【相關連接】第一條記錄,進入【Build】頁面詳情。

                                       

                                    【4】、點擊左側【控制檯輸出】,在右側能夠看到詳情。

                                        

                                    【5】、也能夠點擊【工做空間】,右側點擊【查看】,查看項目源碼。
                  

                                 【6】、最後咱們來看看源碼,是否修改了。

                  
                  源碼以下:
                  


          三、搭建 Docker Harbor 私服服務器,服務器地址【192.168.127.143】。

        咱們有了私服,就不用去遠程服務器拉取有些須要的鏡像,固然,咱們能夠事先把一些有用的鏡像退到咱們私服服務器,之後使用更方便,速度更快。

                  (1)、檢查 Docker 是否安裝,Docker-compose 是否安裝,具體安裝步驟就不寫了,由於這個不是重點。
                              檢查 Docker 環境是否安裝,若是沒有就安裝。

              命令:#Docker --version                           

              [root@localhost143 ~]# docker --version
              Docker version 20.10.2, build 2291f61

               

              命令:yum install -y docker,執行該命令安裝 Docker,安裝完成,須要升級,由於該版本過低。若是想升級 Docker ,能夠查看個人這篇文章《如何將Docker升級到最新版本

                  (2)、檢查 Docker-compose 是否安裝,若是沒有那就安裝。
                              命令:#Docker-compose --version

                       [root@localhost143 ~]# docker-compose --version
               docker-compose version 1.25.0, build 0a186604
                                    

               以上說明已經安裝,若是提示 -bash: docker-compose: 未找到命令,說明沒有安裝。

                  (3)、若是尚未安裝,那就安裝 Docker-compose,執行如下命令。
                              命令:#curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
               命令:#chmod +x /usr/local/bin/docker-compose
              
              說明:Docker-compose 的安裝比較麻煩,因此在這裏就不詳說了,你們能夠查看個人《 如何安裝快速 Docker 和 Docker-Compose 服務》,裏面有具體的安裝方法。

                  (4)、下載 Harbor,開始安裝和配置私服服務器。

                              【1】、檢查是否安裝了 Wget 命令,若是沒有安裝,要安裝能夠執行如下命令。

                              命令:# yum install -y wget  
                                    

              【2】、下載 Harbor,別直接下,最好用下載工具,由於文件太大,有 533 M(我直接保存下載,太慢,最後才用工具下載)

                                 文件地址:https://github.com/goharbor/harbor/releases/download/v2.1.3/harbor-offline-installer-v2.1.3.tgz

                                 官網:https://github.com/vmware/harbor/releases

                                 wget命令下載:#wget https://github.com/goharbor/harbor/releases/download/v2.1.3/harbor-offline-installer-v2.1.3.tgz(下載太慢,不建議,文件有533M),我是使用迅雷下載,而後在上傳到服務器吧。
                     
                  (5)、將文件上傳到服務器,文件名:harbor-offline-installer-v2.1.3.tgz
                              服務器目錄:
                                 [root@localhost143 privatefiles]# pwd
                  /root/privatefiles

                  

              文件保存:
                 [root@localhost143 ~]# ls
                /root/privatefiles/harbor-offline-installer-v2.1.3.tgz                     

                

                  (6)、進入文件保存路徑,而後,解壓文件。
                              命令:#tar xf harbor-offline-installer-v2.1.3.tgz
                              

                  (7)、進入 Harbor 目錄。
                              命令:# cd harbor
                              

                  (8)、修改 harbor.yml.tmpl文件名爲harbor.yml文件名,並進行相關配置。

                            【1】、將 harbor.yml.tmpl 文件名改爲 harbor.yml。
                                        命令:#cp harbor.yml.tmpl harbor.yml
                                        

                            【2】、修改配置文件: 配置 hostname 0.0.0.0,沒有vim 就安裝:yum install vim -y 強制安裝。
                                        命令:#vim harbor.yml
                                                                     
                                        修改:hostname:192.168.127.143,註釋掉關於https 的配置。
                   

                            【3】、其餘配置內容,能夠熟悉一下。
                                        

                            【4】、保存退出 Vim。
                                      命令:#wq
                  
                  (9)、安裝 Harbor

                            【1】、開始安裝,執行如下命令。
                                        命令:#./install.sh
                                        
                  中間不少過程省略了。。。。
                  
                            
                            【2】、默認端口號:80,訪問地址:http://192.168.127.143:80
                                        

                  (10)、配置Harbor 私服。

                             【1】、登陸Harbor,帳號默認:admin,密碼:Harbor12345。
                                           

                             【2】、新建項目。
                                        
                  新建項目。。。
                  
                              
                             【3】、爲咱們的私服服務器增長私服地址配置。

                                       1)、查看全部harbor 是否都運行在 docker 裏面。
                                               命令:# docker ps -a
                                               

                                       2)、查看Docker 後端配置文件。
                                               命令:#cat /etc/docker/daemon.json。
                                               

                                       3)、增長地址,"insecure-registries":["192.168.127.143"]。
                                               命令:#vim /etc/docker/daemon.json
                                               

                                       4)、 從新加載守護進程,加載配置。
                                               命令:#systemctl daemon-reload
                                               

                                       5)、從新啓動 Docker 服務。
                                               命令:#systemctl restart docker
                    

                             【4】、驗證 Harbor 私服是否正常運行,全部服務都不能運行。

                                       1)、網頁不能運行 。
                      

                                       2)、Harbor 服務也運行失敗。  
                                                       

                                 正常順序應該是先配置 Harbor 私服,在運行私服。
     
                             【5】、從新部署 Harbor 私服,必須在 Harbor 安裝的當前目錄,執行如下命令。

                                         1)、先關閉全部服務。
                                               命令:#docker-compose down
                                               

                                           2)、重啓全部服務。
                                               命令:#docker-compose up –d
                                               

                             【6】、查看服務和網頁是否正常運行,正常纔是成功。
                                           
                                           從新刷新頁面,頁面顯示正常頁面。
                                           

                  (11)、將鏡像推向 Harbor 私服,必須遵照如下規則,新鏡像名稱:harbar 私服IP地址:端口號/項目名/新鏡像名稱:版本號。

                             【1】、拉去一個測試的鏡像。
                                         命令:#docker pull nginx
                                         

                             【2】、給鏡像從新命名,格式:harbar 私服IP地址:端口號/項目名/新鏡像名稱:版本號
                                         命令:#docker tag nginx:latest 192.168.127.143/patrickliu.microservices/nginx:v1
                                           

                             【3】、將從新的鏡像推送至 Harbor 私服。
                                         命令:# docker push 192.168.127.143/patrickliu.microservices/nginx:v1
                                         

                             【4】、若是提示未登陸:

                        命令:#docker login 192.168.127.143
                     username:admin
                        password:Harbor12345

                             

                             【5】、再次將鏡像推向 Harbor推送。
                                       命令:# docker push 192.168.127.143/patrickliu.microservices/nginx:v1
                                        

                             【6】、檢查 Nginx 鏡像是否推送成功。
                                        
                   
                  
                   
                                                                                        
                             【7】、拉取ASP.NET CORE 鏡像,這裏這樣作是爲了 Docker 構建服務器使用該鏡像構建咱們的Net5.0鏡像。
                                        #docker pull registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:5.0-buster-slim
                    #docker tag registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:5.0-buster-slim mcr.microsoft.com/dotnet/core/aspnet:5.0-buster-slim
                                        
                  
                  
                                                           
                             【8】、拉取Net Core SDK鏡像,這裏這樣作是爲了 Docker 構建服務器使用該鏡像構建咱們的Net5.0鏡像
                                        #docker pull registry.cn-hangzhou.aliyuncs.com/newbe36524/sdk:5.0-buster-slim
                    #docker tag registry.cn-hangzhou.aliyuncs.com/newbe36524/sdk:5.0-buster-slim mcr.microsoft.com/dotnet/core/sdk:5.0-buster-slim
                  
                  
                  

                             【9】、將 mcr.microsoft.com/dotnet/core/aspnet:5.0-buster-slim 修改 tag,這裏這樣作是爲了 Docker 構建服務器使用該鏡像構建咱們的Net5.0鏡像
                                        #docker tag mcr.microsoft.com/dotnet/core/aspnet:5.0-buster-slim 192.168.127.143/patrickliu.microservices/aspnet-core5:v1
                  
                  
                             【10】、推送 ASP.NET Runtime鏡像去 Harbor 私服,這裏這樣作是爲了 Docker 構建服務器使用該鏡像構建咱們的Net5.0鏡像
                                        #docker push 192.168.127.143/patrickliu.microservices/aspnet-core5:v1
                  
                                                                                  
                             【11】、將 mcr.microsoft.com/dotnet/core/sdk:5.0-buster-slim 修改tag,這裏這樣作是爲了 Docker 構建服務器使用該鏡像構建咱們的Net5.0鏡像
                                        #docker tag mcr.microsoft.com/dotnet/core/sdk:5.0-buster-slim 192.168.127.143/patrickliu.microservices/sdk-core5:v1
                                        

              【12】、推送 ASP.NET Runtime 鏡像去 Harbor 私服,這裏這樣作是爲了 Docker 構建服務器使用該鏡像構建咱們的Net5.0鏡像
                                        #docker push 192.168.127.143/patrickliu.microservices/sdk-core5:v1
                                         

              【13】、檢查 Harbor 上是否已經成功推送了 ASP.NET Runtime 和 SDK 鏡像,這裏這樣作是爲了 Docker 構建服務器使用該鏡像構建咱們的Net5.0鏡像
                  

                                         


          4、搭建 Docker 鏡像構建服務器,地址是【192.168.127.144】。

         構建服務器主要的功能就是把 Jenkins 拉取的代碼打包成 Docker 鏡像,並推送到 Harbor 私服服務器,便於咱們的發佈服務器從私服服務器拉取鏡像,並部署鏡像。

                   (1)、編輯 Docker 配置文件:/usr/lib/systemd/system/docker.service 開啓 2376 端口。

                                   【1】、命令:#vim /usr/lib/systemd/system/docker.service,在 ExecStart 模塊增長 -H tcp://0.0.0.0:2376。

                        

                【2】、從新加載配置。

                    命令:#systemctl daemon-reload
                    

               【3】、重啓 Docker 服務。

                         命令:#systemctl restart docker
                     

               【4】、配置 docker 的 daemon.json 文件,增長咱們的 Harbor 私服地址。

                       命令:#vim /etc/docker/daemon.json                              
                    "insecure-registries":["192.168.127.143"],若是是新文件,格式這樣:{"insecure-registries":["192.168.127.143"]}
                    

                       記得重啓相關服務。

                        

                【5】、檢查 Docker 鏡像構建服務器是否成功配置 Harbor 私服服務器。

                       
              
                          【6、檢查2376 端口,是否成功打開。
                                             命令:#netstat -anp |grep 2376
                                   

                  (2)、在構建服務器上要配置 Harbor 私服服務器:192.168.127.143
              

                   (3)、肯定 Jenkins 是否安裝了 Docker-plugin 插件,【Dashboard】--->【Manage Jenkins】--->【插件管理】
                      

              【1】、升級站點:在右側點擊【高級】,拉到最後,看到【升級站點】,將鏡像地址更換爲騰訊或者清華均可以。而後點擊【可更新】或者【可選插件】,有數據,說明站點升級成功。

                      https://updates.jenkins.io/update-center.json           

                      騰訊:http://mirror.xmlssion.com/jenkins/updates/update-center.json

                      清華:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

                     

 

              【2】、安裝 Docker 插件,點擊【已安裝】插件,輸入 Docker 關鍵字,看看是否安裝 Docker 插件,若是沒有就安裝插件,點擊【可選插件】,在文本框輸入Docker ,在查詢結果中,選擇要安裝的插件。

                     

                    

                    


                  (4)、登陸 Jenkins,點擊【Dashboard--》【Manage Jenkins--》【Configure System】,進入配置頁面。
                               

              在右側,一直向下拉,看到【Cloud】菜單結束。
              

             【1】、Configure Clouds
                    

                              1)、Docker 鏡像構建服務器:192.168.127.144,進入服務器,檢查端口 2376 是否打開。

                          命令:#netstat -anp |grep 2376

                          

                              2)、點擊【Add a new cloud】菜單,而後選擇【Docker】菜單,由於咱們沒有安裝 K8s 插件,雲裏面只有一個 Docker。

                         

                              3)、若是安裝了 K8s,點擊【Add Docker Templates...】按鈕,就會生成一個列表,供你選擇。可是咱們沒有安裝 K8s,因此咱們選擇【Docker Cloud details...】

                           
                          開始配置。

                                                     

                                    若是提示:java.net.NoRouteToHostException: 沒有到主機的路由,沒有主機路由問題提到的大可能是防火牆問題。能夠查看個人文章《java.net.NoRouteToHostException: 沒有到主機的路由》。

                     (5)、在 .Net5.0 的項目中增長 Dockerfile 文件,這個文件必須放在解決方案的本目錄,便於之後的配置,該文件中的地址換成咱們的私服服務器地址(遠程服務器下載太慢)                                
              

                     (6)、在 Jenkins 系統中,配置咱們的項目,不是源碼項目,是在 Jenkins 中建立的項目,以此項目進行構建。

                              【1】、點擊【Dashboard】菜單,而後點擊右側【項目名稱】,出現下拉菜單,選擇【配置】,進入配置頁面。    

                     

              【2】、進入【配置】頁面,選擇【增長構建步驟】菜單,出現下拉菜單,而後選擇【Build/Publish Docker image】菜單。

                     

              【3】、進入【Build/Publish Docker Image】 頁面,開始配置信息。                     
                    

              【4】、選擇【Build Now】,開始構建鏡像。
                  

             【5】、生成咱們的項目。
                  
             【6】、最後生成了咱們的鏡像。
                  
             【7】、檢查咱們的構建服務器,看看是否成功生成咱們的鏡像和拉取了相關鏡像。

                   
                  完美,是否是很開心,反正我是很開心,終於成功了。還有差一步,繼續努力。


          5、搭建發佈服務器,地址是【192.168.127.145】。

                  (1)、先檢查咱們是否成功安裝了 Docker 環境,沒有就安裝。
              

                  (2)、配置 Harbor 私服鏡像地址:192.168.127.143,並啓動相關的服務。
              
              
              

                  (3)、Jenkins 系統中,安裝 Publish Over SSH 插件,用於鏈接發佈服務器。
              

              

                  (4)、Jenkins 系統中,配置 Publish over SSH 環境,鏈接發佈服務器:192.168.127.145。

            

              
                  (5)、在 Jenkins 系統中,配置項目,【構建後操做】-->【Send Build artifacts over SSH】,增長【Exec command】就能夠。
              
              
              

 1 echo '=========================================================='
 2 
 3 CONTAINER_NAME=net-2021113
 4 
 5 docker pull 192.168.127.143/patrickliu.microservices/$CONTAINER_NAME:v1
 6 
 7 echo '====================Remote 自動容器 start =========================='
 8 
 9 cid=$(docker ps -a | grep "$CONTAINER_NAME" | awk '{print $1}')
10 
11 if [ "$cid" != "" ] ; then
12         docker rm -f $cid
13         sleep 3s
14 fi
15 
16 docker run -d --name $CONTAINER_NAME -p 10000:80 192.168.127.143/patrickliu.microservices/$CONTAINER_NAME:v1
17 
18 echo '============= Remote 自動容器 end ==========================='



        (6)、開始構建咱們的項目。
            

        (6)、項目成功生成併發布到了發佈服務器。
             

       (7)、經過客戶端檢查咱們的項目是否發不成功,鏡像文件已經生成,鏡像已經成功啓動了實例,對外端口:10000。
            
            

       (8)、咱們經過網頁打開咱們發佈的項目,地址是:http://192.168.127.145:10000/api/users/all,192.168.127.145是咱們的發佈服務器。

              

            太開心了。測地成功了


4、結束
    
今天就寫到這裏了,這篇文章多是我寫的全部文章中最長的一篇,你們看的時候要有耐心。既然是企業級別的持續集成環境,固然不會只有一臺服務器。我這裏選擇了四臺服務器,分別是:192.168.127.146【Jenkins服務器】
,192.168.127.143【Harbor 私服服務器】,192.168.127.144【Docker 鏡像構建服務器】,192.168.127.145【發佈服務器】,這四臺服務器,除了 Jenkins 服務器,其餘三臺服務器都須要配置私服服務器的地址,並且每臺服務器都要安裝 Docker 環境。配置這個過程很漫長,我大概通過了兩個星期才未完成,經歷了不少坑,最終都解決了。十分開心,不忘初心,天天進步一點點。

相關文章
相關標籤/搜索