GitHub Actions構建鏡像并部署服務

目的

通過GitHub的Actions來(白嫖)部署.Net服務到阿里云服務器。

環境準備

需要一個阿里云服務器并且該服務器還安裝了docker環境,如果環境安裝不清楚可以查看之前的文章。

創建鏡像倉庫

在阿里云的容器鏡像服務中,創建一個鏡像倉庫用來存儲我們測試的鏡像,這里我提前創建倉庫為myexample,地址為registry.cn-hangzhou.aliyuncs.com/zrng/myexample。

準備項目文件

本文主要討論GitHub的Action功能,所以項目文件直接使用之前示例代碼,在Github創建倉庫my-example,該倉庫的代碼使用之前的代碼(倉庫地址為:https://gitee.com/AZRNG/my-example)

隱私信息配置

在指定的倉庫中,選擇Settings=>Secrets=>Actions

315b729e72ac336b9fda0dabf4c35d65.png
img

點擊右上的新建就可以創建想要保存的隱私配置信息

a7cbc4dfb8a8a690400b1520f5e90ad6.png
img

這里我保存了一下鏡像倉庫的賬號密碼等信息。

25a68bdf599e2d88c22a468780d3bd70.png
img

倉庫腳本配置

在倉庫的根目錄新建工作流文件.github/workflows/dotnet.yml(也可以在Actions選項卡中新建),我們將每次提交的項目生成測試鏡像,在dotnet.yml中寫下面內容

#?工作流名稱
name:?Dockeron:push:?#?推送的時候觸發branches:?[?"main"?]?#?推送的分支#?Publish?semver?tags?as?releases.tags:?[?'v*.*.*'?]pull_request:branches:?[?"main"?]env:#?倉庫地址REGISTRY:?registry.cn-hangzhou.aliyuncs.comIMAGE_NAME:?zrng/myexampleIMAGE_TAG:?latestjobs:build:runs-on:?ubuntu-latestpermissions:contents:?readpackages:?write#?This?is?used?to?complete?the?identity?challenge#?with?sigstore/fulcio?when?running?outside?of?PRs.id-token:?writesteps:#?將遠程倉庫中的源代碼領取到workfile自動化構建腳本運行的服務器-?name:?Checkout?repositoryuses:?actions/checkout@v3?#?Login?against?a?Docker?registry?except?on?PR#?https://github.com/docker/login-action-?name:?login?to?${{?env.REGISTRY?}}if:?github.event_name?!=?'pull_request'uses:?docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c?#?用于登錄docker以便我們后續上傳鏡像到自己的鏡像倉庫with:registry:?${{?env.REGISTRY?}}username:?${{?secrets.USERMAME?}}?#?鏡像倉庫用戶名password:?${{?secrets.PASSWORD?}}?#?鏡像倉庫密碼#?生成和推送鏡像??阿里云鏡像倉庫推送有問題#?#?https://github.com/docker/build-push-action#?-?name:?Build?and?push?Docker?image#???id:?build-and-push?#?構建docker鏡像,推送到自己的docker鏡像倉庫#???uses:?docker/build-push-action@ac9327eae2b366085ac7f6a2d02df8aa8ead720a#???with:#?????registry:?${{?env.REGISTRY?}}#?????username:?${{?secrets.USERMAME?}}?#?鏡像倉庫用戶名#?????password:?${{?secrets.PASSWORD?}}?#?鏡像倉庫密碼#?????push:?${{?github.event_name?!=?'pull_request'?}}#?????tags:?${{env.IMAGE_NAME}}:${{env.IMAGE_TAG}}.${{?github.run_id?}}.${{?github.run_number?}}?#動態變量鏡像TAG?使用github運行job和jobid設置tag#?????context:?.?#?相對以遠程倉庫根路徑的dockerfile的路徑#?????file:?./NetByDocker/Dockerfile?#?指定Dockerfile-?name:?Build?the?Docker?imagerun:?|docker?version#?登錄阿里云鏡像倉庫docker?login?--username=${{?secrets.USERMAME?}}?--password=${{?secrets.PASSWORD?}}?registry.cn-hangzhou.aliyuncs.com#?使用Dockerfile構建鏡像??${{env.IMAGE_TAG}}.${{?github.run_id?}}.${{?github.run_number?}}docker?build?.?--file?NetByDocker/Dockerfile?--tag?registry.cn-hangzhou.aliyuncs.com/zrng/myexample:${{env.IMAGE_TAG}}?--tag?registry.cn-hangzhou.aliyuncs.com/zrng/myexample:${{?github.run_number?}}#?推送鏡像到鏡像倉庫docker?push?${{?env.REGISTRY?}}/${{?env.IMAGE_NAME?}}:${{env.IMAGE_TAG}}docker?push?${{?env.REGISTRY?}}/${{?env.IMAGE_NAME?}}:${{?github.run_number?}}#?列出所有鏡像????-?name:?Docker?Images?Lst?run:?docker?images

本來在推送鏡像的時候我們可以直接build-and-push來推送,但是推送到阿里云倉庫有問題,我百度說是阿里云倉庫必須寫前面鏡像地址等信息,所以沒成功,所以換用其他方式來實現

上文中涉及的dockerfile文件內容如下

FROM?mcr.microsoft.com/dotnet/aspnet:6.0?AS?base
WORKDIR?/app
EXPOSE?80FROM?mcr.microsoft.com/dotnet/sdk:6.0?AS?build
WORKDIR?/src
COPY?["NetByDocker/NetByDocker.csproj",?"NetByDocker/"]
RUN?dotnet?restore?"NetByDocker/NetByDocker.csproj"??#?還原項目的Nuget包
COPY?.?.
WORKDIR?"/src/NetByDocker"
RUN?dotnet?build?"NetByDocker.csproj"?-c?Release?-o?/app/build?#?在發布模式下生成項目。?生成工件將寫入中間映像的?app/build/?目錄。FROM?build?AS?publish
RUN?dotnet?publish?"NetByDocker.csproj"?-c?Release?-o?/app/publish?#?在發布模式下發布項目。?已發布的捆綁將寫入最終映像的?app/publish/?目錄。FROM?base?AS?final
WORKDIR?/app
COPY?--from=publish?/app/publish?.
ENTRYPOINT?["dotnet",?"NetByDocker.dll"]?#?啟動

在我們提交代碼并推送中可以去github的Actions選項卡中查看

9ed1a75d81f59f2c1e1eb8fbce6c4dd7.png
img

因為一些笨笨的操作,錯誤了好多次

29a913ef8454e698b2718e0dce8de555.png
img

然后再去阿里云鏡像倉庫查看是否有我們推送上去的鏡像

88b1ff5fb8bc7735b046cd0f271517bb.png
img

已經存在,說明我們生成鏡像并推送的步驟成功了,也可以通過以下命令拉取到

docker?pull?registry.cn-hangzhou.aliyuncs.com/zrng/myexample:latest

部署鏡像

我們需要讓推送成功后,在我們的阿里云服務器上拉取鏡像并啟動,那么先增加服務器的地址、賬號、密碼、端口等變量

f5f854392ff31f7f648556a9d7b626ae.png
img

再修改dotnet.yml文件,在最后追加內容

#?列出所有鏡像????
-?name:?Docker?Images?Lst?
run:?docker?images-?name:?executing?remote?ssh?commands?using?password
uses:?appleboy/ssh-action@master
with:host:?${{?secrets.SERVERHOST?}}username:?${{?secrets.SERVERUSERNAME?}}password:?${{?secrets.SERVERPASSWORD?}}port:?${{?secrets.SERVERPORT?}}script:?docker?run?--name?netsample?-d?-p?8002:80?registry.cn-hangzhou.aliyuncs.com/zrng/myexample

我本來是按照上面這方案走的,結果還得考慮到停止并刪除容器,以及刪除鏡像拉取最新的鏡像,所以我索性直接使用docker-compose去處理了,我在服務器的/root/net目錄,放了一個docker-compose文件,內容如下

version:?'3.4'services:?netsample:container_name:?netsampleimage:?registry.cn-hangzhou.aliyuncs.com/zrng/myexamplerestart:?alwaysenvironment:?-?ASPNETCORE_ENVIRONMENT=Productionnetworks:?-?my-bridgeports:?-?"8002:80"networks:?my-bridge:driver:?bridge

然后在dotnet.yml文件后追加

-?name:?executing?remote?ssh?commands?using?passworduses:?appleboy/ssh-action@masterwith:host:?${{?secrets.SERVERHOST?}}username:?${{?secrets.SERVERUSERNAME?}}password:?${{?secrets.SERVERPASSWORD?}}port:?${{?secrets.SERVERPORT?}}script:?cd?/root/net;docker-compose?pull?&&?docker-compose??up?-d;

然后我提交新增加的代碼,等工作流跑結束后

9f4e2728263bfede016e16257aadc715.png
img

訪問我們項目的swagger(http://IP:8002/swagger/index.html)頁面(前提是阿里云服務器的端口安全組已經設置),既可以看到下面的效果

f400bbcec88dd96b9dd0decbb9019112.png
img

登錄服務器后查看鏡像版本,也是我們剛剛推送的鏡像。

總結

本文完整介紹了如何使用Github Actions做CI&CD,將ASP.NET Core 6.0 程序的main分支打包并部署到阿里云Linux服務器。

如果想在每次dev提交代碼后自動生成服務(不再推送鏡像倉庫),那么可以稍稍修改上面的腳本使用appleboy/ssh-action@master進入某一個目錄(提前拉取好項目的目錄),然后構建鏡像生成容器。

資料

本文完整代碼可以查看倉庫:https://gitee.com/AZRNG/my-example

完整的dotnet.yaml文件可以查看:https://gitee.com/AZRNG/my-example/blob/master/.github/workflows/dotnet.yml

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281899.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20165232 緩沖區溢出漏洞實驗

緩沖區溢出漏洞實驗 實驗準備 實驗環境需要32位的Linux系統,需要下載安裝一些用于編譯 32 位 C 程序的軟件包,代碼如下: $ sudo apt-get update$ sudo apt-get install -y lib32z1 libc6-dev-i386$ sudo apt-get install -y lib32readline-gp…

使用qt的qtcore庫怎么包含_GitHub - coologic/QtCoreExamples: QtCore模塊相關類庫范例

QtCoreExamplesQtCore模塊相關類庫范例QJsonExampleQt進行Json文件讀寫范例QXmlExampleQt使用QXmlStreamReader/QXmlStreamWriter類進行XML文件讀寫范例非不是使用QtXML模塊QSharedMemoryExampleQt使用QSharedMemory實現共享內存QSettingsExample(Blog)Qt使用QSettings配置讀寫…

spfile

1 讓ORACLE自己主動從spfile啟動 SQL> create spfile/dev/vx/rdsk/vgora/lv_spfile from pfile; SQL> shutdown immediate; 改動initora11g.ora文件 /oracle/app/product/11g/db/dbs cp initora11g.ora initora11g.ora_bak echo SPFILE/dev/vx/rdsk/vgora/lv_spfil…

Atcoder 084D - Small Multiple(最短路徑+思維)

分析&#xff1a;這題腦洞新奇...居然是最短路...將0到k-1看做k個點&#xff0c;第t個點向(10*t0,1,2...,9)%k連一條長度為0,,1,2,..,9的邊&#xff0c;然后枚舉s1,2,...,9,算出所有從s到0的最短路&#xff0c;答案就是最短路s的最小值。 1 #include<iostream>2 #include…

Blazor學習之旅(5)數據綁定

【Blazor】| 總結/Edison Zhou大家好&#xff0c;我是Edison。最近在學習Blazor做全棧開發&#xff0c;因此根據老習慣&#xff0c;我會將我的學習過程記錄下來&#xff0c;一來體系化整理&#xff0c;二來作為筆記供將來翻看。本篇&#xff0c;我們來了解下在Blazor中數據是如…

chrome開啟touch屏幕點擊事件

2019獨角獸企業重金招聘Python工程師標準>>> 在chrome瀏覽器輸入 chrome://flags/#top-chrome-md 找到屬性 UI Layout for the browsers top chrome 選擇Hybrid&#xff0c;重啟chrome&#xff0c;如下圖&#xff1a; 轉載于:https://my.oschina.net/swingcoder/blo…

安卓如何更換wps黑金會員圖標_wps圖標(手機wps會員圖標黑色)

嘗試右鍵文件--打開方式--選擇默認程序,選擇wps程序,勾選始終以選擇的程序打開此文件,確定。如果還是不行的話,請嘗試做以下操作:點擊桌面左下角開始按鈕--在. 在WPS演示中,單擊“項目符號”,找到對應的那個即可。在WPS文字中,也是如此。 如題,如何做一個圖表,分別表…

Linux服務器重啟后crs_stat -t 命令無法正常使用以及解決思路

前提&#xff1a;在Linux系統中安裝ASM&#xff0c;安裝完ASM和Oracle數據庫時都是正常使用的&#xff0c;但在重啟服務器后Oracle相關命令不識別。1、[gridudevasm:/home/grid]$crsctl status res -t -bash: crsctl: command not found2、查看環境變量是否正常&#xff0c;命令…

英語十六個時態總結

下面用表格的形式給羅列出來&#xff0c;便于記憶 英語共有十六種時態&#xff0c;其表現形式如下(以study為例)&#xff1a; 一般時 進行時 完成時 完成進行時 現在 studystudies am studyingis studyingare studying have studiedhas studied have been studyinghas …

Python基礎--Python3基礎語法

Python3 基礎語法編碼默認情況下&#xff0c;Python3源碼文件以UTF-8編碼&#xff0c;所有字符串都是Unicode字符串。當然也可以為源碼文件指定不同的編碼&#xff0c;例如&#xff1a;# -*- coding: cp-1252 -*-標識符1.第一個字符必須是字母表中字母或下劃線&#xff1b;2.標…

3 Python os 文件和目錄

ile 對象使用 open 函數來創建&#xff0c;下表列出了 file 對象常用的函數&#xff1a; 序號方法及描述1 file.close() 關閉文件。關閉后文件不能再進行讀寫操作。 2 file.flush() 刷新文件內部緩沖&#xff0c;直接把內部緩沖區的數據立刻寫入文件, 而不是被動的等待輸出緩沖…

python 打開某個exe_python定時檢查啟動某個exe程序(如果exe掛了)

詳見代碼如下&#xff1a;import threadingimport timeimport osimport subprocessdef get_process_count(imagename):p os.popen(tasklist /FI "IMAGENAME eq %s" % imagename)return p.read().count(imagename)def timer_start():t threading.Timer(120,watch_fu…

redis系列3---理解內存

理解內存 為什么要理解內存呢&#xff1f;redis所有的數據都存在內存中如何高效利用內存&#xff0c;實現用更少的內存存更多的數據&#xff0c;從而降低成本 如何統計內存使用&#xff1f;info memory可以獲取內存相關指標&#xff0c;如下&#xff1a;used_memory&#xff1a…

Google發布了Tensorflow Lite,用于移動電話的神經網絡庫

Google的工程副總Dave Burke宣布了一個專門針對移動電話而優化的Tensorflow新版本。\\這一新的軟件庫稱為Tensorflow Lite&#xff0c;允許開發人員在用戶的移動電話上實時地運行人工智能應用。據Burke介紹&#xff0c;該庫在設計上力求更快和更小的同時&#xff0c;依然支持最…

4. ZooKeeper 基本操作

ZooKeeper的數據模型及其API支持以下九個基本操作&#xff1a; 操作描述create在ZooKeeper命名空間的指定路徑中創建一個znodedelete從ZooKeeper命名空間的指定路徑中刪除一個znodeexists檢查路徑中是否存在znodegetChildren獲取znode的子節點列表getData獲取與znode相關的數據…

byte java byte_詳解java中的byte類型

Java中整數類型有:byte占8位, short 占16位, int占32位, long占64位Java也提供了一個byte數據類型&#xff0c;并且是基本類型中的整數類型。java byte是作為最小的數字來處理的&#xff0c;因此它的值域被定義為-128~127&#xff0c;也就是signed byte。下面這篇文章主要給大家…

zabbix 3.0.0beta1安裝-centos6.8版本

zabbix 3.0安裝 zabbix最低需要mysql 5.5 php5.3 查詢mysql版本yum list installed | grep mysql##mysql-libs.x86_64 5.1.73-5.el6_6 anaconda-CentOS-201508042137.x86_64/6.7 卸載mysqlyum remove mysql* 指定mysql源rpm -ivh http://dev.mysql.com/get/mysql-community-rel…

技術走向管理一些思考

在《IT項目管理》一書中針對IT行業定義了一個新的“工種”--多才多藝者&#xff0c;并預言未來的IT產業中多才多藝者的重要性將逐漸凸顯。多才多藝者即是具有技術背景&#xff0c;同一時候了解業務部門、能規劃和實施IT計劃、添加商業價值、培養公司內外部關系的人。 想想還認為…

npm 安裝 chromedriver 失敗的解決辦法

https://segmentfault.com/a/1190000008310875 npm install chromedriver --chromedriver_cdnurlhttp://cdn.npm.taobao.org/dist/chromedriver轉載于:https://www.cnblogs.com/chenxijywc/p/7825024.html

微軟正式發布Azure Functions 2.0

微軟正式發布Azure Functions的第二個版本&#xff0c;這是一個事件驅動的、按需計算的Azure平臺服務。與版本1相比&#xff0c;新版本的Azure Functions包含的多項特性使開發人員可以更輕松地構建可伸縮的無服務器應用程序。2016年初&#xff0c;微軟首次推出Azure Functions預…