通过八达通在TeamCity分支机构移除时部署自动清理IIS站点

通过八达通在TeamCity分支机构移除时部署自动清理IIS站点,iis,teamcity,octopus-deploy,Iis,Teamcity,Octopus Deploy,我对此非常陌生,如果这是一个愚蠢的问题,我深表歉意,但我在help.octopusdeploy.com或谷歌上都找不到任何相关信息 此外,我是一名DevOps工程师,不是开发人员,已经使用TC和Octopus大约3周了。我爱它到目前为止,但它可能是最好的,如果你认为我是一个总菜鸟;) 我目前在TeamCity中有一个构建配置,在成功的构建运行时,它会创建一个Octopus版本,并在成功构建时将项目部署到测试服务器。它保持独立,但与主构建一起部署。因此,在IIS中,它看起来像: IIS Sites

我对此非常陌生,如果这是一个愚蠢的问题,我深表歉意,但我在help.octopusdeploy.com或谷歌上都找不到任何相关信息

此外,我是一名DevOps工程师,不是开发人员,已经使用TC和Octopus大约3周了。我爱它到目前为止,但它可能是最好的,如果你认为我是一个总菜鸟;) 我目前在TeamCity中有一个构建配置,在成功的构建运行时,它会创建一个Octopus版本,并在成功构建时将项目部署到测试服务器。它保持独立,但与主构建一起部署。因此,在IIS中,它看起来像:

IIS Sites
    site.domain.com (master build)
    featurebuild1-site.domain.com (feature branch 1)
    featurebuild2-site.domain.com (feature branch 2)
    etc...
Project Name
    Feature
        /Featurebuild1
        /Featurebuild2
        /Featurebuild3
    Master
显然,这使开发人员在测试其功能构建时的工作变得非常简单,但这会在测试和集成服务器上留下一片混乱。我可以进去手动清理,但我更希望在他们移除TeamCity的分支后不要留下垃圾

因此,TeamCity的项目如下所示:

IIS Sites
    site.domain.com (master build)
    featurebuild1-site.domain.com (feature branch 1)
    featurebuild2-site.domain.com (feature branch 2)
    etc...
Project Name
    Feature
        /Featurebuild1
        /Featurebuild2
        /Featurebuild3
    Master
假设所有三个功能构建都成功运行,我将在主服务器旁的测试服务器上有3个功能构建IIS站点。如果他们决定完成Featurebuild3并将其删除,我想以某种方式自动删除测试服务器上IIS中的Featurebuild3-site.domain.com。这可能吗?如果是,怎么做

我最初的想法是有另一个八达通项目,该项目将进入并删除该网站,但我不知道我是否可以/如何触发它

相关详情:
TeamCity版本:9.1.1(构建37059)

Octopus Deploy version:3.0.10.2278

好的,我花了一点时间才弄明白,但我最终做了些什么(只是为了防止其他人尝试做同样的事情)

我最终完全绕过了TeamCity,并使用我们的存储库作为源。此外,由于我不需要它在删除后立即清理,我很高兴它每晚运行。一旦我决定了这一点,接下来就需要进行一系列嵌套的RESTAPI调用来循环每个项目和团队,以枚举所有不同的存储库(如果我在这里断章取义,我深表歉意)

$statshroot=”http:///rest/api/1.0"
$stashsuffix=“/repos/”
$stashappendix=“/branchs”
$teamquery=curl$stash-erroraction silentlycontinue
在这一点上,我开始使用jq()对返回的文本进行更好的解析

$teams = $teamquery.content | jq -r ".values[].link.url"

Foreach ($team in $teams)
{
# Get the list of branches in the repository
# Feature branch URL format be like: http://<yourstashsite>/projects/<projectname>/repos/<repositoryname>/branches #
$project = $stashroot +$team +$stashsuffix
$projectquery = curl $project -erroraction silentlycontinue
$repos = $projectquery.content | jq -r ".values[].name"
Foreach ($repo in $repos)
    {
    Try
        {
        $repository = $stashroot +$team +$stashsuffix +$repo +$stashappendix
        $repositoryquery = curl $repository -erroraction silentlycontinue
        $reponames = $repositoryquery.content | jq -r ".values[].displayId"
        Foreach ($reponame in $reponames)
            {
            #write-host $team "/" $repo "/" $reponame -erroraction silentlycontinue
            $NewObject = new-object PSObject
            $NewObject | add-member -membertype NoteProperty -name "Team" -value $team
            $NewObject | add-member -membertype NoteProperty -name "Repository" -value $repo
            $NewObject | add-member -membertype NoteProperty -name "Branch" -value $reponame
            $NewObject | export-csv <desiredfilepath> -notype -append
            }
        }
    Catch{} # Yes, I know this is terrible; it makes me sad too :(
    }
}
$teams=$teamquery.content | jq-r“.values[].link.url”
Foreach($团队中的团队)
{
#获取存储库中的分支列表
#功能分支URL格式如下所示:http:///projects//repos//branches #
$project=$stashroot+$team+$stashsuffix
$projectquery=curl$project-erroraction silentlycontinue
$repos=$projectquery.content | jq-r“.values[].name”
Foreach(以美元回购形式回购)
{
尝试
{
$repository=$stashroot+$team+$stashsuffix+$repo+$stashappendix
$repositoryquery=curl$repository-erroraction silentlycontinue
$repostnames=$repositoryquery.content | jq-r“.values[].displayId”
Foreach($reponame中的reponame)
{
#写入主机$team“/”$repo“/“$reponame-erroraction silentlycontinue
$NewObject=新对象PSObject
$NewObject |添加成员-成员类型NoteProperty-名称“团队”-值$Team
$NewObject |添加成员-成员类型NoteProperty-名称“存储库”-值$repo
$NewObject |添加成员-成员类型NoteProperty-名称“分支”-值$reponame
$NewObject |导出csv-notype-追加
}
}
是的,我知道这很可怕;它也让我伤心:(
}
}
在那之后,只需对两天内的CSV文件进行比较(我有逻辑查找预先存在的CSV,并将其重命名为附加“_beday”),然后将从昨天起被删除的所有存储库/构建输出到一个文件中

之后,它将去掉功能分支名称(我们使用它作为IIS中测试站点名称的前缀),并循环查找IIS中与该站点前缀匹配的任何站点,删除它们、关联的应用程序池,并删除服务器上存储站点内容的目录


我相信有更好的方法来实现这一点,特别是如果你知道如何编码的话。不过我只是一个可怜的小脚本猴子,所以我不得不用我的东西来应付:)

我很高兴你一直喜欢章鱼,但在使用了几个月后,我得出了相反的结论!一旦你尝试做章鱼期望你工作之外的事情,你很快就会遇到麻烦。我认为你遇到的问题正是这个。它支持部署,但不支持取消部署。你必须破解预部署以某种方式查找已删除分支并删除这些应用程序的ent脚本。不太好