.net api build 脚本

烂柯 发布于 2022-11-24 147 次阅读


.net api build 脚本(测试环境)

由于是docker容器运行本地没有安装docker及配置harbor仓,测试环境发布更新比较麻烦,单个容器又不到使用Jenkins的级别,所有今天通过cmd脚本偷个懒。

大致流程就是:本地编译-->上传编译文件-->打包镜像-->运行容器

环境准备

需要安装PuTTY(需要使用pscp.exe、plink.exe)

下载地址: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

文件结构大致如下
-解决方案.sln
--TestApi
----build.cmd
----bin
------Release
--------net6.0
----------Dockerfile
----------.dockerignore
----------docker.sh

一、准备镜像打包

1、Dockerfile

基于发布后的文件进行镜像打包

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
#指定工作路径
WORKDIR /publish
#EXPOSE 80 指定端口(没有仔细研究,暂时没有用到)
#拷贝
COPY . .
#设置时区
ENV TZ=Asia/Shanghai
ENTRYPOINT ["dotnet", "Test.Api.dll"]

2、.dockerignore

打包镜像设置过滤的文件(可选)

**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md

*.pdb
.dockerignore
Dockerfile
*.sh
*.cmd

二、镜像打包脚本(docker.sh)

注意制表符为LF

#!/bin/bash
//-e非0返回状态直接退出,+e忽略非0状态继续执行
set -e

#进入工作目录
#cd $(dirname $(readlink -f $0 || realpath $0))
echo "start"
NAME="test-api"
VERSION="t0.0.1"
if [ "$1" ];then
    VERSION=$1
fi
echo "build $NAME:$VERSION"
#强制移除进行中的容器
docker rm -f $NAME
docker rmi -f $NAME:$VERSION
docker build -t $NAME:$VERSION .
docker run --name $NAME -d -p 8080:80 --env ASPNETCORE_ENVIRONMENT=Development $NAME:$VERSION --urls=http://*:80
echo "end"

三、vs项目发布脚本(build.cmd)

::关闭命令回显
@echo off
::linux容器镜像打包目录
set _targetDir=/mnt/disk1/project-test/Test
set _buildDir=%~dp0bin\Release\net6.0
::编译 .net framework使用 msbuild
dotnet build -c Release || exit 1;
::%ERRORLEVEL%上条命令返回状态,返回非0,退出程序
::IF %ERRORLEVEL% NEQ 0 (
::    exit 1;
::)
::循环筛选pdb及xml文件进行删除
::for %%i in (%_buildDir%\*.pdb,%_buildDir%\*.xml) do (
::   del %_buildDir%\%%~ni%%~xi
::)
::拷贝文件 -pw Linux密码 -p保留文件属性  -r 递归拷贝目录
pscp -pw abc852qwe -p -r %_buildDir%/* root@192.168.21.140:%_targetDir%  || exit 1;
::执行镜像打包  -pw Linux密码 -batch 禁用所有交互式提示
plink -pw abc852qwe root@192.168.21.140  -batch  "cd %_targetDir%&&/bin/bash %_targetDir%/docker.sh %1"  || exit 1;

批处理获取当前文件夹名称

@echo off
for /f "delims=" %%i in ("%cd%") do set folderName=%%~nxi
echo %folderName%
pause
烂柯

最后更新于 2023-01-04