ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

分享一个dotnet自动发布的脚本

2021-12-16 15:36:43  阅读:180  来源: 互联网

标签:脚本 maintain dotnet home docker 分享 my MyExt


前置

准备一台CentOS7

  安装 git、docker、docker-register本地仓库、dotnet

项目中添加Dockerfile、docker-stack.yml

 

脚本原理:

通过git拉取分支最新提交,执行dotnet publish 编译项目,

运行docker build 和docker push推到本地仓库中

运行docker stack deploy 发布 到Swarm集群

 

扩容缩容都是Swarm集群提供

可通过给Swarm集群中的机器打标签,通过docker-stack.yml 只发布到指定标签的机器

 

只是最近研究的demo代码,不应做为生产使用,出现问题,概不负责

 

#!/bin/bash
# ==========================================
# !!!项目根目录下必须包含 Dockerfile 和 docker-stack.yml 文件!!!
# 
# ==========================================

#@echo off

echo work-dir: 
pwd
# ==========================================
# 项目Git地址 eg http://1.git
projectGitPath=http://1.git
# 分支名 eg master
branchName=master

# 项目名
projectName=my_maintain
# dotnet发布项目 eg ~/projects/app1/app1.csproj
dotnetProjectPath=./Project/MyMaintain/MyMaintain.csproj
# dotnet机器RID eg linux-x64
dotnetRID=linux-x64
# dotnetSelfContained eg false
dotnetSelfContained=false
# dotnet发布目录 eg d:/dotnetpublish/app1
dotnetPublishOutput=/data/dotnetpublish/${projectName}/${branchName}

# docker本地仓库地址 192.168.1.1:5000
dockerRegister=192.168.97.168:5000

# dockerStack配置 eg xxx.yml
dockerStackCfgName=docker-stack.yml
# dockerStack名 eg xxx_stack
dockerStackName=${projectName}_stack
# ==========================================

git status

# 切换当前分支
echo process GitBranch: ${branchName}
git checkout ${branchName}
if [ $? != 0 ]
then
 exit 1
fi

# 拉取当前分支
git pull
if [ $? != 0 ]
then
 exit 1
fi

# 创建发布目录
if [ ! -d ${dotnetPublishOutput} ]
then
  echo mkdir -p ${dotnetPublishOutput}
  mkdir -p ${dotnetPublishOutput}
fi

# 执行打包dotnet命令
echo dotnet publish ${dotnetProjectPath} -c Release -r ${dotnetRID} --self-contained ${dotnetSelfContained} -o ${dotnetPublishOutput}
dotnet publish ${dotnetProjectPath} -c Release -r ${dotnetRID} --self-contained ${dotnetSelfContained} -o ${dotnetPublishOutput}
if [ $? != 0 ]
then
 exit 1
fi

# 切换到发布目录
echo change work-dir to ${dotnetPublishOutput}
cd ${dotnetPublishOutput}
echo work-dir: 
pwd

# 执行docker build
echo docker build》》》》》》》》》》》》》》》》》
docker build -t ${dockerRegister}/${projectName} .
if [ $? != 0 ]
then
 exit 1
fi

# 执行推送docker 本地仓库
echo docker push》》》》》》》》》》》》》》》》》
docker push ${dockerRegister}/${projectName}
if [ $? != 0 ]
then
 exit 1
fi

# 执行docker stack
echo docker stack》》》》》》》》》》》》》》》》》
docker stack deploy -c ${dockerStackCfgName} ${dockerStackName}
if [ $? != 0 ]
then
 exit 1
fi

# 验证发布
echo process ok!

执行过程如下:

[root@box168 XXXLib]# /bin/sh ../auto-deployLF.sh
work-dir:
/home/gitRespo/XXXLib
位于分支 master
您的分支与上游分支 'origin/master' 一致。

无文件要提交,干净的工作区
process GitBranch: master
已经位于 'master'
您的分支与上游分支 'origin/master' 一致。
Username for 'https://e.coding.net': XXX@sina.com
Password for 'https://XXX@sina.com@e.coding.net':
已经是最新的。
mkdir -p /data/dotnetpublish/my_maintain/master
dotnet publish ./Project/MyMaintain/MyMaintain.csproj -c Release -r linux-x64 --self-contained false -o /data/dotnetpublish/my_maintain/master
用于 .NET 的 Microsoft (R) 生成引擎版本 17.0.0+c9eb9dd64
版权所有(C) Microsoft Corporation。保留所有权利。

  正在确定要还原的项目…
  所有项目均是最新的,无法还原。
  HTools -> /home/gitRespo/XXXLib/HTools/bin/Release/netstandard2.0/HTools.dll
  MyExt.NLogLib -> /home/gitRespo/XXXLib/MyExt.NLog/bin/Release/netstandard2.1/MyExt.NLogLib.dll
  HDBLite -> /home/gitRespo/XXXLib/HDBLite/bin/Release/netstandard2.1/HDBLite.dll
  MyExt.JsonLib -> /home/gitRespo/XXXLib/MyExt.JsonLib/bin/Release/netstandard2.0/MyExt.JsonLib.dll
  MyExt.HttpLib -> /home/gitRespo/XXXLib/MyExt.HttpLib/bin/Release/netstandard2.0/MyExt.HttpLib.dll
  MyExt.AspectCore -> /home/gitRespo/XXXLib/MyExt.AspectCore/bin/Release/net6.0/MyExt.AspectCore.dll
  MyExt.Core -> /home/gitRespo/XXXLib/MyExt.Core/bin/Release/net6.0/MyExt.Core.dll
  MyExt.Mongo -> /home/gitRespo/XXXLib/MyExt.Mongo/bin/Release/net5.0/MyExt.Mongo.dll
  MyMaintain -> /home/gitRespo/XXXLib/Project/MyMaintain/bin/Release/net6.0/linux-x64/MyMaintain.dll
  MyMaintain -> /data/dotnetpublish/my_maintain/master/
change work-dir to /data/dotnetpublish/my_maintain/master
work-dir:
/data/dotnetpublish/my_maintain/master
docker build
Sending build context to Docker daemon  8.753MB
Step 1/7 : FROM mcr.microsoft.com/dotnet/runtime:5.0
5.0: Pulling from dotnet/runtime
ffbb094f4f9e: Pull complete
b540880c2595: Pull complete
e3271fa62d88: Pull complete
c5b959ef17e2: Pull complete
Digest: sha256:dfe9bea70fb6d4c13ee0f0b9f66bc8b8ba594d53c789e174d904dddba404cc72
Status: Downloaded newer image for mcr.microsoft.com/dotnet/runtime:5.0
 ---> 613587686d47
Step 2/7 : RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 ---> Running in 3cfe3df12e12
Removing intermediate container 3cfe3df12e12
 ---> 7c251a333f7b
Step 3/7 : RUN cd /home
 ---> Running in b46201004e74
Removing intermediate container b46201004e74
 ---> 6e5580e760c7
Step 4/7 : RUN mkdir my_maintain
 ---> Running in 67da9ce263bb
Removing intermediate container 67da9ce263bb
 ---> 05e014521033
Step 5/7 : WORKDIR /home/my_maintain
 ---> Running in 040b7404ca24
Removing intermediate container 040b7404ca24
 ---> 4eb399106c22
Step 6/7 : COPY ./ ./
 ---> 814277870aa7
Step 7/7 : CMD ["dotnet", "MyMaintain.dll"]
 ---> Running in aa1bbb923255
Removing intermediate container aa1bbb923255
 ---> b829c7d13212
Successfully built b829c7d13212
Successfully tagged 192.168.97.168:5000/my_maintain:latest
docker push
Using default tag: latest
The push refers to repository [192.168.97.168:5000/my_maintain]
b1afe348f194: Pushed
a3991b7262d4: Pushed
d0fd4c6cc142: Pushed
b2ddd18a75ff: Pushed
edbd8c09a53a: Pushed
02ca0745b1e8: Pushed
0672f64e044d: Pushed
f11bbd657c82: Pushed
latest: digest: sha256:efc7ca2001d3a3bede7642d68436e6cf6eab5cc1d14e9d75838d2e9c131835b2 size: 1992
docker stack
Creating network my_maintain_stack_default
Creating service my_maintain_stack_web
process ok!
[root@box168 XXXLib]#

  

附录:

Dockerfile

# 基于 microsoft-dotnet镜像,TAG为latest 构建Docker Image
FROM mcr.microsoft.com/dotnet/runtime:5.0

#修改时区,默认基于FROM镜像的时区
#Debian语法
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 进入docker中的/home目录
RUN cd /home
 
# 创建DockerWebAPI目录
RUN mkdir my_maintain
 
# 设置工作路径
WORKDIR /home/my_maintain
 
# 将当前文件夹下的所有文件全部复制到工作目录
COPY ./ ./
 
# 容器向外界暴露指定端口
#EXPOSE 8090
 
# 执行dotnet xxx.dll命令
CMD ["dotnet", "MyMaintain.dll"]

  

docker-stack.yml

version: "3"
services:
  web:
    image: 192.168.97.168:5000/my_maintain:latest
    stop_grace_period: 10s
    deploy:
      replicas: 1
      #resources:
        #limits: 
          #cpus: "0.1"
          #memory: 50M
      restart_policy:
        condition: on-failure
      placement:
        constraints:
        #- 'node.role == worker'
        #- 'node.labels.platform == arm64'
        - 'node.labels.lblName == x86'

 

标签:脚本,maintain,dotnet,home,docker,分享,my,MyExt
来源: https://www.cnblogs.com/huawublog/p/15698286.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有