вторник, 24 марта 2020 г.

Как Bamboo хранит артифакты

Все артифакты хранятся в папке Artifacts внутри bamboo-home. Агенты не участвуют в долговременном хранении артифактов.

Важно! Необходимо понимать, что любые сгенерированные артифакты в виде zip архивов, nuget пакетов и т.д. будут продолжать находиться в рабочей папке работы плана на агенте до момента удаления этой папки. Но в тоже время, Deployment проекты будут потреблять не их, а артифакты с CI сервер.

То есть, все артифакты, сгенерированные в процессе запуска Build на удалённом агенте, будут переданы на сервер CI.








Думаю, что не требуют объяснения потенциальные проблемы, которые могут возникнуть при высокой нагрузке на CI сервер в части сети и хранения данных.

Учитывайте это при планировании и не забывайте пользоваться возможность настроить "Expire" (см. предыдущий пост).

Также, возрастает необходимость правильной конфигурации CI сервера в части информационной безопасности, чтобы реализовать принцип неизменяймости артифакта и исключить, либо значительно снизить возможность его злонамеренного изменения.

Закончилось место на агенте Bamboo?

К сожалению, нет встроенного механизма удаления результатов запуска плана на удалённых агентах Bamboo даже в версии 6.10.4. Мы можем вычистить только дисковое пространство на сервере CI с помощью нескольких настроек "Expiry". Также, есть возможность переопределись некоторые значения на уровне плана.







Однако, когда Ваш CI сервер выполняет большое кол-во работы дисковое может закончиться очень быстро.

Чтобы решить эту проблему можно воспользоваться простым скриптом, приведённым ниже, раскидав его с помощью GPO или иным способом в Task Scheduler.

$folder = "C:\bamboo\xml-data\build-dir"
$EndDate= Get-date
$itemsListArray = Get-ChildItem -Path $folder -Exclude _git-repositories-cache,repositoryData
foreach($item in $itemsListArray){
    $startDate = [datetime]$item.LastWriteTime
    $result = New-TimeSpan -Start $startDate -End $EndDate
    
    if($result.Days -ge 21)
        {
            $pathToRemove =  $folder + '\' + $item.Name
            Remove-item -Path $pathToRemove -Recurse -Force  -Verbose
        }

}    


Данный скрипт удалит все папки старше 3-х недель.

ВАЖНО! Я рекомендую не использовать диск "С" для размещения данных Bamboo Server / agent - это может создать высокую нагрузку на диск и привести к проблемам с ОС, также возможны отказы при исчерпании дискового пространства.

"NPM CI" приводит к ошибке при использовании его в задаче "NPM configuratuion" Bamboo CI Server

Not all updates are equally helpful


После обновления Node.JS и NPM до версии 6.13.4 столкнулся с серией проблем (часть описанна ранее).

Одна из этих проблем связана с ключом NPM CI - перестал работать "NPM configuration" task из плана на Bamboo CI server. 

Сыпятся различные неинформативные ошибки.

Как итог обнаружилось несколько открытых багов, обсуждение одного из которых привело https://github.com/npm/cli/issues/558#issuecomment-580392554.

По сути, мы используем ключ I,  вместо специального CI - и всё работает.

Node.JS 12.16.1 падает при попытке остановить компоненты зависимостей Visual Studio 2017

What ever weird is happening  - 
Keep calm and keep updating



Ничего нового - просто обновитель хотя бы до
OS Name: Microsoft Windows 10 Pro
OS Version: 10.0.18363 N/A Build 18363

И всё заработает как ожидалось.

Установка Node.JS 12.16.1 LTS падает с ошибкой установки зависимостей

What ever weird is happening  - 
Keep calm and keep updating


При инсталляции Node.JS 12.16.1 LTS можно поставить галочку в мастере установки, которая должна установить необходимые зависимости, скачав их из Интернет. 
Однако, открывшееся окно PowerShell после начало установки вываливается с ошибкой:

Exception calling "DownloadString" with "1" argument(s): "The request was aborted: Could not create SSL/TLS secure
channel."
At line:1 char:51
+ ... ess -Force; iex ((New-Object System.Net.WebClient).DownloadString('ht ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException



Данная ситуация была обнаружена мной на нескольких агентах CI/CD, использующих PowerShell:

Current $PSVersionTable:
Name Value
---- -----
PSVersion 5.1.17134.407
PSEdition Desktop
PSCompatibleVersions
{1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.17134.407
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1


Причина возникновения данной ошибки в том, что, по умолчанию, до определённой версии Windows Server/PowerShell поддерживалась толко TLS 1.0 - 1.1 или сервер имеет какие-либо ограничения, позволяющие использовать только TLS 1.1+.

Сначала я применил решение, описанное на сайте Choco.
В файле C:\Program Files\nodejs\install_tools.bat я добавил часть, выделенную жирным:

"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command Start-Process '%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe' -ArgumentList '-NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "[System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString(''https://chocolatey.org/install.ps1''))"; choco upgrade -y python2 visualstudio2017-workload-vctools; Read-Host ''Type ENTER to exit'' ' -Verb RunAs

Но поразмыслив, я решил обновить один из агентов до более свежей версии Windows 10/PowerShell и о чудо: проблема решилась сама собой.

Для PowerShell версии, указанной ниже, проблемы не существует:

Name Value
---- -----
PSVersion 5.1.17763.1007
PSEdition Desktop
PSCompatibleVersions
{1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.17763.1007
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1


Back again

Time to write...



Наконец-то я добрался до блога. 

За этот год произошли кое-какие изменения в моей работе и теперь часть статей будет посвящено страшным словам DevOps, CI/CD, etc.

Тем не менее, я продолжаю оставаться Microsoft-ориентированным человеком :) , т.к. попытка спрыгнуть на Open Source так и не началась.

Мир ИТ меняется. Меняются подходы и как следствие рынок позиций, доступных ИТ специалистам.