.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
Comments NOTHING