2015-12-16 14 views
1

我對此非常陌生,所以如果這是一個愚蠢的問題,但是我無法在help.octopusdeploy.com上找到任何關於它的信息,谷歌。通過Octopus自動清理IIS網站部署在TeamCity分支上的移除

此外,我是DevOps工程師,而不是開發人員,並且已經使用TC和八達通約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... 

顯然,這使生活很容易爲開發者測試他們的功能構建的時候,但它留下的測試和集成服務器上亂七八糟的地獄。我可以進去,並手動清理它們,但我非常希望它不會留下廢話躺在他們已經刪除了在TeamCity的分支。

所以,在TeamCity的項目看起來像:

Project Name 
    Feature 
     /Featurebuild1 
     /Featurebuild2 
     /Featurebuild3 
    Master 

假設所有三個功能構建成功運行,我會在測試服務器旁邊的主3功能構建IIS站點。如果他們決定使用Featurebuild3並將其刪除,我想以某種方式在我的測試服務器上自動刪除IIS中的featurebuild3-site.domain.com。這可能嗎?如果是這樣,怎麼樣?

我最初的想法是有另一個Octopus項目將進入和刪除該網站,但我不知道我是否可以/如何觸發它。

相關信息:
TeamCity的版本:9.1.1(建37059)
章魚部署版本:3.0.10.2278

+0

我很高興你一直愛八達通,但經過幾個月的使用後,我得出了相反的結論!一旦你嘗試了Octopus希望你工作以外的事情,你很快就會遇到麻煩。我認爲你遇到的問題就是這個。它支持部署但不能取消部署。你必須破解預先部署的腳本,以某種方式查找刪除的分支並刪除這些應用程序。不漂亮 – Schneider

回答

0

好吧,我花了一些時間來弄清楚,但這裏是我結束(如果其他人試圖做同樣的事情)。

我最終完全繞過了TeamCity,並使用我們的Stash倉庫作爲源代碼。另外,因爲我不需要它在刪除後立即清理,所以我很高興每晚都有它運行。一旦我決定了,那麼就需要一堆嵌套的REST API調用來遍歷每個項目和團隊來枚舉所有不同的存儲庫(如果我在此屠宰術語,請致歉)。

$stashroot = "http://<yourstashsite>/rest/api/1.0" 
$stashsuffix = "/repos/" 
$stashappendix = "/branches" 

$teamquery = curl $stash -erroraction silentlycontinue 

在這一點上,我開始使用JQ(https://stedolan.github.io/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 :(
    } 
} 

之後,它只是做了compare-的問題項目從兩個不同的日子對CSV文件(我有邏輯來尋找一個預先存在的csv並將其重命名爲將「_yesterday」附加到它),輸出到一個文件,所有的倉庫/昨天。

之後,它會去掉功能分支名稱(我們用它來在IIS中對測試站點名稱進行前綴操作,並循環查找IIS中與該站點前綴匹配的任何站點,刪除它們,關聯的應用程序池以及刪除存儲站點內容的服務器上的目錄。

我敢肯定還有更好的方法來實現這一點,特別是如果你知道如何編碼。我只是一個可憐的小腳本猴子,所以我必須與我有什麼:)