Установка зависимостей
Docker
Руководство по установке Docker CE.
Для работы с Docker-демоном пользователю необходимы соответствующие привилегии. Создайте группу docker и добавьте в неё пользователя:
sudo groupadd docker
sudo usermod -aG docker $USER
Git
- Минимально допустимая версия — 1.9.0.
- В случае использования Git Submodule, минимально допустимая версия — 2.14.0.
Установка werf
Способ 1 (рекомендуемый): multiwerf
Unix shell (sh, bash, zsh)
Installing multiwerf
# add ~/bin into PATH
export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
# install multiwerf into ~/bin directory
mkdir -p ~/bin
cd ~/bin
curl -L https://raw.githubusercontent.com/werf/multiwerf/master/get.sh | bash
Adding werf alias to the current shell session
. $(multiwerf use 1.1 stable --as-file)
CI usage tip
To ensure that multiwerf exists and is executable, use the type
command:
type multiwerf && . $(multiwerf use 1.1 stable --as-file)
The command prints a message to stderr if multiwerf is not found. Thus, diagnostics in a CI environment becomes simpler.
Optional: run command on terminal startup
echo '. $(multiwerf use 1.1 stable --as-file)' >> ~/.bashrc
Windows
PowerShell
Installing multiwerf
$MULTIWERF_BIN_PATH = "C:\ProgramData\multiwerf\bin"
mkdir $MULTIWERF_BIN_PATH
Invoke-WebRequest -Uri https://flant.bintray.com/multiwerf/v1.3.0/multiwerf-windows-amd64-v1.3.0.exe -OutFile $MULTIWERF_BIN_PATH\multiwerf.exe
[Environment]::SetEnvironmentVariable(
"Path",
[Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::Machine) + "$MULTIWERF_BIN_PATH",
[EnvironmentVariableTarget]::Machine)
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
Adding werf alias to the current shell session
Invoke-Expression -Command "multiwerf use 1.1 stable --as-file --shell powershell" | Out-String -OutVariable WERF_USE_SCRIPT_PATH
. $WERF_USE_SCRIPT_PATH.Trim()
cmd.exe
Installing multiwerf
Run cmd.exe as Administrator and then do the following:
set MULTIWERF_BIN_PATH="C:\ProgramData\multiwerf\bin"
mkdir %MULTIWERF_BIN_PATH%
bitsadmin.exe /transfer "multiwerf" https://flant.bintray.com/multiwerf/v1.3.0/multiwerf-windows-amd64-v1.3.0.exe %MULTIWERF_BIN_PATH%\multiwerf.exe
setx /M PATH "%PATH%;%MULTIWERF_BIN_PATH%"
# after that open new cmd.exe session and start using multiwerf
Adding werf alias to the current shell session
FOR /F "tokens=*" %g IN ('multiwerf use 1.1 stable --as-file --shell cmdexe') do (SET WERF_USE_SCRIPT_PATH=%g)
%WERF_USE_SCRIPT_PATH%
Команда multiwerf use в деталях
Команда multiwerf use MAJOR.MINOR CHANNEL
позволяет использовать актуальную версию werf для указанных параметров MAJOR.MINOR
и CHANNEL
.
Команду следует использовать как в CI, так и при локальной разработке.
Команда возвращает скрипт или, при использовании опции --as-file
, путь к файлу со скриптом, который необходимо использовать как аргумент команды source
.
В результате в shell-сессии будет доступна актуальная версия werf.
Скрипт можно разделить на две составляющие: обновление и создание alias или функции werf, в зависимости от shell.
На стадии обновления выполняется проверка и обновление multiwerf, а также скачивается актуальная версия werf на основе указанных параметров MAJOR.MINOR
и CHANNEL
.
Если скрипт выполняется впервые или для указанных параметров MAJOR.MINOR
и CHANNEL
локально нет подходящих версий, исходя из локального файла соответствий версий и каналов, то шаги обновления и создания alias werf выполняются последовательно.
Иначе обновление запускается в фоновом режиме, alias или функция werf ссылается на существующий локально бинарный файл, а результат выполнения обновления никак не повлияет на текущую сессию.
if multiwerf werf-path MAJOR.MINOR CHANNEL >~\.multiwerf\multiwerf_use_first_werf_path.log 2>&1; then
(multiwerf update --with-cache MAJOR.MINOR CHANNEL >~\.multiwerf\background_update.log 2>&1 </dev/null &)
else
multiwerf update MAJOR.MINOR CHANNEL
fi
WERF_PATH=$(multiwerf werf-path MAJOR.MINOR CHANNEL)
WERF_FUNC=$(cat <<EOF
werf()
{
$WERF_PATH "\$@"
}
EOF
)
eval "$WERF_FUNC"
if (Invoke-Expression -Command "multiwerf werf-path MAJOR.MINOR CHANNEL >~\.multiwerf\multiwerf_use_first_werf_path.log 2>&1" | Out-String -OutVariable WERF_PATH) {
Start-Job { multiwerf update --with-cache MAJOR.MINOR CHANNEL >~\.multiwerf\background_update.log 2>&1 }
} else {
multiwerf update MAJOR.MINOR CHANNEL
Invoke-Expression -Command "multiwerf werf-path MAJOR.MINOR CHANNEL" | Out-String -OutVariable WERF_PATH
}
function werf { & $WERF_PATH.Trim() $args }
FOR /F "tokens=*" %%g IN ('multiwerf werf-path MAJOR.MINOR CHANNEL') do (SET WERF_PATH=%%g)
IF %ERRORLEVEL% NEQ 0 (
multiwerf update MAJOR.MINOR CHANNEL
FOR /F "tokens=*" %%g IN ('multiwerf werf-path MAJOR.MINOR CHANNEL') do (SET WERF_PATH=%%g)
) ELSE (
START /B multiwerf update MAJOR.MINOR CHANNEL >~/.multiwerf/background_update.log 2>&1
)
DOSKEY werf=%WERF_PATH% $*
При обновлении multiwerf пытается скачать правильную версию werf, основываясь на специальном файле соответствий версий и каналов. По умолчанию multiwerf использует файл соответствий, который хранится и сопровождается в репозитории werf (https://github.com/werf/werf/blob/multiwerf/multiwerf.json)
Такой подход позволяет использовать одни и теже версии werf локально и в CI, а также не задумываться об обновлениях. Разработчики werf создают релизы с правками и новым функционалом, переключают версии в каналах, в то время как пользователь, везде использует одну единственную команду.
Способ 2: установка бинарного файла
Выберите подходящую версию из релизов на GitHub или на bintray и используйте один из предложенных подходов с выбранным URL-адресом.
MacOS
curl -L https://dl.bintray.com/flant/werf/v1.1.21+fix22/werf-darwin-amd64-v1.1.21+fix22 -o /tmp/werf
chmod +x /tmp/werf
sudo mv /tmp/werf /usr/local/bin/werf
Linux
curl -L https://dl.bintray.com/flant/werf/v1.1.21+fix22/werf-linux-amd64-v1.1.21+fix22 -o /tmp/werf
chmod +x /tmp/werf
sudo mv /tmp/werf /usr/local/bin/werf
Windows
PowerShell
$WERF_BIN_PATH = "C:\ProgramData\werf\bin"
mkdir $WERF_BIN_PATH
Invoke-WebRequest -Uri https://dl.bintray.com/flant/werf/v1.1.21+fix22/werf-windows-amd64-v1.1.21+fix22.exe -OutFile $WERF_BIN_PATH\werf.exe
[Environment]::SetEnvironmentVariable(
"Path",
[Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::Machine) + "$WERF_BIN_PATH",
[EnvironmentVariableTarget]::Machine)
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
cmd.exe
Запустите cmd.exe от имени администратора, а затем выполните следующие действия:
set WERF_BIN_PATH="C:\ProgramData\werf\bin"
mkdir %WERF_BIN_PATH%
bitsadmin.exe /transfer "werf" https://dl.bintray.com/flant/werf/v1.1.21+fix22/werf-windows-amd64-v1.1.21+fix22.exe %WERF_BIN_PATH%\werf.exe
setx /M PATH "%PATH%;%WERF_BIN_PATH%"
# откройте новую сессию и начните использовать werf
Способ 3: сборка из исходников
go get github.com/werf/werf/cmd/werf
Обещание обратной совместимости
Note: Настоящее обещание относится к werf, начиная с версии 1.0, и не относится к предыдущим версиям или версиям dapp
werf использует семантическое версионирование. Это значит, что мажорные версии (1.0, 2.0) могут быть обратно не совместимыми между собой. В случае werf это означает, что обновление на следующую мажорную версию может потребовать полного передеплоя приложений, либо других ручных операций.
Минорные версии (1.1, 1.2, etc) могут добавлять новые “значительные” изменения, но без существенных проблем обратной совместимости в пределах мажорной версии. В случае werf это означает, что обновление на следующую минорную версию в большинстве случаев будет беспроблемным, но может потребоваться запуск предоставленных скриптов миграции.
Патч-версии (1.1.0, 1.1.1, 1.1.2) могут добавлять новые возможности, но без каких-либо проблем обратной совместимости в пределах минорной версии (1.1.x). В случае werf это означает, что обновление на следующий патч (следующую патч-версию) не должно вызывать проблем и требовать каких-либо ручных действий.
- Мы не гарантируем обратную совместимость между версиями:
- канала обновлений
alpha
, - канала обновлений
beta
, - канала обновлений
ea
.
- канала обновлений
- Мы гарантируем обратную совместимость между версиями:
- канала обновлений
stable
в пределах минорной версии (1.1.x), - канала обновлений
rock-solid
в пределах минорной версии (1.1.x).
- канала обновлений