亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Jenkins+GitLab+Msbuild+Python自

發布時間:2020-03-01 21:20:41 來源:網絡 閱讀:818 作者:Blue后花園 欄目:系統運維

前言
企業線上環境是.NET Framework,自然使用Windows Server平臺。現在需求是要對.NET項目進行自動化持續集成,免得每次手動發布,一臺臺機器登錄,那種痛苦干過的都懂得,繁瑣、效率低下、誤操作等等。而.Net與Jenkins的結合使用目前要達到完全自動化還是有局限性的,關鍵是Windows環境,各種命令無法向Linux方便。.NET Core可能會好一些。現有的沒辦法,得上。
基本組合是Jenkins + Gitlab + Msbuild。實現代碼提交、編譯、部署。

  • 安裝環境與流程
    1) Jenkins是java產品,需安裝JDK8,Windows server 2012環境。
    2) .NET項目需.Net Framework支持,這里選擇Framework4.6.1。Nuget解決依賴。構建工具Msbuild,基于VS2019下的Msbuild。以上都基于Windows server 2012。剛開始選擇server 2008R2,后面構建打包這種問題,困擾2天,果斷換。
    3) 代碼倉庫GitLab。選用Centos7.6。
    4) .Net項目持續集成流程:
    Jenkins+GitLab+Msbuild+Python自
  • Jenkins操作
    1) Jenkins具體安裝略,傻瓜式下一步...安裝完成。下載見官方網站:https://jenkins.io/download/ ,找到downlaod下載,這里項目基于.Net Freamwork,Jenkins中構建需編譯.net程序,方便編譯,選擇安裝Windows版本。
    這里Jenkins安裝前,需配置好JDK環境。
    2) 插件安裝
    Jenkins安裝好后,進入系統管理->插件管理,安裝好Msbuild、GitLab、ftp、python等。
    Jenkins+GitLab+Msbuild+Python自
    Jenkins+GitLab+Msbuild+Python自
    3) 新建Job
    Jenkins+GitLab+Msbuild+Python自
    4) Job設置
    設置保留構建的天數,和構建最大數量
    Jenkins+GitLab+Msbuild+Python自
    自定義workspace工作空間
    Jenkins+GitLab+Msbuild+Python自
    5) 獲取Git倉庫代碼
    Jenkins+GitLab+Msbuild+Python自
    指定Git倉庫代碼項目分支,這里為測試環境,統一使用dev分支構建。
    主要有以下配置項:
    Repositories URL:git方式獲取代碼路徑,走ssh協議。
    Credentials:授權登錄信息,添加憑據。這里使用SSH方式(用戶名+私鑰方式)登錄。需先Jenkins配置SSH方式登錄Gitlab。
    Jenkins+GitLab+Msbuild+Python自
    Branches to build:指定分支。
    6) 構建程序配置
    6.1安裝插件后,進入系統管理->Global Tool Configuration,找到MSbuild配置選項。
    Jenkins+GitLab+Msbuild+Python自
    這里Path to MABuild配置VS下的MSBuild。不使用C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild目錄下的msbuild工具。
    6.2 構建前創建Windows batch command,解決項目軟件包依賴,配置Nuget。
    Jenkins+GitLab+Msbuild+Python自
    Jenkins+GitLab+Msbuild+Python自
    需在本地安裝好nuget。Windows命令如下:
    "E:\Program Files (x86)\Tools\nuget.exe" restore "E:\jenkins-workspace\APIDataBM-test\BM.BMData.Web\BM.BMData.sln" -ConfigFile "C:\Users\Administrator\AppData\Roaming\NuGet\NuGet.Config" -NoCache

    其中Nuget restore命令是獲取項目需要的程序包,解決包的依賴問題。
    7) 構建環境配置
    Jenkins+GitLab+Msbuild+Python自
    選擇“Build a Visual Studio project or solution using MSBuild”配置如下:
    Jenkins+GitLab+Msbuild+Python自
    MSBuild Version:之前Global Tool Configuration中配置的版本。
    MSBuild Build File:要構建的解決方案sln文件,也可以是項目.csproj文件。注意都是相對工作的路徑。
    Command Line Arguments
    /t:Rebuild 重新生成
    /p:Configuration=Debug 生成Debug模式
    /t:resolveReferences
    /p:WebProjectOutputDir="E:\Publish-web\APIData-Test\web" 構建后sln輸出目標目錄
    /p:OutputPath="E:\Publish-web\APIData-Test\web\bin" 輸出目標的bin目錄
    8) 項目config配置
    項目各個環境配置集中存儲于Gitlab某個倉庫中,開發需對配置更改直接Gitlab中更改,方便統一管理,并對某些敏感信息進行過濾,配置文件安全性增加了。
    Jenkins+GitLab+Msbuild+Python自
    Windows batch command的bat文件內容如下:

    @echo off
    cd /d E:\git-config\config-public
    git checkout dev
    git pull origin dev
    echo 選擇部署的服務器IP: %1
    xcopy E:\git-config\config-public\test\GroupAPIData\AB\%1 E:\jenkins-workspace\APIDataBK\TEST\AB /exclude:E:\Python-scripts\test\exclude.txt /s /e /h /y
    @echo off<nul 3>nul

    其中變量名表示方式Linux和Windows系統平臺方式有區別:
    Windows:%BUILD_ENV% %變量名%
    Linux:${BUILD_ENV} ,也可直接使用 $BUILD_ENV
    從Git Lab倉庫中,pull下某個分支的最新配置文件。然后在本地的git config目錄下copy配置文件到項目中,其中exclude配置指定無需copy的文件,如隱藏的.gitkeep文件等。
    注:運行Jenkins程序需改成系統administrator賬戶權限,默認是本地系統賬戶(system),否則執行到git pull命令是報類似權限問題。
    Jenkins+GitLab+Msbuild+Python自
    9) 參數化構建
    發布構建的服務器是多臺情況下,這里選擇使用項目參數化方式,Jenkins中找到"This project is parameterized"項,選擇“choice parameter”,填寫好名稱(這個會作為參數后面使用到)、選項(這里根據實際環境用IP)、描述。如下圖:
    Jenkins+GitLab+Msbuild+Python自

  • 發布應用
    應用構建成功后,接下來是將構建項目的輸出目錄copy到應用服務器相應的站點目錄中,由于目標的應用服務器都是windows系統,因此無法像linux系統一樣通過ssh遠程命令操作。目前提供了三種解決方案,使用Ftp直接上傳到應用服務器,使用Windows下的Rsync方式,以及Python腳本的方式。
    1) Ftp方式
    1.1 需先Jenkins上安裝Ftp插件。同時在發布的目標應用服務器安裝配置好Ftp服務。
    安裝插件后,進入系統管理->Global Tool Configuration,找到FTP repository hosts配置選項。
    Jenkins+GitLab+Msbuild+Python自
    Porfile Name:隨便取個名字,后面Job配置會應用到。
    hostname:Ftp主機名(端口號默認21)
    TimeOut:設置timeout
    Root Repository Path:Ftp服務端跟/目錄
    User Name:Ftp用戶名
    Password:Ftp密碼
    1.2 項目配置
    構建后操作->增加構建后操作步驟->Publish artifacts to FTP
    Jenkins+GitLab+Msbuild+Python自
    FTP site:全局中配置的
    Source:選擇發布包路徑,即項目構建輸出的目錄。
    Remote directory:放到遠程目標路徑(相對于Ftp根目錄的路徑)
    前提先在要發布的目標服務器上先安裝好FTP服務,搭建IIS的ftp站點,作為FTP服務器端,具體安裝略。
    Jenkins+GitLab+Msbuild+Python自
    配置完成后,Jenkins上點擊構建。
    2) Rsync方式
    2.1 Windows server環境配置使用rsync命令。
    Jenkins的Job配置項構建中,增加構建步驟->Execute Windows batch command
    Jenkins+GitLab+Msbuild+Python自
    2.2 配置rsync
    Windows server中使用rsync命令需要安裝配置cwRsync,有Server端和Client端。現在官網已經不免費提供cwRsync Server服務了。應用服務器端安裝cwRsync Server,Jenkins服務器配置rsync的Client端。具體cwRsync Server與Client安裝略。
    cwRsync Server默認安裝下,cwRsync Server端的C:\Program Files (x86)\ICW\rsync.conf文件配置如下:
    uid = 0
    gid = 0
    use chroot = false
    strict modes = false
    hosts allow = *
    log file = rsyncd.log
    port = 873
    [APIData]
    path = /cygdrive/e/Web/APIData-test/web
    secrets file = /cygdrive/c/Program Files (x86)/ICW/rsyncd.secrets
    list = true
    auth users = rsync_user
    read only = false

    cwRsync Client端的rsync命令在Jenkins中的配置如下:
    Jenkins+GitLab+Msbuild+Python自

    "C:\Program Files (x86)\cwRsync\bin\rsync.exe"  -avzP  --progress --delete  --port=873 --password-file="/cygdrive/c/Program Files (x86)/cwRsync/passwd.txt" /cygdrive/e/Publish-web/APIData-Test2/web/  rsync_user@10.10.10.53::APIData

    配置完成后,Jenkins上點擊構建。
    3) Python腳本實現方式
    winRM服務是windows server下PowerShell的遠程管理服務。Python腳本可通過連接winRM模塊操作windows命令行。
    3.1配置winRM服務
    在被控制windows server上winRM服務操作:
    查看winRM服務狀態,默認都是未啟動狀態,下面命令執行后無任何結果輸出,需執行后續步驟進行開啟。

    > winrm enumerate winrm/config/listener

    配置winRM服務啟動

    > winrm quickconfig

    查看windows的winrm service listener

    > winrm e winrm/config/listener

    winrm service配置auth

    > winrm set winrm/config/service/auth @{Basic="true"}

    配置winrm service 加密方式為允許非加密

    > winrm set winrm/config/service @{AllowUnencrypted="true"}

    3.2配置python腳本
    Job配置項構建中,增加構建步驟->Execute Windows batch command
    Jenkins+GitLab+Msbuild+Python自
    Python腳本如下:

    import winrm
    import os
    import sys
    import time
    env = os.getenv("ENV")
    print('選擇發布構建的服務器ENV是:', env)
    if env == '10.10.10.10':
    win2008r2 = winrm.Session('http://10.10.10.10:5985/wsman',auth=('deploy_user','xxxxxx'))
    ip = win2008r2.run_cmd('ipconfig | findstr "10.10.10.10"')
    app_list = win2008r2.run_cmd('C:\\Windows\\System32\\inetsrv\\appcmd.exe list app')
    app_stop = win2008r2.run_cmd('C:\\Windows\\System32\\inetsrv\\appcmd.exe stop site DataapiBM')
    backup = win2008r2.run_cmd('xcopy D:\\Web-prd\\DataapiBM  D:\\Web-prd\\backup\\DataapiBM-%date:~8,2%月%date:~11,2%日%time:~0,2%時%time:~3,2%分%time:~6,2%秒\ /exclude:D:\\Web-prd\\backup\\exclude.txt /ryhs')
    rsync_code = win2008r2.run_cmd('C:\\cwRsync\\bin\\rsync.exe  -vzrtopg  --numeric-ids  --progress  --port=1873 --password-file=/cygdrive/c/cwRsync/passwd.txt<c:\cwRsync\passwd.txt   rsync_user@10.10.10.10::APIDataBM    /cygdrive/d/Web-prd/DataapiBM')
    app_start = win2008r2.run_cmd('C:\\Windows\\System32\\inetsrv\\appcmd.exe start site DataapiBM')
    app = win2008r2.run_cmd('C:\\Windows\\System32\\inetsrv\\appcmd.exe list app | findstr DataapiBM')
    print("當前發布的服務器IP:")
    print(ip.std_out)
    print("列出當前應用pool站點app")
    print(app_list.std_out.decode())
    print(app_list.std_err)
    print("開始停DataapiBM站點app")
    print("Stoping...")
    print(app_stop.std_out.decode())
    print(app_stop.std_err)
    time.sleep(3)
    print("開始備份DataapiBM站點程序...")
    print(backup.std_out)
    print(backup.std_err)
    time.sleep(3)
    print("開始從代碼倉庫同步DataapiBM最新程序...")
    print(rsync_code.std_out.decode())
    print(rsync_code.std_err)
    time.sleep(5)
    print("開始啟動DataapiBM站點服務")
    print("Starting...")
    print(app_start.std_out.decode())
    print(app_start.std_err)
    time.sleep(5)
    print(app.std_out.decode())
    print(app.std_err)
    print("站點服務DataapiBM已啟動成功,發布完成,請驗證!")
    elif env == '10.10.10.11':
    win2008r2 = winrm.Session('http://10.10.10.11:5985/wsman',auth=('deploy_user','HicoreP@ss'))
    ip = win2008r2.run_cmd('ipconfig | findstr "10.10.10.11"')
    app_list = win2008r2.run_cmd('C:\\Windows\\System32\\inetsrv\\appcmd.exe list app')
    app_stop = win2008r2.run_cmd('C:\\Windows\\System32\\inetsrv\\appcmd.exe stop site DataapiBM')
    backup = win2008r2.run_cmd('xcopy D:\\Web-prd\\DataapiBM  D:\\Web-prd\\backup\\DataapiBM-%date:~8,2%月%date:~11,2%日%time:~0,2%時%time:~3,2%分%time:~6,2%秒\ /exclude:D:\\Web-prd\\backup\\exclude.txt /ryhs')
    rsync_code = win2008r2.run_cmd('C:\\cwRsync\\bin\\rsync.exe  -vzrtopg  --numeric-ids  --progress  --port=1873 --password-file=/cygdrive/c/cwRsync/passwd.txt<c:\cwRsync\passwd.txt   rsync_user@10.10.10.11::APIDataBM    /cygdrive/d/Web-prd/DataapiBM')
    app_start = win2008r2.run_cmd('C:\\Windows\\System32\\inetsrv\\appcmd.exe start site DataapiBM')
    app = win2008r2.run_cmd('C:\\Windows\\System32\\inetsrv\\appcmd.exe list app | findstr DataapiBM')
    print("當前發布的服務器IP:")
    print(ip.std_out)
    print("列出當前應用pool站點app")
    print(app_list.std_out.decode())
    print(app_list.std_err)
    print("開始停DataapiBM站點app")
    print("Stoping...")
    print(app_stop.std_out.decode())
    print(app_stop.std_err)
    time.sleep(3)
    print("開始備份DataapiBM站點程序...")
    print(backup.std_out)
    print(backup.std_err)
    time.sleep(3)
    print("開始從代碼倉庫同步DataapiBM最新程序...")
    print(rsync_code.std_out.decode())
    print(rsync_code.std_err)
    time.sleep(5)
    print("開始啟動DataapiBM站點服務")
    print("Starting...")
    print(app_start.std_out.decode())
    print(app_start.std_err)
    time.sleep(5)
    print(app.std_out.decode())
    print(app.std_err)
    print("站點服務DataapiBM已啟動成功,發布完成,請驗證!")
    else:
    print('請正確選擇部署環境!')

    配置完成后,點擊“Build with Parameters”,選擇下拉框中對應的服務器節點進行構建。
    Jenkins+GitLab+Msbuild+Python自
    查看構建情況,通過控制臺查看:
    Jenkins+GitLab+Msbuild+Python自
    Jenkins+GitLab+Msbuild+Python自
    控制臺輸出構建詳細的log信息,如果構建成功,會有個藍色的圈圈,并且控制臺最后輸出“Finished: SUCCESS”信息,表示此Job構建成功。相應的如果構建失敗,控制臺也會輸出報錯信息。
    自此,項目自動化構建完成。當然其中有些環節還需繼續優化。測試比較下來,應用發布這步操作,winRM+Python方式比較靈活方便。

向AI問一下細節

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

AI

金堂县| 阿勒泰市| 棋牌| 靖安县| 兴仁县| 太康县| 萍乡市| 台中县| 鹰潭市| 彭阳县| 获嘉县| 临洮县| 文安县| 光山县| 康定县| 吐鲁番市| 安丘市| 武川县| 黎平县| 渭源县| 同德县| 读书| 东丽区| 大宁县| 梁山县| 青岛市| 萍乡市| 二手房| 秦安县| 电白县| 汾西县| 广安市| 磴口县| 云安县| 彰化县| 阿拉善左旗| 屯门区| 密山市| 宾阳县| 井研县| 加查县|