中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python+JenkinsApi自動化部署.Net Core項目

發布時間:2020-05-31 04:44:05 來源:網絡 閱讀:624 作者:Blue后花園 欄目:系統運維
  • 部署環境與流程
    1) Jenkins是java產品,需安裝JDK8。由于.netFreamwork項目自動化發布時是基于Windows,所以繼續使用Windows,在Windows server 2012環境下已有的Jenkins環境,部署、構建dotnet Core項目繼續在Windows平臺下操作。
    2) .NET Core SDK:2.2.402。dotnet build構建。
    3) 代碼倉庫GitLab。
    4) .NET Core服務端CentOS7
    部署環境流程:
    Python+JenkinsApi自動化部署.Net Core項目
  • 部署需求
    一個項目下分兩個子項目,而子項目需分別進行構建部署,構建后子項目分別打包同步到不同的server上。所以,計劃Jenkins上創建三個Job:A、B、C。A、B分別表示子項目,C進行統一管理A、B。即C作為A、B的構建入口。C-Job中上按參數選擇構建應用,會觸發對應的Job-B或Job-C構建,實現思路是python調用JenkinsAPI去實現,后面會具體講到。大致流程如下:
    Python+JenkinsApi自動化部署.Net Core項目
  • Jenkins操作
    1) Jenkins具體安裝略。下載見官方網站:https://jenkins.io/download/ ,選擇安裝Windows版本。
    這里Jenkins安裝前,需配置好JDK環境,配置JDK8。
    2) 插件安裝
    Jenkins安裝好后,進入系統管理->插件管理,安裝好Msbuild、GitLab、python等。
    Python+JenkinsApi自動化部署.Net Core項目
    3) 新建Job-A
    列出Job中主要設置項。
    Gitlab代碼倉庫和分支配置如下:
    Python+JenkinsApi自動化部署.Net Core項目
    構建build:
    build前新建“Exceute Windows batch command”,如下圖:
    Python+JenkinsApi自動化部署.Net Core項目
    Python+JenkinsApi自動化部署.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"

    dotnet restore :還原。主要是尋找當前目錄下的項目文件(project.json),利用NuGet庫還原整個項目的依賴庫,并且遍歷每個目錄,生成項目文件,繼續還原該項目文件中的依賴項。
    dotnet build :編譯應用程序。該命令將項目及其依賴項生成為一組二進制文件。二進制文件包括擴展名為 .dll 的中間語言 (IL) 文件中的項目代碼。
    dotnet publish:發布項目,使可跨平臺運行程序。Windows環境build完之后,可發布到Linux環境下運行。
    dotnet run:運行應用程序。
    Build構建完后,再新建“Exceute Windows batch command”,從gitlab中拉取項目文件配置項。gitlbab中進行集中存放。將集中配置項文件copy到項目構建后的目錄中。
    Python+JenkinsApi自動化部署.Net Core項目
    配置文件操作完后,需將Jenkins平臺下已構建完后的項目文件打包、同步到.NET Core服務器端的CentOS7 Server上。Windows和Linux不同平臺文件操作,這里選擇Python實現,主要作了服務器端dotnet應用服務操作、應用程序備份、代碼同步等。
    Python+JenkinsApi自動化部署.Net Core項目
    這里使用python下的paramiko模塊實現。paramiko模塊屬于第三方庫,實現了SSHv2協議,可以在Python代碼中直接使用SSH協議對遠程服務器執行操作,而無需通過ssh命令對遠程服務器進行操作,使用前需要使用如下命令先進行安裝:

    pip install paramiko

    paramiko包含兩個核心組件:SSHClient和SFTPClient。
    SSHClient:類似于Linux的ssh命令,是對SSH會話的封裝,該類封裝了傳輸(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),常用于執行遠程命令。
    SFTPClient:類似與Linux的sftp命令,是對SFTP客戶端的封裝,用以實現遠程文件操作,如文件上傳、下載、修改文件權限等操作。
    這里根據實際需求,使用了SSHClient這個組件。
    Python代碼細節如下:

    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   rsync_user@10.10.10.69::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程序發布完成,請驗證!')

    同理,Job-B操作跟Job-A一樣。主要是Job-C有差異,Job配置中有帶參數。
    4) 新建Job-C
    列出Job中主要設置項。
    選擇“This project is parameterized”,添加參數選擇“Choice Parameter”,配置如下:
    Python+JenkinsApi自動化部署.Net Core項目
    根據選擇的參數觸發遠程Job構建。如選擇選項"Web"觸發遠程Job-A構建,選擇選項"File"觸發遠程Job-B構建。
    構建build:
    build構建步驟選擇新建“Exceute Windows batch command”,如下圖:
    Python+JenkinsApi自動化部署.Net Core項目

  • Python操作Jenkins API
    目前Python版本Jenkins支持的API主要有2個第三方的包。
    JenkinsApi 和 Python-Jenkins
    1) Python-Jenkins
    多數文章建議使用Python-Jenkins模塊,相對JenkinsApi,Python-Jenkins模塊封裝的更好,接口調用更方便,更容易。這里本來也是首選建議的Python-Jenkins模塊,但是,在實際操作時報錯:
    Python+JenkinsApi自動化部署.Net Core項目
    此類報錯網上看了幾篇文章,描述的多數是因為jenkins-python在python3.6存在bug,url沒有轉碼。而這里是python3.7版本,也歸類到版本問題。在Python2中可以使用。這里貼出Python-Jenkins方式代碼,主要是要導入import jenkins模塊。代碼如下:
    import jenkins
    jenkins_server_url = 'http://jenkins.hicore.local/'
    user = 'yuhuanghui'
    api_token= '11f6714b10b086b9165ed507dd2f5e161a'
    #實例化jenkins對象,連接遠程的jenkins server
    server = jenkins.Jenkins(jenkins_server_url,username=user,password=api_token)
    print(server)
    #構建job
    server.build_job('PreventFraudAPI-test')
    #查看某個job的構建信息
    job_info=server.get_job_info('PreventFraudAPI-test')
    print(job_info)

    這里就不更換python版本了,其他Job用到的python都是Python3,所以用另一種API方式JenkinsApi 。
    2) JenkinsApi
    Python+JenkinsApi自動化部署.Net Core項目
    使用JenkinsApi方式需要導入from jenkinsapi.jenkins import Jenkins、from jenkinsapi.build import Build模塊。
    上面Job-C中的python腳本:

    import os,sys
    from jenkinsapi.jenkins import Jenkins
    from jenkinsapi.build import Build
    def get_server_instance():
    jenkins_url = 'http://10.10.10.69:8080/'
    server = Jenkins(jenkins_url, username='xiaoming', password='password')
    return server
    server = get_server_instance()
    #版本
    print('Jenkins版本:',server.version)
    #所有的job列表
    #print('Jobs:', server.keys())
    print('查看Jobs列表:',server.get_jobs_list())
    #判斷job是否存在,存在返回true,不存在返回false。
    Web_Job = server.has_job('PreventFraud-test')
    File_Job = server.has_job('PreventFraudFile-test')
    env = os.getenv("ENV")
    print('選擇發布構建的應用是:', env)
    if env == 'Web':
    print('開始Build構建PreventFraud-Web項目!')
    if Web_Job == True:
        #獲取job名稱
        job = server.get_job('PreventFraud-test')
        print('要Build構建的job是:', job)
        #構建,無參數的構建
        #params = {'Branch': 'oriin/master', 'host': '192.168.1.1'}
        res = server.build_job('PreventFraud-test')
        print('開始觸發遠程Job的構建,請查看遠程Job:%s' % job)
        print(res)
        #print(job.__dict__['_data']['builds'])
        url = job.__dict__['_data']['lastBuild']['url']
        number = job.__dict__['_data']['lastBuild']['number']
        obj = Build(url, number, job)
        print('此次構建的Job名稱:%s,Job的URL是:%s, 是第 %d 次構建。' % (job, url, number))
        print('構建的結果:', obj.get_status())
    else:
        print('要構建的Job不存在,請檢查!')
    elif env == 'File':
    print('開始Build構建PreventFraud-File項目!')
    if File_Job == True:
        #獲取job名稱
        job = server.get_job('PreventFraudFile-test')
        print('要遠程觸發Build構建的job是:', job)
        #構建,無參數的構建
        #params = {'Branch': 'oriin/master', 'host': '192.168.1.1'}
        res = server.build_job('PreventFraudFile-test')
        print('開始觸發遠程Job的構建,請查看遠程Job:%s' % job)
        print(res)
        #print(job.__dict__['_data']['builds'])
        url = job.__dict__['_data']['lastBuild']['url']
        number = job.__dict__['_data']['lastBuild']['number']
        obj = Build(url, number, job)
        print('此次構建的Job名稱:%s,Job的URL是:%s, 是第 %d 次構建。' % (job, url, number))
        print('構建的結果:', obj.get_status())
    else:
        print('要構建的Job不存在,請檢查!')
    else:
    print('請選擇正確ENV環境項目!')
  • 構建
    Job-C中選擇帶參數構建,點擊“Build with Parameters"進入后在”ENV“中選擇”Web“構建,此時會遠程觸發Job-A構建。如下圖所示:
    Python+JenkinsApi自動化部署.Net Core項目
    Job-C控制臺輸出情況:
    Python+JenkinsApi自動化部署.Net Core項目
    幾秒鐘后,查看Job-A控制臺輸出情況:
    Python+JenkinsApi自動化部署.Net Core項目
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宣城市| 镇沅| 潮安县| 隆德县| 黎平县| 清丰县| 涞水县| 青神县| 东明县| 平利县| 洪泽县| 建始县| 加查县| 疏勒县| 通化县| 文登市| 稻城县| 临西县| 莱州市| 阳西县| 康定县| 仁寿县| 鄂州市| 南平市| 瑞昌市| 古交市| 汾阳市| 遵化市| 吉木乃县| 拜城县| 简阳市| 慈溪市| 邢台县| 平谷区| 个旧市| 洞头县| 明星| 南漳县| 化隆| 江城| 宜昌市|