Suivant: , Précédent: , Monter: Services   [Table des matières][Index]


10.8.23 Intégration continue

Cuirass est un outil d’intégration continue pour Guix. On peut l’utiliser aussi bien pour le développement que pour fournir des substituts à d’autres (voir Substituts).

Le module (gnu services cuirass) fournit le service suivant.

Procédure Scheme : cuirass-service-type

Le type du service Cuirass. Sa valeur doit être un objet cuirass-configuration, décrit ci-dessous.

Pour ajouter des travaux de construction, vous devez indiquer le champ specifications de la configuration. Voici un exemple de service qui récupère le dépôt Guix et construit les paquets depuis un manifeste. Certains des paquets sont définis dans l’entrée "custom-packages", qui est l’équivalent de GUIX_PACKAGE_PATH.

(define %cuirass-specs
  #~(list
     '((#:name . "my-manifest")
       (#:load-path-inputs . ("guix"))
       (#:package-path-inputs . ("custom-packages"))
       (#:proc-input . "guix")
       (#:proc-file . "build-aux/cuirass/gnu-system.scm")
       (#:proc . cuirass-jobs)
       (#:proc-args . ((subset . "manifests")
                       (systems . ("x86_64-linux"))
                       (manifests . (("config" . "guix/manifest.scm")))))
       (#:inputs . (((#:name . "guix")
                     (#:url . "git://git.savannah.gnu.org/guix.git")
                     (#:load-path . ".")
                     (#:branch . "master")
                     (#:no-compile? . #t))
                    ((#:name . "config")
                     (#:url . "https://git.example.org/config.git")
                     (#:load-path . ".")
                     (#:branch . "master")
                     (#:no-compile? . #t))
                    ((#:name . "custom-packages")
                     (#:url . "https://git.example.org/custom-packages.git")
                     (#:load-path . ".")
                     (#:branch . "master")
                     (#:no-compile? . #t)))))))

(service cuirass-service-type
         (cuirass-configuration
          (specifications %cuirass-specs)))

Tandis que les informations liés aux travaux de construction sont directement dans les spécifications, les paramètres globaux pour le processus cuirass sont accessibles dans les autres champs de cuirass-configuration.

Type de données : cuirass-configuration

Type de données représentant la configuration de Cuirass.

log-file (par défaut : "/var/log/cuirass.log")

Emplacement du fichier de journal.

web-log-file (par défaut : "/var/log/cuirass-web.log")

Emplacement du fichier journal utilisé par l’interface web.

queries-log-file (par défaut : #f)

Location of the SQL queries log file. By default, SQL queries logging is disabled.

web-queries-log-file (par défaut : #f)

Location of the web SQL queries log file. By default, web SQL queries logging is disabled.

cache-directory (par défaut : "/var/cache/cuirass")

Emplacement du cache du dépôt.

user (par défaut : "cuirass")

Propriétaire du processus cuirass.

group (par défaut : "cuirass")

Groupe du propriétaire du processus cuirass.

interval (par défaut : 60)

Nombre de secondes entre les mises à jour du dépôt suivis des travaux de Cuirass.

queue-size (default: 1)

Size of the database writer queue.

database (par défaut : "/var/lib/cuirass/cuirass.db")

Emplacement de la base de données sqlite qui contient les résultats de construction et les spécifications précédemment ajoutées.

ttl (par défaut : (* 30 24 3600))

Spécifie la durée de vie (TTL) en seconde des racines du ramasse-miette qui sont enregistrés comme des résultats de construction. Cela signifie que les résultats de construction ne seront pas glanés pendant au moins ttl secondes.

port (par défaut : 8081)

Numéro de port utilisé pour le serveur HTTP.

host (par défaut : "localhost")

Écoute sur l’interface réseau de host. La valeur par défaut est d’accepter les connexions depuis localhost.

specifications (par défaut : #~'())

Une gexp (voir G-Expressions) qui s’évalue en une liste de spécifications, où une spécification est une liste d’association (voir Associations Lists dans GNU Guile Reference Manual) dont les clefs sont des mots-clefs (#:exemple-de-mot-clef) comme dans l’exemple plus haut.

use-substitutes? (par défaut : #f)

Cela permet d’utiliser des substituts pour éviter de construire toutes les dépendance d’un travail depuis les sources.

one-shot? (par défaut : #f)

N’évaluer les spécification et construire les dérivations qu’une seule fois.

fallback? (par défaut : #f)

Lorsque la substitution d’un binaire pré-construit échoue, revenir à la construction locale du paquet.

extra-options (par défaut : '())

Options supplémentaires à passer au lancement des processus de Cuirass.

cuirass (par défaut : cuirass)

Le paquet Cuirass à utiliser.

Simple Cuirass

The Cuirass service configuration described above can be a little intimidating. In particular, getting the right specifications can prove difficult. The simple-cuirass-configuration->specs procedure offers a way to generate those specifications and thus setup a continuous integration server more readily.

Scheme Procedure : simple-cuirass-configuration->specs configuration

This procedure takes a simple-cuirass-configuration record as argument and returns the corresponding Cuirass specifications gexp.

Data Type : simple-cuirass-configuration

Data type representing the configuration of a simple Cuirass instance.

build (default: all)

The packages to be built by Cuirass. It defaults to all, which means that all the discovered packages in the subsequent channels field are to be selected.

It is also possible to set this field to a list of build-manifest records, so that only the packages that are part of the declared manifests are built. This record is described below.

Data Type : build-manifest
channel-name

The name of the channel where the manifest is located.

manifest

The manifest path inside the channel.

channels (par défaut : %default-channels)

The channels to be fetched by Cuirass (voir Canaux).

non-package-channels (default: '())

List the channel names that must not be searched for packages. That is often the case for the channel containing the manifest.

systems (default: (list (%current-system)))

Build every discovered package for each system in this list. By default only the current system is selected.

Here is an example of how to setup a Cuirass instance that builds all the packages declared by Guix and a user repository. The package list is re-evaluated each time a commit is pushed in one of the declared channels.

(service cuirass-service-type
         (cuirass-configuration
          (specifications
           (simple-cuirass-configuration->specs
            (simple-cuirass-configuration
             (build 'all)
             (channels (cons (channel
                              (name 'my-guix)
                              (url "https://my-git-repo/guix.git"))
                             %default-channels)))))))

In the same spirit, this builds all the packages that are part of the guix or my-guix channels and declared in the manifest located in the conf channel.

(service cuirass-service-type
         (cuirass-configuration
          (specifications
           (simple-cuirass-configuration->specs
            (simple-cuirass-configuration
             (build (list
                     (build-manifest
                      (channel-name 'conf)
                      (manifest "guix/manifest.scm"))))
             (channels (cons* (channel
                               (name 'my-guix)
                               (url "https://my-git-repo/guix.git"))
                              (channel
                               (name 'conf)
                               (url "https://my-git-repo/conf.git"))
                              %default-channels))
             (non-package-channels '(conf)))))))

Finally, simple-cuirass-services takes as a second optional argument a cuirass-configuration record. It can be used to customize the configuration of the Cuirass instance.

(simple-cuirass-services
 (simple-cuirass-configuration
  (build 'all)
  (channels (cons (channel
                   (name 'my-guix)
                   (url "https://my-git-repo/guix.git"))
                  %default-channels))
  (non-package-channels '(conf)))
 (cuirass-configuration
  (inherit %default-cuirass-config)
  (host "0.0.0.0"))) ;listen on all interfaces.

Suivant: , Précédent: , Monter: Services   [Table des matières][Index]