CLI
Cibyl can be used as as a CLI tool to query CI related information from multiple CI systems. Cibyl can provide information from two domains: CI/CD data and product-specific data. The first corresponds to concepts that are pertinent to many CI systems, like builds, jobs, tests or system-specific concepts like pipelines and tenants in Zuul systems (for more details on CI concepts supported by cibyl check the core models section).
Product-specific information is provided by plugins (see the openstack plugin as an example). As the name indicates, these are properties that are not related to the CI system but to the product being tested. In the case of openstack, some examples include the topology of the deployment, or the openstack version being deployed.
Due to this dual source of information, cibyl can be used to query both kinds of properties, as well as combine them in more complex queries. This page will provide several examples of queries that can be done with cibyl.
CLI arguments that accept values follow the assumption that if they are passed
without any value, the user is requesting to list the corresponding
information, while if passed with a value, the value will be used as a filter.
As an example, running cibyl query --jobs
will list all available jobs, while
cibyl query --jobs abc
will list the jobs that have the string abc in their
names.
Note
Throughout this page we assume for simplicity that there is only one CI system defined in the user configuration. Nevertheless, every command shown here can be run with a configuration composed of multiple environments, systems and sources. Check the configuration section for more details on how to construct the configuration for such cases.
Note
In cibyl, all cli arguments that accept a value, like –jobs or –tests will consider the input as a regular expression. The regex are matched using the syntax defined in the re module (docs).
CLI organization
Cibyl supports the following subcommands:
query
features
spec
This page will cover many uses of the query
subcommand, for examples of the
features
one see the features section and for
examples of the spec
subcommand see the spec section.
General parameters
Before listing interesting use-cases, cibyl has also a set of application-wide cli arguments that will affect the queries. This arguments must be specified before the subcommand. For example, to run a command to list of all jobs with a verbose output and a configuration file outside the default path, you should run:
cibyl -v --config path/to/config.yml query --jobs
The application-level arguments supported by cibyl are:
-d, --debug
Turn on debug-level logging
-v, --verbose
Verbosity level. This flag is additive, -vv will print more output than -v. In verbose mode, additional fields for the output are printed, such as the url for jobs, or the duration for builds.
-c, --config
Path to the configuration file, this can be a local path, or a url. If it’s a url, the file will be downloaded and stored in your local machine.
--log-mode=[terminal|file|both]
Where to write the logging output. Options are terminal, file or both, default is both.
--log-file
Path to store the logging output if the file or both option for
--log-mode
is selected, default is cibyl_output.log.--output-format=[text|colorized|json]
Sets the output format. Both text and colorized print to standard output, but the colorized uses color for better visuals. Json support is not complete.
-o, --output
Write output to the file passed as value.
-p, --plugin
Plugins to use in the queries.
CI/CD queries
Environment selection
The user configuration might consist of many environments, systems and sources. However, for any particular query the user might want to only use a subset of the defined environments. There are four arguments that can be used to achive this:
--envs
Environments to use in the query, filtering by name
--systems
Systems to use in the query, filtering by name
--system-type
Systems to use in the query, filtering by type
--sources
Sources to use in the query, filtering by name
The arguments presented in this section can be combined with any of the commands shown anywhere in this page.
Job queries
Cibyl can be used to query the list of all jobs defined in a CI system:
cibyl query --jobs
or to list the jobs that contain the string 123:
cibyl query --jobs 123
or to list the jobs that end with the string 123:
cibyl query --jobs "123$"
Build queries
Cibyl can be used to query the list of all builds for all jobs defined in a CI system:
cibyl query --jobs --builds
or the last build for all jobs:
cibyl query --jobs --last-build
or the last build for all jobs where that build failed:
cibyl query --jobs --last-build --build-status FAILED
Note
The value for the –build-status argument in case insensitive, so both FAILED and failed would produce the same result
or the last build for all jobs that have the string 123 in the name and where that build failed:
cibyl query --jobs 123 --last-build --build-status FAILED
Test queries
Cibyl can be used to query the list of all tests for all jobs defined in a CI system. To query for tests, the user must specify a build where the tests were run, either through the –last-build or –builds arguments:
cibyl query --jobs --last-build --tests
listing the tests that run in build number 5:
cibyl query --jobs --builds 5 --tests
or list the tests that contain the string 123 in their name:
cibyl query --jobs --last-build --tests 123
or list only the failing tests:
cibyl query --jobs --last-build --test-result FAILED
or list only the tests that run for more than 5 minutes, but less than 10 minutes (test duration is specified in seconds):
cibyl query --jobs --last-build --test-duration ">300" "<600"
Note
The –test-duration is a ranged argument. In cibyl, ranged arguments take multiple values in the form “OPERATOR VALUE”, without the space in between. Common operators like “<”, “>”, “!=”, “==”, “<=”, “>=” are supported. Additionally using a single equal sign “=” is also a valid equality operator, and if no operator is specified, the equality one is used by deafault.
Zuul specific queries
In cibyl, there are some argumetns that are only supported when running queries against a Zuul system, and will be ignored otherwise. For example, we can list all jobs in the default tenant:
cibyl query --tenants default --jobs
or list all jobs related to project example-project in all tenants:
cibyl query --projects example-project --jobs
or list all jobs under the check pipeline:
ciby query --pipelines check --jobs
The arguments shown in previous sections can be combined with the Zuul specific ones. For example, we could use cibyl to list the last build of the jobs that have the string 123 in their name, belong to a project named example, to a check pipeline and under the default tenant, but only if the build was successful:
cibyl query --tenants default --project example --pipeline check --jobs 123
--last-build --build-statu SUCCESS
Jenkins specific queries
As is the case with Zuul systems, Jenkins systems have some specific arguments that can combined with the more general ones. Cibyl can query Jenkins systems to list the stages that were run in a build. For example the following command would show the stages run for the last build of the job called job_name:
cibyl query --jobs job_name --last-build --stages
Product queries
Openstack queries
As part of the functionality provided by the openstack plugin, cibyl can query the CI systems for openstack related information. For example it’s quite simple to list the version of the ip protocol used in each job:
cibyl query --ip-version
or listing the jobs that use ipv6 protocol:
cibyl query --ip-version 6
Similarly, other openstack properties can be used for queries, and can be combined for more complex queries. Building on the previous example, let’s build a cibyl command to show the network backend used in every job that also used ipv6:
cibyl query --ip-version 6 --network-backend
Other examples of relevant openstack arguments include checking which jobs setup the tests from git, instead of rpm packages:
cibyl query --test-setup git
or filtering by the number of compute and controller nodes used in
a deployment. This can be done via the --controllers
and --computes
arguments, which are ranged arguments (see note above for more deatils on what
that means). Let’s see an example of how to query for those jobs that use at
least 2 compute nodes and more than 3 controller nodes, but no more than
6 controllers:
cibyl query --controllers ">3" "<=6" --computes ">=2"
The list shown here is not a comprehensive collection of all the arguments defined in the openstack plugin, check the plugin page in the documentation for the full list.
Combination of openstack and CI/CD queries
In a cibyl query, CI/CD and openstack arguments can be combined to form more complex queries. This section will show some examples of such calls. The following call will list all jobs that contain the string example, deploy openstack using ceph as the cinder backend and geneve as the network backend, and also print the last build for each job:
cibyl query --jobs example --cinder-backend ceph --network-backend geneve
--last-build
the previous example could be expanded to only list those jobs that had a passing last build:
cibyl query --jobs example --cinder-backend ceph --network-backend geneve
--last-build --build-status SUCCESS