我是AppVeyor的新手,我在一家网络代理公司工作,我们在单独的GIT回购中有很多项目。
每个项目都有一个开发分支,这是我在AppVeyor中观看的内容。由于我们有一个运行IIS的内部开发服务器,因此将开发服务器定义为AppVeyor环境是一个很好的选择。开发服务器正在运行AppVeyor代理。
在项目特定的YAML文件中,我指定了环境名称和我定义的自定义环境变量。
environment:
iis_site_name: project-specific-site-name.com
deploy:
- provider: Environment
name: dev-environment
我已将AppVeyor环境配置为接受项目中的环境变量。
AppVeyor Environment - 注意:websitebuild是"部署名称"与神器相关联。
这项工作完全适用于提交,项目在正确的位置构建并部署到代理。
如果这不起作用,我需要启动手动部署。因此,我想通过进入AppVeyor界面并选择Environments>来启动手动部署。开发环境>新部署>选择项目
当此部署运行时,未看到YAML文件(iis_site_name)中的环境变量,并且名为'的新IIS站点默认为'已创建,并在那里部署站点。 请注意,我还尝试通过GUI在项目设置中添加环境变量(而不是在YAML中),并且它的行为没有区别。
答案 0 :(得分:0)
我认为这是预期的行为,当构建时环境变量不可用时,Appveyor将发送到您在环境级变量中定义的代理默认值。请查看here
在该屏幕的底部,我们定义了它的“默认”值,即 从环境和构建环境部署时使用的值 变量不存在
据我所知,这不适合您的场景,因为您需要为不同的项目使用不同的站点名称。你可以做的是为每个项目创建单独的环境(使用单独的默认站点名称),但是用你当前环境使用的环境访问密钥替换所有环境访问密钥,因此代理将从所有项目中获取作业。
<强>更新强>
根据Marty的评论,这不是最好的解决方案。让我们使用REST API。
文档在这里https://www.appveyor.com/docs/api/environments-deployments/#start-deployment
检查下面的示例PowerShell功能。您可以在需要时使用特定于项目的参数调用它。
注意您还必须在部署提供程序设置中将websitebuild.hostname
设置为$(iis_site_name)
,以便在IIS上使用主机标头而不是*绑定,否则他们将争夺TCP端口;)
function start-appveyorDeploy
{
param (
[Parameter(Position=0, Mandatory=$true)]
[string]$projectSlug,
[Parameter(Position=1, Mandatory=$true)]
[string]$buildVersion,
[Parameter(Position=2, Mandatory=$true)]
[string]$siteName
)
$apiUrl = 'https://ci.appveyor.com/api'
# Replace this with your values
$token = <your_token>
$environmentName = <your_environmentName>
$accountName = <your_accountName>
$headers = @{
"Authorization" = "Bearer $token"
"Content-type" = "application/json"
}
$body = @{
environmentName=$environmentName
accountName=$accountName
projectSlug=$projectSlug
buildVersion=$buildVersion
environmentVariables =@{
iis_site_name=$siteName
}
}
$jsonBody = $body | ConvertTo-Json -Depth 3
Invoke-RestMethod -Uri "$apiUrl/deployments" -Headers $headers -Body $jsonBody -Method Post
}