2012-02-18 17 views
82

Me gustaría usar travis-ci para uno de mis projects.Usando claves secretas api en travis-ci

El proyecto es un contenedor API, por lo que muchas de las pruebas se basan en el uso de claves API secretas. Para realizar pruebas localmente, solo las guardo como variables de entorno. ¿Cuál es una forma segura de usar esas llaves en Travis?

Respuesta

88

Travis tiene una función para cifrar variables de entorno ("Encrypting environment variables"). Esto se puede usar para proteger tus claves API secretas. Lo he usado con éxito para mi clave de Heroku API.

Todo lo que tiene que hacer es instalar la gema travis, cifrar la cadena que desea y agregar la cadena cifrada en su .travis.yml. El cifrado solo es válido para un repositorio. El comando travis obtiene su clave pública para su repositorio y luego puede descifrar la cadena durante la compilación.

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

Esto le da el siguiente resultado:

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

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

No olvide documentar qué variables está usando y por qué, porque una vez encriptadas, solo alguien con las claves originales puede recuperar ellos. – jerseyboy

+1

Parece que las versiones más nuevas de la gema de Travis prefieren tener sus argumentos en el orden opuesto: 'travis encrypt [args ..] [options]', es decir, querrás hacer 'travis encrypt MY_SECRET_ENV = super_secret -r mi_nombre de usuario/my_repo'. Poner las opciones primero y los datos que se cifrarán por última vez muestra una advertencia. –

+0

@ Jordan gracias por la actualización, actualicé mi respuesta en consecuencia. – Odi

0

Utilice un conjunto diferente de claves API y hágalo de la misma manera. Tu cuadro de travis se configura para tu ejecución de construcción y luego se derriba por completo una vez que ha finalizado tu construcción. Tienes acceso de root a tu caja durante la compilación, para que puedas hacer lo que quieras con ella.

+4

¿Qué quiere decir con "hacerlo de la misma manera"? No me gusta la idea de almacenar claves API en el repositorio en sí (es decir, en el archivo .travis.yml), pero no parece haber otra forma de configurar variables de entorno en travis. – BM5k

+0

La variable env se cifrará con una clave pública, por lo que solo el propietario de la clave secreta puede descifrarla.No deberías usar un token importante. En mi caso, utilicé el que travis ya tenía para GitHub. Esto funcionó bastante bien y desde dentro de github puedo revocar ese token cada vez que siento que hay un riesgo. Tener el token cifrado en mi repositorio no me hace dormir mal. https://github.com/ecki/GCViewer/blob/topic-ciupload/.travis.yml – eckes

2

También puede definir secreto variables in repository settings:

variables definidas en las opciones del depósito son los mismos para todas las versiones, y al reiniciar una versión anterior, usa los últimos valores. Estas variables no están automáticamente disponibles para las horquillas.

definir variables en las opciones del depósito de que:

  • difieren por repositorio.
  • contienen datos confidenciales, como credenciales de terceros.

para definir las variables de opciones del depósito, asegúrese de que está conectado, vaya al repositorio en cuestión, elegir la opción “Configuración” en el menú de cremallera, y haga clic en “Añadir nueva variable” en las “variables de entorno " sección.

+1

No entendí cómo crear variables * secretas *. Cuando se busca en Google, los resultados explican cómo encriptar. – XedinUnknown

+0

@XedinUnknown Esto se puede usar para variables secretas. Desde el enlace: "De forma predeterminada, el valor de estas nuevas variables de entorno está oculto de la línea de exportación en los registros. Esto corresponde al comportamiento de las variables cifradas en su .travis.yml. Las variables se almacenan cifradas en nuestros sistemas, y descifrado cuando se genera el script de construcción ". – bmaupin

3

acuerdo con this en la documentación ci Travis se dice que:

Si tiene instalados clientes de línea de comandos tanto el Heroku y Travis CI, puede obtener su clave, cifrarlo y añadirlo a su .travis.yml ejecutando el siguiente comando desde el directorio del proyecto:

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

se refieren a the following tutorial para instalar el cliente alojamiento heroku rding a su sistema operativo

+0

Solo quiero verificar: la clave que agrega a su archivo es segura de cargar en el control de la versión, ¿verdad? – vapurrmaid

Cuestiones relacionadas