Param( [string]$cmd, [string]$version) If ($cmd -eq "build_docker") { docker build -t sems-on-device-server:latest . } If ($cmd -eq "dev" -or [String]::IsNullOrEmpty($cmd) ) { If (Test-Path "./.next") { Remove-Item -Path "./.next" -Recurse Write-Host "./.next is Removed" } docker run --rm -p "22110:22110" -v "C:\SEMS-development\SEMS-on-device-server:/app" -v "C:\tmp:/data" --name sems-on-device-server --env-file "C:\SEMS-development\SEMS-system-guardian\.env" --link sems-model-inference sems-on-device-server:latest sh -c "ln -snf /env/node_modules /app && npm run dev" } If ($cmd -eq "prod") { docker run --rm -p "22110:22110" -v "C:\SEMS-development\SEMS-on-device-server\build\latest:/app" -v "C:\tmp:/data" --name sems-on-device-server sems-on-device-server:latest } If ($cmd -eq "remove_docker") { docker stop sems-on-device-server } If ($cmd -eq "release") { # 提前删除.next文件夹,根据实测,应该会影响后面的编编译,原因未知 # 现象:单独在powershell命令行执行docker run没问题,但是在脚本中执行,完全一样的命令,就会报错 # 然后分别从命令行/脚本进入容器内docker run --rm -it -v "C:\SEMS-development\SEMS-on-device-server:/app" --name sems-on-device-server sems-on-device-server:latest sh # 手动执行npm run build发现仍然时命令行可以编译,但是脚本会报错找不到库, # 然后发现在脚本环境下,npm run build执行前node_model文件夹正常,但执行后,发现为空白了,node_model文件夹下什么都没了 # 猜测是因为脚本执行有安全限制,限制了资源使用?不是特别确定原因。 # 但发现删除了.next后就正常了 If (Test-Path "./.next") { Remove-Item -Path "./.next" -Recurse Write-Host "./.next is Removed" } #在docker容器内编译 docker run --rm -v "C:\SEMS-development\SEMS-on-device-server:/app" --name sems-on-device-server-build sems-on-device-server:latest sh -c "ln -snf /env/node_modules /app && npm run build" #.next/static文件夹存在则证明编译完了 If (Test-Path ".next/static") { #复制static文件夹 Copy-Item -Path .next/static -Destination .next/standalone/.next -Recurse -Force Copy-Item -Path ./server.js -Destination .next/standalone -Force Copy-Item -Path ./scanner.js -Destination .next/standalone -Force #把.next/standalone文件夹下的所有文件打包,但是除了这个目录下的node_modules文件,因为他是Linux系统下的软连接,会报错。 Get-ChildItem -Path ".next/standalone/" | Where-Object { $_.Name -ne "node_modules" } | Compress-Archive -DestinationPath "./build/SEMS-on-device-server-$version.zip" -Force Write-Host "Released /build/SEMS-on-device-server-$version.zip" #直接解压一份,便于后面模拟生产环境测试 If (Test-Path "./build/latest") { #如果当前目录下build文件夹存在 Remove-Item -Path "./build/latest" -Recurse #递归删除build文件夹 } Expand-Archive -Path "./build/SEMS-on-device-server-$version.zip" -DestinationPath "./build/latest" -Force Write-Host "Expanded SEMS-on-device-server-$version.zip to ./build/latest" } else { Write-Host "Build Error, Please retry" } }