Популярное
Свежее
Моя лента
Сообщения
Рейтинг
Пополнить Steam
Низкая комиссия
Темы
Игры
Офтоп
Гайды
Вопросы
Ночной музпостинг
Hollow Knight
Творчество
Музыка
Кино и сериалы
Инди
Показать все
DTF
О проекте
Правила
Реклама
Приложения
Аккаунт удален
10.07.2020

Статья удалена

Пару дней назад публиковал этот вопрос в "Вопросы", полагая, что в этот подсайт можно кидать что угодно (ну, поскроллил немного, а там на все темы пишут), но похоже, что нет, и я решил перенести его себе в блог. К тому же, я нашел ответ, мало ли это кому-то интересно. Сначала оставлю текст вопроса с описанием проблемы, а чуть ниже опишу найденное решение.

Вопрос

Для публикации образа я использую простенький .ps1-скрипт примерно такого вида:

docker login -u $USERNAME -p $GH_TOKEN docker.pkg.github.com # Дальше docker build и docker push

Он запускается в веб-интерфейсе AppVeyor после тестов. В appveyor.yml это выглядит таким образом:

after_test: - pwsh: ./gh-docker.ps1 login password

Как видно из текста выше, пароль и логин остаются незашифрованными, поэтому деплой я делаю через веб-интерфейс, перезаписывая настройки, заданные в appveyor.yml, но хотелось бы все-таки использовать именно .yml-файл с возможность шифровать пароль. Я знаю, что в веб-интерфейсе можно по дефолту задать шифрование для переменных среды (того же GH_TOKEN), но оно не работает в запускаемых скриптах, т.е. использовать GH_TOKEN в самом скрипте или передавать его аргументом в скрипт не получается (либо я делаю что-то не так).

Решение

Решение оказалось очень простым, но было найдено не в самом очевидном месте, почему и пришлось убить массу времени.

Как оказалось, переменные среды (именно в скриптах) в AppVeyor вызываются таким образом:

# Не $VAR, а: $env:VAR

И скрипт нужно вызывать так:

./gh-docker.ps1 $env:LOGIN $env:PASSWORD # Либо самим скриптом: docker login -u $env:USERNAME -p $env:GH_TOKEN docker.pkg.github.com # Дальше docker build и docker push

Осталась лишь одна проблема: использование -p/--password считается небезопасным, и докер рекомендует использовать вместо него --paswword-stdin. Я пробовал такой вариант:

echo $env:GH_TOKEN | docker login --username $env:LOGIN --password-stdin

Но пароль не подцепился. Если смогу решить и этот вопрос -- обновлю пост.