Jenkins+GitLab+dotnet+Python自動化部署.Net Core項目

  • 部署環境與流程
    1) Jenkins是java產品,需安裝JDK8。由於.netFreamwork項目自動化時是基於Windows,所以繼續使用Windows server 2012環境下的已有的Jenkins,部署、構建dotnet Core項目繼續在Windows平臺下操作。
    2) .NET Core SDK:2.2.402。dotnet build構建。
    3) 代碼倉庫GitLab。
    4) .NET Core服務端CentOS7
    部署環境流程:
    Jenkins+GitLab+dotnet+Python自動化部署.Net Core項目
  • 需求
    一個項目下分兩個子項目,而子項目需分別進行構建部署,構建後分子項目分別同步到不同的server上。所以,計劃Jenkins上創建三個Job:A、B、C。A、B分別表示子項目,C分環境統一管理A、B。即C作爲A、B的構建入口。C-Job中上按參數選擇構建應用,會觸發對應的Job-B或Job-C構建,實現思路是python調用JenkinsAPI去實現,後面會具體講到。大致流程爲:
    Jenkins+GitLab+dotnet+Python自動化部署.Net Core項目
  • Jenkins操作
    1) Jenkins具體安裝略。下載見官方網站:https://jenkins.io/download/ ,選擇安裝Windows版本。
    這裏Jenkins安裝前,需配置好JDK環境。
    2) 插件安裝
    Jenkins安裝好後,進入系統管理->插件管理,安裝好Msbuild、GitLab、ftp、python等。
    Jenkins+GitLab+Msbuild+Python自動化部署.Net項目
    Jenkins+GitLab+Msbuild+Python自動化部署.Net項目
    3) 新建Job-A
    列出Job中主要設置項。
    Gitlab代碼倉庫和分支配置如下:
    Jenkins+GitLab+dotnet+Python自動化部署.Net Core項目
    構建build:
    build前新建“Exceute Windows batch command”,如下圖:
    Jenkins+GitLab+dotnet+Python自動化部署.Net Core項目
    Jenkins+GitLab+dotnet+Python自動化部署.Net Core項目
    build命令
    dotnet restore "%WORKSPACE%\PreventFraudAPI.Server"
    dotnet build "%WORKSPACE%\PreventFraudAPI.Server"
    dotnet publish "%WORKSPACE%\PreventFraudAPI.Server\PreventFraudAPI.sln" -o "E:\Publish-web\PreventFraudAPI-test\PreventFraudAPI.Server"

    Build構建完後,再新建“Exceute Windows batch command”,從gitlab中拉取項目文件配置項,是gitlbab中集中存放。將集中配置項文件copy到項目構建後的目錄中。
    Jenkins+GitLab+dotnet+Python自動化部署.Net Core項目
    配置文件操作完後,需將Jenkins平臺下已構建完後的項目文件同步到.NET Core服務器端CentOS上。涉及Windows和Linux不同的OS間交互問題,這裏選擇Python實現,主要作了服務器端dotnet應用服務操作、應用程序備份、代碼同步等。
    Jenkins+GitLab+dotnet+Python自動化部署.Net Core項目
    E:\Python-scripts\test\PreventFraudAPI-test2.py代碼細節如下:

    import sys
    import paramiko
    class SSHconnection(object):
    def __init__(self, host, port, username, password):
        self._host = host
        self._port = port
        self._username = username
        self._password = password
        self._transport = None
        self._client = None
        self._connect()
    #建立connect連接
    def _connect(self):
        transport = paramiko.Transport((self._host, self._port))
        transport.connect(username=self._username, password=self._password)
        self._transport = transport
    def exec_command(self, command, step):
        if self._client is None:
            self._client = paramiko.SSHClient()
            self._client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            self._client._transport = self._transport
        stdin, stdout, stderr = self._client.exec_command(command)
        data = stdout.read()
        print('%s 執行結果: ' % step)
        print(data.decode('utf-8'))
        # #輸出結果
        # if len(data) > 0:
            # print('執行結果:')
            # print(data.decode('utf-8'))
        err = stderr.read()
        #輸出錯誤結果
        if len(err) > 0:
            print('%s 執行的錯誤輸出:' % step)
            print(err.decode('utf-8'))
    #關閉close連接
    def close(self):
        if self._transport:
            self._transport.close()
        if self._client:
            self._client.close()
    if __name__=="__main__":
    host = "10.10.10.75"
    port = 65089
    username = "root"
    password = "password"
    cmd_stop = "systemctl stop supervisor"
    cmd_backup = "cp -r /usr/soft/package/HiCore.PreventFraudAPI.Web/ /usr/soft/backup/HiCore.PreventFraudAPI.Web-`date +%Y-%m-%d-%H:%M`"
    cmd_rsync = "rsync   -vzrtopg  --no-super --numeric-ids  --progress  --port=873 --password-file=/opt/scripts/passwd.sh   [email protected]::PreventFraudAPI-test   /usr/soft/package/HiCore.PreventFraudAPI.Web/"
    cmd_start = "systemctl start supervisor"
    conn = SSHconnection(host, port, username, password)
    print('開始停supervisor服務...')
    conn.exec_command(cmd_stop, 'supervisor_stop_service')
    print('開始備份本地PreventFraudAPI程序...')
    conn.exec_command(cmd_backup, 'backup_app')
    print('開始同步PreventFraudAPI程序...')
    conn.exec_command(cmd_rsync, 'rsync_app')
    print('開始啓supervisor服務...')
    conn.exec_command(cmd_start, 'supervisor_start_service')
    print('PreventFraudAPI程序發佈完成,請驗證!')

    4)

  • 發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章