成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Jenkins+GitLab+Msbuild+Python自

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

成都網站設計、做網站,成都做網站公司-創(chuàng)新互聯建站已向1000多家企業(yè)提供了,網站設計,網站制作,網絡營銷等服務!設計與技術結合,多年網站推廣經驗,合理的價格為您打造企業(yè)品質網站。

  • 安裝環(huán)境與流程
    1) Jenkins是java產品,需安裝JDK8,Windows server 2012環(huán)境。
    2) .NET項目需.Net Framework支持,這里選擇Framework4.6.1。Nuget解決依賴。構建工具Msbuild,基于VS2019下的Msbuild。以上都基于Windows server 2012。剛開始選擇server 2008R2,后面構建打包這種問題,困擾2天,果斷換。
    3) 代碼倉庫GitLab。選用Centos7.6。
    4) .Net項目持續(xù)集成流程:
    Jenkins+GitLab+Msbuild+Python自
  • Jenkins操作
    1) Jenkins具體安裝略,傻瓜式下一步...安裝完成。下載見官方網站:https://jenkins.io/download/ ,找到downlaod下載,這里項目基于.Net Freamwork,Jenkins中構建需編譯.net程序,方便編譯,選擇安裝Windows版本。
    這里Jenkins安裝前,需配置好JDK環(huán)境。
    2) 插件安裝
    Jenkins安裝好后,進入系統(tǒng)管理->插件管理,安裝好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倉庫代碼項目分支,這里為測試環(huán)境,統(tǒng)一使用dev分支構建。
    主要有以下配置項:
    Repositories URL:git方式獲取代碼路徑,走ssh協議。
    Credentials:授權登錄信息,添加憑據。這里使用SSH方式(用戶名+私鑰方式)登錄。需先Jenkins配置SSH方式登錄Gitlab。
    Jenkins+GitLab+Msbuild+Python自
    Branches to build:指定分支。
    6) 構建程序配置
    6.1安裝插件后,進入系統(tǒng)管理->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 構建前創(chuàng)建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) 構建環(huán)境配置
    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配置
    項目各個環(huán)境配置集中存儲于Gitlab某個倉庫中,開發(fā)需對配置更改直接Gitlab中更改,方便統(tǒng)一管理,并對某些敏感信息進行過濾,配置文件安全性增加了。
    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系統(tǒng)平臺方式有區(qū)別:
    Windows:%BUILD_ENV% %變量名%
    Linux:${BUILD_ENV} ,也可直接使用 $BUILD_ENV
    從Git Lab倉庫中,pull下某個分支的最新配置文件。然后在本地的git config目錄下copy配置文件到項目中,其中exclude配置指定無需copy的文件,如隱藏的.gitkeep文件等。
    注:運行Jenkins程序需改成系統(tǒng)administrator賬戶權限,默認是本地系統(tǒng)賬戶(system),否則執(zhí)行到git pull命令是報類似權限問題。
    Jenkins+GitLab+Msbuild+Python自
    9) 參數化構建
    發(fā)布構建的服務器是多臺情況下,這里選擇使用項目參數化方式,Jenkins中找到"This project is parameterized"項,選擇“choice parameter”,填寫好名稱(這個會作為參數后面使用到)、選項(這里根據實際環(huán)境用IP)、描述。如下圖:
    Jenkins+GitLab+Msbuild+Python自

  • 發(fā)布應用
    應用構建成功后,接下來是將構建項目的輸出目錄copy到應用服務器相應的站點目錄中,由于目標的應用服務器都是windows系統(tǒng),因此無法像linux系統(tǒng)一樣通過ssh遠程命令操作。目前提供了三種解決方案,使用Ftp直接上傳到應用服務器,使用Windows下的Rsync方式,以及Python腳本的方式。
    1) Ftp方式
    1.1 需先Jenkins上安裝Ftp插件。同時在發(fā)布的目標應用服務器安裝配置好Ftp服務。
    安裝插件后,進入系統(tǒng)管理->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:選擇發(fā)布包路徑,即項目構建輸出的目錄。
    Remote directory:放到遠程目標路徑(相對于Ftp根目錄的路徑)
    前提先在要發(fā)布的目標服務器上先安裝好FTP服務,搭建IIS的ftp站點,作為FTP服務器端,具體安裝略。
    Jenkins+GitLab+Msbuild+Python自
    配置完成后,Jenkins上點擊構建。
    2) Rsync方式
    2.1 Windows server環(huán)境配置使用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服務狀態(tài),默認都是未啟動狀態(tài),下面命令執(zhí)行后無任何結果輸出,需執(zhí)行后續(xù)步驟進行開啟。

    > 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('選擇發(fā)布構建的服務器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("當前發(fā)布的服務器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已啟動成功,發(fā)布完成,請驗證!")
    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("當前發(fā)布的服務器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已啟動成功,發(fā)布完成,請驗證!")
    else:
    print('請正確選擇部署環(huán)境!')

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

網頁題目:Jenkins+GitLab+Msbuild+Python自
文章分享:http://jinyejixie.com/article46/gpgseg.html

成都網站建設公司_創(chuàng)新互聯,為您提供網站營銷、用戶體驗商城網站、Google、ChatGPT

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

h5響應式網站建設
富裕县| 望奎县| 定兴县| 西宁市| 深圳市| 沭阳县| 吴忠市| 崇义县| 博乐市| 怀安县| 遂川县| 罗定市| 延津县| 宿松县| 沧州市| 宁陕县| 浙江省| 霍林郭勒市| 灵丘县| 沙湾县| 鱼台县| 福清市| 扎兰屯市| 藁城市| 大新县| 许昌市| 河曲县| 乌苏市| 通海县| 克什克腾旗| 连云港市| 东兴市| 元江| 新干县| 桑日县| 周宁县| 莎车县| 观塘区| 龙泉市| 安乡县| 韶山市|