GNU/Linux >> Tutoriales Linux >  >> Linux

Automatización de versiones upstream con release-bot

Si posee o mantiene un repositorio de GitHub y alguna vez envió un paquete desde él a PyPI y/o Fedora, sabe que requiere un trabajo adicional utilizando la infraestructura de Fedora.

Buenas noticias:hemos desarrollado una herramienta llamada release-bot que automatiza el proceso. Todo lo que necesita hacer es registrar un problema en su repositorio ascendente y release-bot se encarga del resto. Pero no nos adelantemos. Primero, veamos qué debe configurarse para que se produzca esta automatización. He elegido la familia de meta-pruebas repositorio ascendente como ejemplo.

Archivos de configuración para release-bot

Hay dos archivos de configuración para release-bot:conf.yaml y release-conf.yaml .

conf.yaml

conf.yaml debe ser accesible durante la inicialización del bot; especifica cómo acceder al repositorio de GitHub. Para mostrar eso, he creado un nuevo repositorio git llamado mtf-release-bot , que contiene conf.yaml y los otros archivos secretos.

repository_name: name
repository_owner: owner
# https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/
github_token: xxxxxxxxxxxxxxxxxxxxxxxxx
# time in seconds during checks for new releases
refresh_interval: 180

Para el caso de la familia de metapruebas, el archivo de configuración se ve así:

repository_name: meta-test-family
repository_owner: fedora-modularity
github_token: xxxxxxxxxxxxxxxxxxxxx
refresh_interval: 180

release-conf.yaml

release-conf.yaml debe almacenarse en el propio repositorio; especifica cómo hacer lanzamientos de GitHub/PyPI/Fedora.

# list of major python versions that bot will build separate wheels for
python_versions:
 - 2
  - 3
# optional:
changelog:
 - Example changelog entry
  - Another changelog entry
# this is info for the authorship of the changelog
# if this is not set, person who merged the release PR will be used as an author
author_name: John Doe
author_email: [email protected]
# whether to release on fedora. False by default
fedora: false
# list of fedora branches bot should release on. Master is always implied
fedora_branches:
 - f27

Para el caso de la familia de metapruebas, el archivo de configuración se ve así:

python_versions:
-       2
fedora: true
fedora_branches:
-       f29
-       f28
trigger_on_issue: true

Archivo de configuración de PyPI

El archivo .pypirc , almacenado en su mtf-release-bot Se necesita un repositorio privado para cargar la nueva versión del paquete en PyPI:

[pypi]
username = phracek
password = xxxxxxxx

Clave SSH privada, id_rsa , que configuró en FAS.

La estructura final del repositorio git, con conf.yaml y los demás, se ve así:

$ ls -la
total 24
drwxrwxr-x   3 phracek phracek 4096 Sep 24 12:38 .
drwxrwxr-x. 20 phracek phracek 4096 Sep 24 12:37 ..
-rw-rw-r--   1 phracek phracek  199 Sep 24 12:26 conf.yaml
drwxrwxr-x   8 phracek phracek 4096 Sep 24 12:38 .git
-rw-rw-r--   1 phracek phracek 3243 Sep 24 12:38 id_rsa
-rw-------   1 phracek phracek   78 Sep 24 12:28 .pypirc

Requisitos

Más recursos de Python

  • ¿Qué es un IDE?
  • Hoja de trucos:Python 3.7 para principiantes
  • Los principales marcos de GUI de Python
  • Descargar:7 bibliotecas esenciales de PyPI
  • Desarrolladores de Red Hat
  • Contenido más reciente de Python

El lanzamiento a PyPI requiere el paquete de ruedas para Python 2 y Python 3, así que instale requirements.txt con ambas versiones de pip. También debe configurar sus datos de inicio de sesión de PyPI en $HOME/.pypirc , como se describe en la documentación de PyPI. Si está lanzando a Fedora, debe tener un ticket de Kerberos activo mientras se ejecuta el bot, o especificar la ruta al archivo keytab de Kerberos con -k/–keytab . Además, fedpkg requiere que tenga una clave SSH en su conjunto de claves que cargó en FAS.

Cómo implementar el bot de liberación

Hay dos formas de usar release-bot:como una imagen de Docker o como una plantilla de OpenShift.

Imagen acoplable

Construyamos la imagen usando el s2i comando:

$ s2i build $CONFIGURATION_REPOSITORY_URL usercont/release-bot app-name

donde $CONFIGURATION_REPOSITORY_URL es una referencia al repositorio de GitHub, como https:///mtf-release-conf.

Veamos las imágenes de Docker:

$ docker images
REPOSITORY                                      TAG                     IMAGE ID                CREATED                 SIZE
mtf-release-bot                         latest                  08897871e65e            6 minutes ago           705 MB
docker.io/usercont/release-bot                  latest                  5b34aa670639            9 days ago              705 MB

Ahora intentemos ejecutar el mtf-release-bot imagen con este comando:

$ docker run mtf-release-bot
---> Setting up ssh key...
Agent pid 12
Identity added: ./.ssh/id_rsa (./.ssh/id_rsa)
12:21:18.982 configuration.py  DEBUG  Loaded configuration for fedora-modularity/meta-test-family
12:21:18.982 releasebot.py      INFO   release-bot v0.4.1 reporting for duty!
12:21:18.982 github.py          DEBUG  Fetching release-conf.yaml
12:21:37.611 releasebot.py      DEBUG  No merged release PR found
12:21:38.282 releasebot.py      INFO   Found new release issue with version: 0.8.5
12:21:42.565 releasebot.py      DEBUG  No more open issues found
12:21:43.190 releasebot.py      INFO   Making a new PR for release of version 0.8.5 based on an issue.
12:21:46.709 utils.py           DEBUG  ['git', 'clone', 'https://github.com/fedora-modularity/meta-test-family.git', '.']

12:21:47.401 github.py          DEBUG  {"message":"Branch not found","documentation_url":"https://developer.github.com/v3/repos/branches/#get-branch"}
12:21:47.994 utils.py           DEBUG  ['git', 'config', 'user.email', '[email protected]']

12:21:47.996 utils.py           DEBUG  ['git', 'config', 'user.name', 'Release bot']

12:21:48.009 utils.py           DEBUG  ['git', 'checkout', '-b', '0.8.5-release']

12:21:48.014 utils.py           ERROR  No version files found. Aborting version update.
12:21:48.014 utils.py           WARNING No CHANGELOG.md present in repository
[Errno 2] No such file or directory: '/tmp/tmpmbvb05jq/CHANGELOG.md'
12:21:48.020 utils.py           DEBUG  ['git', 'commit', '--allow-empty', '-m', '0.8.5 release']
[0.8.5-release 7ee62c6] 0.8.5 release

12:21:51.342 utils.py           DEBUG  ['git', 'push', 'origin', '0.8.5-release']

12:21:51.905 github.py          DEBUG  No open PR's found
12:21:51.905 github.py          DEBUG  Attempting a PR for 0.8.5-release branch
12:21:53.215 github.py          INFO   Created PR: https://github.com/fedora-modularity/meta-test-family/pull/243
12:21:53.216 releasebot.py      INFO   I just made a PR request for a release version 0.8.5
12:21:54.154 github.py          DEBUG  Comment added to PR: I just made a PR request for a release version 0.8.5
 Here's a [link to the PR](https://github.com/fedora-modularity/meta-test-family/pull/243)
12:21:54.154 github.py          DEBUG  Attempting to close issue #242
12:21:54.992 github.py          DEBUG  Closed issue #242

Como puede ver, release-bot cerró automáticamente el siguiente problema y solicitó una nueva versión ascendente de meta-test-family:https://github.com/fedora-modularity/meta-test-family/issues/243.

Además, release-bot creó un nuevo PR con registro de cambios. Puede actualizar el PR, por ejemplo, squash changelog, y una vez que lo fusione, se lanzará automáticamente a GitHub y PyPI y Fedora se iniciarán.

Ahora tiene una solución funcional para publicar fácilmente versiones anteriores de su paquete en PyPi y Fedora.

Plantilla OpenShift

Otra opción para entregar lanzamientos automatizados usando release-bot es implementarlo en OpenShift.

La plantilla de OpenShift tiene el siguiente aspecto:

kind: Template
apiVersion: v1
metadata:
  name: release-bot
  annotations:
    description: S2I Relase-bot image builder
    tags: release-bot s2i
    iconClass: icon-python
labels:
  template: release-bot
  role: releasebot_application_builder
objects:
  - kind : ImageStream
    apiVersion : v1
    metadata :
        name : ${APP_NAME}
        labels :
          appid : release-bot-${APP_NAME}
  - kind : ImageStream
    apiVersion : v1
    metadata :
      name : ${APP_NAME}-s2i
      labels :
        appid : release-bot-${APP_NAME}
    spec :
      tags :
        - name : latest
          from :
            kind : DockerImage
            name : usercont/release-bot:latest
         #importPolicy:
         #  scheduled: true
  - kind : BuildConfig
    apiVersion : v1
    metadata :
      name : ${APP_NAME}
      labels :
        appid : release-bot-${APP_NAME}
    spec :
      triggers :
        - type : ConfigChange
        - type : ImageChange
      source :
        type : Git
        git :
          uri : ${CONFIGURATION_REPOSITORY}
          contextDir : ${CONFIGURATION_REPOSITORY}
        sourceSecret :
          name : release-bot-secret
      strategy :
        type : Source
        sourceStrategy :
          from :
            kind : ImageStreamTag
            name : ${APP_NAME}-s2i:latest
      output :
        to :
          kind : ImageStreamTag
          name : ${APP_NAME}:latest
  - kind : DeploymentConfig
    apiVersion : v1
    metadata :
      name: ${APP_NAME}
      labels :
        appid : release-bot-${APP_NAME}
    spec :
      strategy :
        type : Rolling
      triggers :
         - type : ConfigChange
         - type : ImageChange
           imageChangeParams :
             automatic : true
             containerNames :
              - ${APP_NAME}
             from :
               kind : ImageStreamTag
               name : ${APP_NAME}:latest
      replicas : 1
      selector :
        deploymentconfig : ${APP_NAME}
      template :
        metadata :
          labels :
            appid: release-bot-${APP_NAME}
            deploymentconfig : ${APP_NAME}
        spec :
          containers :
            - name : ${APP_NAME}
              image : ${APP_NAME}:latest
              resources:
                requests:
                  memory: "64Mi"
                  cpu: "50m"
                limits:
                  memory: "128Mi"
                  cpu: "100m"

parameters :
  - name : APP_NAME
    description : Name of application
    value :
    required : true
  - name : CONFIGURATION_REPOSITORY
    description : Git repository with configuration
    value :
    required : true

La forma más fácil de implementar el mtf-release-bot repositorio con archivos secretos en OpenShift es usar los siguientes dos comandos:

$ curl -sLO https://github.com/user-cont/release-bot/raw/master/openshift-template.yml

En su instancia de OpenShift, implemente la plantilla ejecutando el siguiente comando:

oc process -p APP_NAME="mtf-release-bot" -p CONFIGURATION_REPOSITORY="git@<git_lab_path>/mtf-release-conf.git" -f openshift-template.yml | oc apply

Resumen

Consulte el ejemplo de solicitud de incorporación de cambios en el repositorio ascendente de meta-test-family, donde encontrará información sobre qué release-bot lanzó. Una vez que llega a este punto, puede ver que release-bot puede enviar nuevas versiones ascendentes a GitHub, PyPI y Fedora sin una gran intervención del usuario. Automatiza todos los pasos para que no tenga que cargar y crear manualmente nuevas versiones anteriores de su paquete.


Linux
  1. Seguimiento del kernel con trace-cmd

  2. Mis 3 versiones favoritas de Linux

  3. Comando Nohup con ejemplos

  4. Comando JQ en Linux con ejemplos

  5. Parchear un binario con Dd?

Automatización de ServiceNow con Red Hat Ansible Automation Platform

6 pasos para automatizar envíos de código con Ansible Automation Platform

Programación con cron &At

Comando de historial con ejemplos

Microservicios con Python3

Autoridad de certificación con OpenSSL