将VSTS构建与Jenkins构件关联起来

84次阅读
没有评论

问题描述

在使用VSTS(Visual Studio Team Services)触发本地Jenkins服务器构建构件时,遇到了关于构件上传和部署的问题。他希望在Jenkins构建完成后,将构件上传到VSTS,并且在后续的部署中能够直接从Jenkins构建服务器内部复制构件,而不是从本地获取。然而,用户担心这样的操作可能会导致构建冲突,因此希望能够找到一种可行的解决方案,确保构件的正确上传和部署。

解决方案

请注意以下操作可能涉及安全性和版本差异,务必审慎操作。

方案1:使用Powershell脚本进行部署

用户可以编写Powershell脚本,通过VSTS任务来控制构件的上传和部署流程。下面是一个示例的Powershell脚本,用于在Jenkins构建完成后将构件上传至VSTS并进行部署:

Param([string]$JenkinsPatArg)
$isRunningLocal = $false
$jenkinsUrlBase = "[public ipaddress]"

if (Test-Connection -ComputerName "[private ipaddress/DNS name]" -Quiet) {
    $isRunningLocal = $true
    $jenkinsUrlBase = "[private ipaddress/dns name]"
}

$buildDefinitionName = $env:RELEASE_ARTIFACTS_GAMEZIP_DEFINITIONNAME
$buildTeamProject = [Uri]::EscapeDataString($env:SYSTEM_TEAMPROJECT)
$targetBuildNumber = $env:RELEASE_ARTIFACTS_[Artifact Alias]_BUILDNUMBER

$Auth = "$($env:username):$($JenkinsPatArg)"
$Bytes = [System.Text.Encoding]::UTF8.GetBytes($Auth)
$Base64bytes = [System.Convert]::ToBase64String($Bytes)
$Headers = @{ "Authorization" = "Basic $Base64bytes" }

# 查询Jenkins构建信息
ForEach ($build in (Invoke-RestMethod -Uri "http://$($jenkinsUrlBase):[port number]/job/$($buildTeamProject)/job/$($buildDefinitionName)/api/json?tree=builds[id,url,actions[buildNumber]]" -ContentType json -Headers $Headers).builds) {
    if ($build.actions.buildNumber -eq $targetBuildNumber) {
        $correctBuild = $build
        break
    }
}

if ($correctBuild -eq $null) {
    Write-Error "Build not found. Must rebuild source to obtain artifact"
    return
}

# 下载并部署构件
$targetZip = "$Env:temp/$($buildDefinitionName)_$($correctBuild.id).zip"
Invoke-RestMethod -Uri "$($correctBuild.url)/artifact/$($buildDefinitionName)/*zip*/$($buildDefinitionName)_$($correctBuild.id).zip" -ContentType Application/zip -Headers $Headers -OutFile $targetZip

# 解压构件
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::ExtractToDirectory($targetZip, $env:targetDirectory)

# 删除临时文件
Remove-Item $targetZip

这个脚本实现了以下步骤:

  1. 检查当前是否可以通过本地连接访问服务器,以确定使用公共IP地址还是私有IP地址。
  2. 获取VSTS中定义的构建信息,包括构建名称和团队项目等。
  3. 使用Jenkins的API查询构建信息,根据构建编号找到对应的构建。
  4. 使用基本身份验证下载构件,并将构件部署到目标目录。
  5. 解压构件并删除临时文件。

用户可以将这个脚本作为一个Powershell任务添加到VSTS中,确保在构建完成后执行。这个脚本会根据构建编号从Jenkins服务器下载构件并上传至VSTS。

方案2:使用Artifact Store进行中间存储

另一种方法是使用中间的Artifact Store(构件存储库)来管理构件的上传和部署。用户可以将Jenkins构建的构件上传至Artifact Store,然后在VSTS中引用这些构件进行部署。这样可以确保构件的版本和状态被准确地追踪和管理,同时避免直接从Jenkins构建服务器复制构件。

总结

通过使用Powershell脚本或者中间的Artifact Store,用户可以有效地将VSTS构建与Jenkins构件关联起来,并确保构件的正确上传和部署。选择适合自己团队需求的解决方案,可以帮助实现构建自动化和持续集成的目标。

注意:在实际操作中,请根据具体情况进行调整,并确保遵循安全和最佳实践。

正文完