在手动部署期间访问AppVeyor项目环境变量

时间:2016-08-19 01:50:31

标签: appveyor

我是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中),并且它的行为没有区别。

1 个答案:

答案 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
}