WeChat-Service/build.ps1

127 lines
4.4 KiB
PowerShell
Raw Normal View History

2022-10-08 11:14:23 -04:00
[CmdletBinding()]
param (
[Alias('target')]
[string]$BuildTarget = '',
[string]$MavenOutputDir = "./target",
[string]$DockerImgName = "usvisartrackapi",
[string]$DockerServerName = "usvisartrackapi",
[string]$CodeServerPort = "8282",
[string]$PublishServerPort = "8383",
2022-10-17 19:16:10 -04:00
[string]$BuildVerison = "0.0.2-snapshot",
[string]$PushServer = "repo-docker.ossez.com",
[string]$PushPath = "/docker-hub/"
2022-10-08 11:14:23 -04:00
)
function build {
2022-10-17 19:16:10 -04:00
ExecuteShellText "mvn clean package -DskipTests" "源码Maven编译打包"
}
2022-10-08 11:14:23 -04:00
2022-10-17 19:16:10 -04:00
function publishDockerToRemoteServer {
2022-10-08 11:14:23 -04:00
publishDockImage
2022-10-17 19:16:10 -04:00
$fullImageName = BuildDockerFullImageName $DockerImgName $BuildVerison
ExecuteShellText "docker login $PushServer" "登录远程Docker仓库"
ExecuteShellText "docker tag $fullImageName $PushServer$PushPath$fullImageName" "Docker镜像打标签"
ExecuteShellText "docker push $PushServer$PushPath$fullImageName" "Docker镜像推送到远程服务器"
ExecuteShellText "docker image prune -f" "清理本地无用镜像"
2022-10-08 11:14:23 -04:00
}
function publishDockImage()
{
BuildDockerImageToLocal "Dockerfile"
}
function runDockerContainer()
{
$split = ":"
ExecuteShellText "docker stop $DockerServerName" "停止Docker容器"
ExecuteShellText "docker rm $DockerServerName" "删除Docker容器"
$fullImageName = BuildDockerFullImageName $DockerImgName $BuildVerison
ExecuteShellText "docker run -p $PublishServerPort$split$CodeServerPort --name $DockerServerName -d $fullImageName " "启动Docker容器"
}
function BuildDockerImageToLocal()
{
ExecuteShellText "docker image prune -f" "清理本地无用镜像"
$fullImageName = BuildDockerFullImageName $DockerImgName $BuildVerison
ExecuteShellText "docker build -f Dockerfile -t=""$fullImageName"" --label ""$DockerImgName"" --label ""$BuildVerison"" ." "编译镜像 $fullImageName"
}
function BuildDockerFullImageName($imageName, $buildImageVersionName)
{
return "$imageName`:$buildImageVersionName"
}
# 导出项目Docker镜像
function exportProjectDockerImage
{
write-host ("开始导出项目docker镜像.")
$fullhostdockerImageFilePath = Join-Path $MavenOutputDir "$DockerImgName-$BuildVerison.tar"
Write-Host "导出镜像文件路径: $fullhostdockerImageFilePath"
$fullImageName = BuildDockerFullImageName $DockerImgName $BuildVerison
ExecuteShellText "docker save -o $fullhostdockerImageFilePath ""$fullImageName""" "导出镜像文件"
2022-10-08 11:14:23 -04:00
}
function exportProjectDockerDeployShell
2022-10-08 11:14:23 -04:00
{
write-host ("开始生成项目docker镜像部署脚本.")
$fullhostdockerDeployShellFilePath = Join-Path $MavenOutputDir "deploy.sh"
$fullImageFileName = "$DockerImgName-$BuildVerison.tar"
$dockImageName = BuildDockerFullImageName $DockerImgName $BuildVerison
$dockerImageDeployScript = "#bin/sh`
# -------------------------------------------- Deploy Script Start --------------------------------------------
docker load -i $fullImageFileName `
docker stop $DockerImgName `
docker rm $DockerImgName `
docker run -p $PublishServerPort`:$CodeServerPort --restart=unless-stopped -e APP_DATABASE_HOST=`"localhost`" -e APP_DATABASE_PORT=`"3306`" -e APP_DATABASE_NAME=`"northtecom.usvisatrack`" -e APP_DATABASE_USERNAME=`"root`" -e APP_DATABASE_PASSWORD=`"asdf@123`" --name $DockerImgName -d $dockImageName `
# -------------------------------------------- Deploy Script End -------------------------------------------- "
echo $dockerImageDeployScript > $fullhostdockerDeployShellFilePath
Write-Host $dockerImageDeployScript
Write-Host "导出镜像部署脚本文件路径: $fullhostdockerDeployShellFilePath"
2022-10-08 11:14:23 -04:00
}
function buildDockerFile()
{
write-host ("执行 buildDockerFile")
$dockerFile = Join-Path $MavenOutputDir "Dockerfile"
$dockerFileContent = 'FROM bellsoft/liberica-openjdk-alpine:8u345-1' + "`n"
$dockerFileContent += 'VOLUME /tmp' + "`n"
$dockerFileContent += 'COPY target/*.jar app.jar' + "`n"
$dockerFileContent += 'EXPOSE 8282' + "`n"
$dockerFileContent += '# ENTRYPOINT ["java","-jar","/app.jar"]' + "`n"
write-host ("写入 Dockerfile 内容到 $dockerFile")
echo $dockerFileContent > $dockerFile
}
# 执行文本命令
function ExecuteShellText($shellText,$shellMsg)
{
write-host ("$shellMsg 执行脚本:$shellText")
Invoke-Expression "& $shellText"
}
if($BuildTarget -eq '')
{
write-host ("未发现发现编译目标:$BuildTarget,操作跳过。")
}
else
{
& $BuildTarget
}