最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

.Net微服務(wù)實(shí)戰(zhàn)之CI/CD(二)

2020-07-29 09:38 作者:朝夕教育  | 我要投稿


docker swarm的初始化

把相關(guān)涉及到docker swarm的節(jié)點(diǎn)端口開啟

firewall-cmd?--permanent?--zone=public?--add-port=2377/tcp
firewall-cmd?--permanent?--zone=public?--add-port=4789/udp
firewall-cmd?--permanent?--zone=public?--add-port=7946/udp
firewall-cmd?--reload

選取Server B作為Manager節(jié)點(diǎn),執(zhí)行下面的指令后會(huì)出現(xiàn)docker swarm join的指令文本,復(fù)制保存下來

docker?swarm?init?--advertise-addr?192.168.88.141

Server A和Server C為Worker節(jié)點(diǎn),執(zhí)行剛剛保存下來指令

docker?swarm?join?--token?SWMTKN-1-0odogegq3bwui4o76aq5v05doqqvuycb5jmuckjmvzy4bfmm59-ewht2cz6fo0r39ky44uv00aq5?192.168.88.141:2377

查看節(jié)點(diǎn)信息

docker?node?ls


私有Nuget的安裝

選擇Server C基于docker的Nuget安裝

docker?run?-d?\???????????-p?8081:80?\???????????--env?NUGET_API_KEY=chengong?\???????????-v?/root/nuget/database:/var/www/db?\???????????-v?/root/nuget/packages:/var/www/packagefiles?\???????????--name?nuget-server?\
???????????sunside/simple-nuget-server

開放相關(guān)8081端口

firewall-cmd?--permanent?--add-port=8081/tcp
firewall-cmd?--reload

上傳包指令,注意包名有中文會(huì)導(dǎo)致上傳出現(xiàn)bad request

dotnet?nuget?push?--source?http://192.168.88.139:8081/?-k?chengong?TestPackage.1.0.0.nupkg

刪除包指令

dotnet?nuget?delete?--source?http://192.168.88.139:8081/?-k?chengong??TestPackage?1.0.0

如果在Windowsx系統(tǒng)可以通過工具上傳

https://github.com/NuGetPackageExplorer/NuGetPackageExplorer

Gitlab的安裝

在Server A服務(wù)器上基于docker安裝

sudo?docker?run?-d?\??--hostname?192.168.88.138?\??-p?443:443?-p?8080:80?-p?2222:22?\??--name?gitlab?\??--restart?always?\??-v?/root/gitlab/config:/etc/gitlab:Z?\??-v?/root/gitlab/logs:/var/log/gitlab:Z?\??-v?/root/gitlab/data:/var/opt/gitlab:Z?\
??gitlab/gitlab-ce

開放端口

firewall-cmd?--permanent?--add-port=8080/tcp
firewall-cmd?--reload

第一次啟動(dòng)會(huì)有點(diǎn)慢,需要耐心的等待一下(幾分鐘),初始化完了后進(jìn)入系統(tǒng)設(shè)置root的密碼,登錄進(jìn)去我們創(chuàng)建兩個(gè)項(xiàng)目,一個(gè)Web應(yīng)用,一個(gè)工具庫(kù),等會(huì)需要用到

Jenkins的安裝

在Server B服務(wù)器基于docker安裝Jenkins

mkdir?-p?/root/jenkins
setenforce?0
docker?run?--name?jenkins?-u?0?-d??--restart?always?-v?/root/jenkins/jenkins_home:/var/jenkins_home?-p?8080:8080?-p?50000:50000?jenkins/jenkins:lts

開放端口

firewall-cmd?--permanent?--add-port=8080/tcp
firewall-cmd?--reload

啟動(dòng)完了后需要等待一會(huì),我們先去查看Jenkins的docker log,我們找到下面那段密碼,在Jenkins歡迎頁(yè)輸入,設(shè)置好管理員后,選擇Custom Select,如果您對(duì)網(wǎng)絡(luò)有自信就直接點(diǎn)繼續(xù),如果您對(duì)網(wǎng)絡(luò)沒自信,避免花了很長(zhǎng)的時(shí)間還沒安裝好插件就直接啥都不選繼續(xù)。(如果出現(xiàn)一個(gè)XXX失敗代理的頁(yè)面直接跳過)

docer?logs?xxx
Please?use?the?following?password?to?proceed?to?installation:
53d4a2880bf8460c8ff61936278855ca

插件自動(dòng)下載完后了,終于進(jìn)去了,如果有沒有安裝成功的都得保證以下三個(gè)插件安裝好,Gitlab Hook 、Gitlab、Push Over SSH.

登錄后,在左側(cè)點(diǎn)擊【系統(tǒng)管理】,拖下去點(diǎn)擊 【插件管理】,確保Gitlab Hook 、Gitlab、Push Over SSH成功安裝,如果無法順利安裝則到https://plugins.jenkins.io/下載插件手動(dòng)上傳。

修改時(shí)區(qū),進(jìn)入Jenkins容器

docker?exec?-it?81?/bin/bash

執(zhí)行下面命令

tzselect4911cp?/usr/share/zoneinfo/Asia/Shanghai??/etc/localtime

##查看時(shí)間date?-R

在Server B安裝.Net SDK,因?yàn)樵赟erver B安裝了Jenkins,因此會(huì)基于Server B的環(huán)境進(jìn)行.Net的應(yīng)用進(jìn)行打包、發(fā)布

添加下載源:

rpm?-Uvh?https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

下載安裝:

sudo?yum?install?dotnet-sdk-3.1

?在Server B添加私有Nuget包源,因?yàn)樵?Net Core應(yīng)用 Build和Publish的時(shí)候會(huì)觸發(fā)Restore指令(還原包),默認(rèn)只有微軟的nuget源,如果缺少了私有Nuget源會(huì)還原包失敗

dotnet?nuget?add?source?http://192.168.88.139:8081?-n?LocalNugetServer

列出已有包源

dotnet?nuget?list?source

當(dāng)然可以通過 dotnet restore -s http://192.168.88.139:8081 指令指定還原包源,但是為了避免如果服務(wù)地址變動(dòng)后shell腳本會(huì)大面積的修改,還是建議通過dotnet nuget add soure指令。

那么到這里所有的關(guān)于Linux的工具安裝、初始化的準(zhǔn)備工作都完成了,那么接下來就是講解Jenkins結(jié)合Gitlab,把應(yīng)用與工具包發(fā)布到Nuget與Docker。

Jenkins的使用

在一切開始之前得把SSH配置好,因?yàn)楹罄m(xù)會(huì)使用到,在【SSH Servers】模塊把服務(wù)器地址、賬號(hào)密碼填進(jìn)去保存。

返回到首頁(yè)面板點(diǎn)擊【新建任務(wù)】-選擇【構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目】(FreeStyle Project)。

自由風(fēng)格的項(xiàng)目更多是使用shell腳本結(jié)合相應(yīng)平臺(tái)的指令實(shí)現(xiàn)自動(dòng)化,因此建議大家對(duì)shell腳本有個(gè)初步的認(rèn)識(shí)與學(xué)習(xí),雖然Jenkins也提供了對(duì)應(yīng)平臺(tái)語言的一些插件,但是只要您熟悉了shell就會(huì)發(fā)現(xiàn)它的靈活性與便捷性。

接下來我們只要關(guān)注3個(gè)模塊,源碼管理、構(gòu)建觸發(fā)器、構(gòu)建

源碼構(gòu)建,填寫您要自動(dòng)發(fā)布的項(xiàng)目的源碼地址,并輸入賬號(hào)密碼。

構(gòu)建觸發(fā)器,這里勾選Build when a chenge ……,把URL 復(fù)制記錄下來,等下在Gitlab需要使用到。這里就是與Gitlab webhook做了聯(lián)動(dòng),可以理解成Jenkins開放了一個(gè)接口,讓Gitlab被push代碼后會(huì)主動(dòng)告訴Jenkins做一次自動(dòng)化構(gòu)建。

構(gòu)建,這里其實(shí)就是執(zhí)行shell腳本完成發(fā)布。這里得注意下我是用ssh,因?yàn)槲业腏enkins是使用了docker安裝的,如果我使用了【構(gòu)建】模塊里的【執(zhí)行shell】就會(huì)在Jenkins環(huán)境里進(jìn)行編譯、打包,同時(shí)也需要安裝相應(yīng)的環(huán)境 例如dotnet sdk等。我的環(huán)境都是裝在了Server B這個(gè)宿主環(huán)境,因此通過目錄掛載與SSH完成了這一次構(gòu)建。

當(dāng)然有同學(xué)想在Jenkins環(huán)境先打包然后通過SSH的Transfers模塊進(jìn)行文件傳也是可以的。?

構(gòu)建腳本

這個(gè)是工具庫(kù)發(fā)布到私有Nuget的腳本

#腳本開始執(zhí)行echo?'腳本開始執(zhí)行'base_path=/root/jenkins/jenkins_home/workspace/TestNuget
nuget_url=http://192.168.88.139:8081/nuget_api_key=chengong

project_path=$base_path/TestNuget
package_path=$project_path/bin/Debug
cd?$project_pathrm?-rf?$package_path/*.nupkg

dotnet?pack?$project_path?&&
????dotnet?nuget?push?--source?$nuget_url?-k?$nuget_api_key?$package_path/*.nupkg?>/dev/null

if?[?$??-eq?0?];?then
????echo?'發(fā)布成功:'$project_path''
else
????echo?'發(fā)布失敗:'$project_path''
fi

echo?'腳本執(zhí)行結(jié)束'

下面這個(gè)是Web應(yīng)用發(fā)布到單臺(tái)服務(wù)器的腳本

#!/bin/bashecho?'腳本開始執(zhí)行'base_path=/root/jenkins/jenkins_home/workspace/TestDockerSwarm

project_name=testdockerswarm
project_path=$base_path/TestDockerSwarm
publish_path=$project_path/bin/Release/netcoreapp2.2/publish

cd?$project_pathrm?-rf?$project_path/bin

dotnet?publish?-c?Release?&&?(
????cd?$publish_path?&&
????????docker?stop?$project_name
????docker?rm?$project_name
????docker?image?rm?$project_name
????docker?build?-t?$project_name?.?&&
????????docker?run?-d?-p?5000:80?-e?ASPNETCORE_ENVIRONMENT="Development"?--name?$project_name?$project_name?&&????????echo?'發(fā)布成功:'$project_path''?||????????echo?'發(fā)布失敗:'$project_path'')?||?echo?'發(fā)布失敗:'$project_path''echo?'腳本執(zhí)行結(jié)束'

下面這個(gè)是通過Docker Swarm把Web應(yīng)用發(fā)布到多臺(tái)服務(wù)器

#!/bin/?=/root/jenkins/jenkins_home/workspace/==$base_path/=$project_path/bin/Release/netcoreapp2./=.:=`??-rf?$project_path/-c?Release?&&|??$private_registry_url/$project_name?|???|?-t?$private_registry_url/$project_name:$version?.//&&-d?-p?:?--replicas??-e?ASPNETCORE_ENVIRONMENT=??--constraint=?\
?????????--name?$project_name?$private_registry_url/$project_name:$version?&&?????????$project_path?||?????????$project_path||??$project_path

上面腳本有一處地址得注意下我指定了--constraint=" node.role==worker"?也就是woker節(jié)點(diǎn)才會(huì)部署應(yīng)用,因?yàn)槲叶x了ServerA和C是Web服務(wù)器。當(dāng)然各位可以按照自己的需要處理。

Dockerfile

FROM?microsoft/dotnet:2.2-aspnetcore-runtime?AS?base
WORKDIR?/app
EXPOSE?80FROM?base?AS?final
WORKDIR?/app
COPY?./?/app
ENTRYPOINT?["dotnet",?"TestDockerSwarm.dll"]

Gitlab的使用

進(jìn)入Gitlab,點(diǎn)擊【Admin Area】-【Network】,勾選選項(xiàng)后保存

進(jìn)入一個(gè)Project,點(diǎn)擊【Setting】-【W(wǎng)ebhooks】,把剛剛在Jenkins的復(fù)制下來的Url填寫進(jìn)去,勾選相應(yīng)的觸發(fā)事件后保存。

結(jié)束

?  以上就是本篇的內(nèi)容了,完成了部署后,可以在Jenkins點(diǎn)擊【立刻構(gòu)建】和在Gitlab遷入一次代碼查看運(yùn)行效果。Shell腳本作為一個(gè)demo,如果對(duì)腳本有更好的建議和優(yōu)化的寫法可以在評(píng)論區(qū)反饋給我。

本文轉(zhuǎn)載自博客園:

https://www.cnblogs.com/skychen1218/p/13384073.html


.Net微服務(wù)實(shí)戰(zhàn)之CI/CD(二)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
诏安县| 孟村| 梨树县| 拉萨市| 凉城县| 班戈县| 靖江市| 东阳市| 克东县| 东平县| 潍坊市| 长治市| 阜城县| 东阳市| 新巴尔虎左旗| 高唐县| 遵义市| 搜索| 任丘市| 安溪县| 大洼县| 内黄县| 孙吴县| 吉安市| 金沙县| 修水县| 康乐县| 英吉沙县| 藁城市| 且末县| 中西区| 西和县| 瓮安县| 富平县| 锡林郭勒盟| 崇明县| 孟州市| 巍山| 咸宁市| 林口县| 兴文县|