yml travis setup generate deploy create cli artifacts travis-ci

artifacts - setup - travis download



¿Cómo publicar artefactos en Travis CI? (9)

Me gustaría usar Travis CI para mi proyecto de código abierto. El problema que Travis no proporciona ninguna forma de publicar artefactos producidos (sin embargo, tienen esto en sus planes futuros).

¿Cuáles son las soluciones para publicar / cargar artefactos en algún lugar? Tengo permiso para ejecutar cualquier script en una máquina CI.

La carga simple funcionará, pero existe un problema de seguridad: cualquiera podrá cargar algo de la misma manera que todas las fuentes son públicas.




La integración SBT-Travis-Sonatype consta de los siguientes pasos principales:

  1. Añadiendo el plugin sbt-pgp;
  2. Generación de un par de claves para firmar sus artefactos y publicarlo en un servidor de claves públicas;
  3. Cifrar los archivos de credenciales del par de claves y el sonatipo y agregarlos a su proyecto;
  4. Creando la configuración de travis y agregando la clave cifrada utilizada por Travis para descomprimir tus archivos secretos.

Reuní una instrucción simple sobre cómo integrar SBT con Travis-CI y Sonatype, está disponible here y contiene los pasos necesarios desde la configuración de los complementos del proyecto hasta el cifrado de los archivos y la configuración de Travis. Se basa principalmente en el blog de desarrolladores de John Duffel combinado con los documentos de referencia sbt-pgp.


Me doy cuenta de que esta es una pregunta más antigua, pero me gustaría agregar otra solución a la combinación que creo que es mejor que las que hemos analizado hasta ahora.

Utilice Bintray:

El OP está interesado en publicar artefactos de Travis-CI. Recomiendo usar https://bintray.com/ con una organización o con su propia cuenta personal (ambos funcionan, pero en el caso de una organización de github, podría tener más sentido tener una organización que coincida con ellos y publicar artefactos de esa organización de github vaya a su correspondiente bintray org).

La razón de esto se debe a lo que ofrece Bintray y su soporte para proyectos de código abierto. Le recomiendo que eche un vistazo aquí en su resumen: http://www.jfrog.com/bintray/

También puede vincularse a JCenter , lo que hace que lo que publique sea mucho más fácil de consumir / descargar / usar (a través de maven, gradle, SBT, etc.).

Para Java + Maven:

Una vez que haya configurado Bintray (su cuenta creada o una organización), puede integrarlo fácilmente con travis. Para las compilaciones java y maven, puede usar http://docs.travis-ci.com/user/encryption-keys/ opción de http://docs.travis-ci.com/user/encryption-keys/ para cifrar los ${BINTRAY_USER} y ${BINTRAY_API_KEY} . Luego, puede configurar el despliegue de Maven para empujar las versiones en bintray. En el archivo maven settings.xml , solo hará referencia a las variables de entorno que cifró con travis como usuario / paso, es decir:

<servers> <server> <id>my-bintray-id</id> <username>${env.BINTRAY_USER}</username> <password>${env.BINTRAY_API_KEY}</password> </server> </servers>

A continuación, agregará la sección distributionManagement al pom.xml su proyecto, algo como esto:

<distributionManagement> <repository> <id>my-bintray-id</id> <url>https://api.bintray.com/maven/myUserName/myRepoName/my_awesome_project;publish=1</url> </repository> </distributionManagement>

Luego, configurará su archivo .travis.yml para que "detecte" cuando haya una versión. He usado la primera mitad del plugin de mvn release:prepare : mvn release:prepare (ignorando la segunda mitad de release: preform) de su caja de desarrollo local. Esto hará una etiqueta, golpeará la versión en el pom, etc., en su nombre. Lo que terminas con es una etiqueta de una versión (no -SNAPSHOT) en github. Este compromiso etiquetado se dirige hacia travis, donde su .travis.yml configurará Travis para compilar y publicar.

En su .travis.yml , configúrelo para probar un TRAVIS_TAG , TRAVIS_PULL_REQUEST y cualquier otra verificación que desee realizar antes de llamar a mvn deploy . Usted haría esto en after_success . De esta manera, travis construye todo el tiempo, pero solo ejecuta mvn deploy cuando se trata de una etiqueta y cumple con las demás condiciones que desee (como, por ejemplo, una compilación JDK8). Aquí hay un ejemplo .travis.yml :

language: java jdk: - oraclejdk7 - oraclejdk8 after_success: - mvn clean cobertura:cobertura coveralls:report javadoc:jar - test "${TRAVIS_PULL_REQUEST}" == "false" && test "${TRAVIS_TAG}" != "" && mvn deploy --settings travis-settings.xml branches: only: - master # Build tags that match this regex in addition to building the master branch. - /^my_awesome_project-[0-9]+/.[0-9]+/.[0-9]+/ env: global: - secure: cfHTvABEszX79Dhj+u8/3EahMKKpAA2cqh7s3JACtVt5HMEXkkPbeAFlnywO+g4p2kVENcQGbZCiuz2FYBtN3KrIwFQabJE8FtpF57nswPRrmpRL+tWcYtipVC2Mnb4D7o6UR2PiC7g20/9EEWV7OeddXU3fzNBBW+LXkKAL20Ishg/jTDj+DIMFeVU8a6gd+6G2r8rf2jr2PMUeq1lO+eSkm3cjQLjRJN3CNY5GQToV/l1hef732y//6K9prP+H9vbkx+c7KF6W6OsQuXha9hy038J4ZXFWiNZdLUZLytrTcsOdbL2d8qEBv38ycs71kw0eHINMcPbNWYaxWHKeQRIievSPbTqOmm5BSh/keBRQe+aBzKrzw680QcRcnDMFePb1uu9VhpCabu0fBTer/7MENhR/QDoW8g4ydZNqXSWqiJBaYomENhjUF3v/4KzvX5P8bPlVBvgyAAcAzY8+MwLVeZKsJIUAHuS5v6kHSb0F17pvAb1XM+jet92PT/tRh75kVHtwtiPffhCd2/LzjmCLH31CC4WUZDG4OGw/8SbMiGX1Kww1Y9hSp09rQ9ytLaQa1kDa2Nv4syjJRVKWQf3/TS1VLqXBYVZXufY/XtyA0gDV0ZumwNo8ukT5Cnc7hC9oFkRvPkJxvNTzgDWkd6TVUDligxgLQHS/2fZpNo= - secure: cfHTvABEszX79Dhj+u8/3EahMKKpAA2cqh7s3JACtVt5HMEXkkPbeAFlnywO+g4p2kVENcQGbZCiuz2FYBtN3KrIwFQabJE8FtpF57nswPRrmpRL+tWcYtipVC2Mnb4D7o6UR2PiC7g20/9EEWV7OeddXU3fzNBBW+LXkKAL20Ishg/jTDj+DIMFeVU8a6gd+6G2r8rf2jr2PMUeq1lO+eSkm3cjQLjRJN3CNY5GQToV/l1hef732y//6K9prP+H9vbkx+c7KF6W6OsQuXha9hy038J4ZXFWiNZdLUZLytrTcsOdbL2d8qEBv38ycs71kw0eHINMcPbNWYaxWHKeQRIievSPbTqOmm5BSh/keBRQe+aBzKrzw680QcRcnDMFePb1uu9VhpCabu0fBTer/7MENhR/QDoW8g4ydZNqXSWqiJBaYomENhjUF3v/4KzvX5P8bPlVBvgyAAcAzY8+MwLVeZKsJIUAHuS5v6kHSb0F17pvAb1XM+jet92PT/tRh75kVHtwtiPffhCd2/LzjmCLH31CC4WUZDG4OGw/8SbMiGX1Kww1Y9hSp09rQ9ytLaQa1kDa2Nv4syjJRVKWQf3/TS1VLqXBYVZXufY/XtyA0gDV0ZumwNo8ukT5Cnc7hC9oFkRvPkJxvNTzgDWkd6TVUDligxgLQHS/2fZpNo=

(Los archivos de seguridad son solo un ejemplo, después de cifrar el usuario de Bintray y la clave API de Bintray con Travis, verás algo similar en tu yaml).

Esto le brinda un sistema completo de extremo a extremo para publicar artefactos "en la naturaleza" donde cualquier persona puede consumir y usar. Está utilizando un servicio que está diseñado desde el principio como un depósito de artefactos (bintray), y está utilizando Travis de una manera inteligente para verificar las etiquetas que maven release: prepare produce. Todos juntos, ustedes deciden cuándo se realizarán los mvn release:prepare ( mvn release:prepare desde su caja de desarrollo local), y travis los lleva a bintray.

Otro

Tenga en cuenta que existe una solicitud de extracción de travis-ci / dpl en github para lograr una integración más estrecha (proveedores de travis) entre Travis y bintray. Esto hace que sea mucho más fácil hacer que travis envíe artefactos a bintray (los lanzamientos ; bintray no tenía la intención de mantener SNAPSHOTs, usa Artifactory para eso). A pesar de que github tiene cierto soporte para lanzamientos, a partir de este escrito, creo que bintray es superior en este rol y la herramienta adecuada para usar.

¡Buena suerte!


Por lo tanto, primero debe asegurarse de que intenta implementar artefactos de lanzamiento. Así que haz la etiqueta primero en Github. Para hacerlo manualmente:

Luego, en el archivo .travis.yml , agregue la siguiente configuración. Para usuarios de Gradle.

language: java jdk: - oraclejdk7 sudo: required before_install: - chmod +x gradlew script: - ./gradlew clean build -i --continue deploy: provider: releases api_key: ${api_key} file: "build/libs/Project.jar" skip_cleanup: true on: all_branches: true tags: true

Aquí el valor de api_key es la variable de entorno Travis Ci . Lo que apunta a Github api_key.

archivo es el artefacto generado a partir de la construcción. Que queremos desplegar en gitHub .

on: all_branches: true tags: true

Es obligatoria la configuración para que se implementen las etiquetas.

No, tienes que obtener la api_key de github:

  1. Ir a tokens de acceso personal

  1. Elija Generar nuevo token

  1. Seleccione los ámbitos apropiados para la api_key
  2. Copia la api_key generada
  3. Vaya a Travis Ci y añada la variable de entorno. Para tal efecto elige Ajustes
    1. Pegar la api_key generada

Cuando active una nueva construcción, se desplegará el artefacto.




Actualización : Github deshabilita la API de descarga ahora, por lo que a continuación la respuesta es una idea.

Mi solución está utilizando "variables de entorno seguras" proporcionadas por travis-ci y "API de descarga de repo de Github" con secuencias de comandos relacionadas

Cada repo en Github tiene páginas de descarga, también es un buen lugar para publicar sus artefactos, y tiene relacionado "Repo Download API" http://developer.github.com/v3/repos/downloads/

Al final, en el .travis-ci.yml se ve a continuación

env: global: - secure: "qkE5/TVKQV/+xBEW5M7ayWMMtFwhu44rQb9zh3n0LH4CkVb+b748lOuW3htc/nXfnXU8aGzOsQBeCJZQstfzsHFPkll+xfhk38cFqNQp7tpMo/AOZIkqd2AIUL/n0bgaFD+1kFAxKTu02m11xzkDNw6FuHMVvoMEQu/fo115i2YmWHo=" after_script: - ./github-upload.rb sdcamp.zh.pdf larrycai/sdcamp --description "generated by travis-ci, $TRAVIS_JOB_ID" --force --name sdcamp.zh.snapshot.pdf --skip-ssl-verification -t $GITHUB_TOKEN

vea mi blog de detalles: http://larrycaiyu.com/blog/2012/10/25/publish-the-artifacts-inside-travis-ci-to-github/


GitHub lanza paso a paso

El método se mencionó en https://.com/a/24100779/895245 , y está mal documentado en: https://docs.travis-ci.com/user/deployment/releases/ , por lo que aquí hay una descripción más detallada. paso a paso.

Carga los artefactos en los lanzamientos de GitHub https://github.com/<username>/<repo>/releases que existen para cada etiqueta Git que presiona.

  1. Obtenga un token de acceso personal en https://github.com/settings/tokens

    Solo habilite el acceso "public_repo" para repositorios públicos, "repo" para privado.

    Guarda el token en algún lugar ya que solo puedes verlo una vez.

  2. Instala la gema travis :

    gem install travis # See: https://.com/a/33119804/895245 gem update --system

    Luego cd en tu repositorio y:

    travis encrypt <api-token>

    pero más recientemente, las personas han informado que en su lugar se necesita travis encrypt -r githubusername/repositoryname --org , consulte: https://github.com/travis-ci/travis-ci/issues/8128

    Esto producirá una salida como:

    secure: "<encrypted-token>"

    Anote el token encriptado grande.

  3. Use un .travis.yml siguiente manera:

    script: # This command generates a release.zip file. - make dist deploy: provider: releases api_key: secure: "<encrypted-token>" file: ''release.zip'' skip_cleanup: true on: tags

    Lo que sucede es que Travis reemplaza todo something: secure: <encrypted-string> con something: <decrypted-string> como se explica en: http://docs.travis-ci.com/user/encryption-keys/

    Esto es seguro porque solo los empujes autorizados pueden descifrar la cadena, por lo que si un usuario malintencionado intenta realizar una solicitud de extracción para obtener su cadena, solo debería mostrar la cadena cifrada.

    Ahora, cada vez que presiona un commit con una etiqueta, Travis cargará release.zip al release:

    git commit -m 1.0 git tag -m 1.0 1.0 git push --tags

    Si ya había presionado la confirmación y la etiqueta después, es posible que tenga que hacer clic en el botón "Reiniciar compilación" en la interfaz de usuario de Travis para que se cargue.

https://.com/a/38037626/895245 tiene algunas capturas de pantalla del proceso.

Método alternativo: variable de entorno

  1. En lugar de una cadena encriptada, también podríamos usar una variable de entorno oculta.

    En la configuración de Travis para el repositorio https://travis-ci.org/<me>/<myrepo>/settings crea una variable de entorno:

    GITHUB_API_KEY=<token>

    y asegúrese de marcar "Mostrar valor en el registro de compilación" como "Desactivado", y use:

    api_key: ''$GITHUB_API_KEY''

    Si bien esto no se mostrará en los registros para las solicitudes de extracción, este método es más riesgoso, ya que podría enumerar el entorno de una compilación.

    La ventaja es que este método es más fácil de entender.

Un ejemplo simple mío que carga imágenes generadas desde Gnuplot a lanzamientos de GitHub:

Pregunta sobre la implementación de GitHub Pages: ¿Cómo publicar en Github Pages desde Travis CI?