WeChat-Service/build.ps1

134 lines
4.6 KiB
PowerShell
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[CmdletBinding()]
param (
[Alias('target')]
[string]$BuildTarget = '',
[string]$MavenOutputDir = "./target",
[string]$DockerImgName = "usvisartrackapi",
[string]$DockerServerName = "usvisartrackapi",
[string]$CodeServerPort = "8282",
[string]$PublishServerPort = "8383",
[string]$BuildVerison = "0.0.5-snapshot",
[string]$PushServer = "repo-docker.ossez.com",
[string]$PushPath = "/docker-hub/"
)
#腾讯云镜像仓库
#[string]$PushServer = "ccr.ccs.tencentyun.com",
#[string]$PushPath = "/kiler398/"
#[string]$PushServer = "repo-docker.ossez.com",
#[string]$PushPath = "/docker-hub/"
function build {
ExecuteShellText "mvn clean package -DskipTests" "源码Maven编译打包"
}
function publishDockerToRemoteServer {
publishDockImage
$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" "清理本地无用镜像"
}
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""" "导出镜像文件"
}
function exportProjectDockerDeployShell
{
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"
}
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
}