0

我是 AppVeyor 的新手,我在一家网络机构工作,我们在不同的 GIT 存储库中有许多项目。

每个项目都有一个开发分支,这就是我在 AppVeyor 中看到的。由于我们有一个运行 IIS 的内部开发服务器,因此将我们的开发服务器定义为 AppVeyor 环境是一个很好的选择。开发服务器正在运行 AppVeyor 代理。

在项目特定的 YAML 文件中,我指定了环境名称和我定义的自定义环境变量。

environment:
  iis_site_name: project-specific-site-name.com

deploy:
- provider: Environment
  name: dev-environment

我已经将 AppVeyor 环境配置为接受来自项目的环境变量,就像这样。

AppVeyor 环境- 注意:websitebuild 是与工件关联的“部署名称”。

这项工作完美地提交,项目被构建并部署到正确位置的代理。

当我需要启动手动部署时,这不起作用。因此,假设我想通过进入 AppVeyor 界面并选择 Environments > Dev Environment > New Deploy > Select Project 来启动手动部署

当此部署运行 YAML 文件 (iis_site_name) 中的环境变量时,将创建一个名为“default”的新 IIS 站点并将该站点部署在那里。请注意,我还尝试通过 GUI(而不是在 YAML 中)在项目设置中添加环境变量,它的行为没有什么不同。

4

1 回答 1

0

我相信这是预期的行为,当构建时环境变量不可用时,Appveyor 将发送到您在环境级别变量中定义的代理默认值。请看这里

在该屏幕的底部,我们定义了它的“默认”值,即当您从环境部署和构建环境变量时使用的值不存在

据我了解,这不适合您的场景,因为您需要为不同的项目使用不同的站点名称。您可以做的是为每个项目创建单独的环境(具有单独的默认站点名称),但将其所有环境访问密钥替换为您当前环境使用的相同,因此代理将从所有项目中获取工作。

更新:

根据 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
}
于 2016-08-19T06:42:47.803 回答