2012-02-18 5 views
82

Я бы хотел использовать travis-ci для одного из моих projects.Использование секретных ключей api на travis-ci

Проект представляет собой оболочку API, поэтому многие из тестов полагаются на использование секретных ключей API. Чтобы проверить локально, я просто храню их как переменные среды. Какой безопасный способ использовать эти ключи на Travis?

ответ

88

У Travis есть функция для шифрования переменных окружения ("Encrypting environment variables"). Это можно использовать для защиты ваших секретных ключей API. Я успешно использовал это для моего ключа API Heroku.

Все, что вам нужно сделать, это установить драгоценный камень travis, зашифровать нужную строку и добавить зашифрованную строку в ваш .travis.yml. Шифрование действует только для одного репозитория. Команда travis получает ваш открытый ключ для вашего репо и может затем расшифровать строку во время сборки.

gem install --user travis 
travis encrypt MY_SECRET_ENV=super_secret -r my_username/my_repo 

Это дает следующий результат:

Please add the following to your .travis.yml file: 

    secure: "OrEeqU0z6GJdC6Sx/XI7AMiQ8NM9GwPpZkVDq6cBHcD6OlSppkSwm6JvopTR\newLDTdtbk/dxKurUzwTeRbplIEe9DiyVDCzEiJGfgfq7woh+GRo+q6+UIWLE\n3nowpI9AzXt7iBhoKhV9lJ1MROrnn4DnlKxAEUlHTDi4Wk8Ei/g=" 
+11

Не забудьте документировать, какие переменные вы используете, и почему, поскольку после их зашифрования только кто-то с исходными ключами может восстановить их. – jerseyboy

+1

Похоже, что более новые версии драгоценного камня Travis предпочитают иметь свои аргументы в обратном порядке: 'travis encrypt [args ..] [options]', то есть вы захотите сделать 'travis encrypt MY_SECRET_ENV = super_secret -r my_username/my_repo'. Сначала введите параметры и данные, которые будут зашифрованы в последний раз, выведут предупреждение. –

+0

@ Jordan спасибо за обновление, я обновил свой ответ соответственно. – Odi

0

Используйте другой набор ключей API и сделайте это одинаково. Ваш блок travis будет настроен для вашего запуска сборки, а затем полностью снесен после завершения сборки. У вас есть root-доступ к вашему ящику во время сборки, поэтому вы можете делать с ним все, что хотите.

+4

Что вы подразумеваете под «сделать это одинаково»? Мне не очень нравится идея хранить ключи API в самом репо (т. Е. В файле .travis.yml), но, похоже, нет другого способа настроить переменные среды на travis. – BM5k

+0

Env-переменная будет зашифрована с помощью открытого ключа, поэтому только владелец секретного ключа может ее расшифровать.Вы не должны использовать важный токен. В моем случае я использовал ту, которая уже была для Твитва для GitHub. Это работало довольно хорошо, и изнутри github я могу отозвать этот токен, когда чувствую, что travis - риск. Наличие зашифрованного токена в моем репо не заставляет меня спать плохо. https://github.com/ecki/GCViewer/blob/topic-ciupload/.travis.yml – eckes

2

Вы также можете определить секретный variables in repository settings:

Переменные, определенные в настройках хранилища являются одинаковыми для всех сборок, и при перезагрузке старая сборка, она использует последние значения. Эти переменные автоматически не доступны для вилок.

Определение переменных в Repository Настройки, которые:

  • отличаются в хранилище.
  • содержит конфиденциальные данные, такие как сторонние учетные данные.

Для определения переменных в Repository Настройки, убедитесь, что вы вошли в систему, перейдите в хранилище в вопросе, выберите «Настройки» из меню шестеренки и нажмите на «Добавить новую переменную» в «Переменные среды " раздел.

+1

Не понял, как создавать * секретные * переменные. Когда googling это, результаты объясняют, как зашифровать. – XedinUnknown

+0

@XedinUnknown Это может использоваться для секретных переменных. Из ссылки: «По умолчанию значение этих новых переменных среды скрыто от строки экспорта в журналах. Это соответствует поведению зашифрованных переменных в вашем .travis.yml. Переменные хранятся в зашифрованном виде в наших системах и дешифровать при создании сценария сборки ». – bmaupin

3

согласно this в документации či Travis сказано, что:

Если у вас установлен как Heroku и Travis CI клиенты командной строки, вы можете получить ключ, зашифровать его и добавить его в свой .travis.yml, выполнив следующую команду из каталога проекта:

travis encrypt $(heroku auth:token) --add deploy.api_key 

см the following учебник для установки Heroku клиента Acco rding к вашей ОС

+0

Я просто хочу проверить: ключ, который он добавляет к вашему файлу, безопасно загрузить в систему контроля версий, верно? – vapurrmaid