Stackstorm packages build environment
- Docker based. Leveraging docker it's possible to deliver packages for any OS distro in a fast and reliable way.
- Rake + sshkit-based execution enables easy configuration via simple DSL and brings parallel task processing out of the box.
- Test-driven workflow. Artifacts built are not only available for any enabled OS distro but at the same time tested on a bunch of platforms, providing feedback such as can be installed, services can start up, operations can be executed etc.
Packages build environment is a multi-container docker application defined and managed with docker-compose. It consists of four types of containers:
- Packaging runner (https://quay.io/stackstorm/packagingrunner) - the main entry point, package build and test processing controller container.
- Packaging build (https://hub.docker.com/r/stackstorm/packagingbuild/) - container where actual
.rpmartifacts build takes place. It's used to bring up the build environment specific for OS distro. This means that different containers are available such as packagingbuild:centos6, packagingbuild:trusty correspondingly for CentOS 6 and Ubuntu Trusty.
- Packaging test (https://hub.docker.com/r/stackstorm/packagingtest/) - containers where built artifacts are tested, i.e. artifacts are installed, configuration is written and tests are performed.
- Services - these are different containers required for testing such as rabbitmq, mongodb and postgresql
Dockerfiles sources are available at StackStorm/st2-dockerfiles.
The Packages build environment compose application brings a self-sufficient pipeline to deliver ready to use packages.
It's very simple to invoke the whole build-test pipeline. First just make sure that docker-compose.yml has your distro specification, after that issue the following commands:
# (Optional) First clean out previous build containers docker-compose kill docker-compose rm -f # To build packages for ubuntu trusty (--rm will wipe packaging runner container. All others will remain active). docker-compose run --rm trusty
Execution takes a while, so grab a cup of tea or coffee and wait until it finishes. When build and test processes succeed, you'll find the StackStorm packages in
/tmp/st2-packages on your host machine:
ls -l1 | grep ".deb$" -rw-r--r-- 1 root root 30872652 Feb 9 18:32 st2_1.4dev-1_amd64.deb -rw-r--r-- 1 root root 31582068 Feb 9 18:32 st2mistral_1.3.0-1_amd64.deb
Manual testing inside the docker environment
After the build and test stages are finished all docker containers remain active, so you are welcome to do more in-depth testing if desired. To do so simply run:
docker ps # Find the required testing container # In our case it will be st2packages_trustytest_1 # Simply exec to docker docker exec -it st2packages_trustytest_1 bash
Once done, you are inside the testing environment where all services are up and running. Don't forget to do (after exec):
At this point you can do any manual testing which is required.
Vagrant based build and test
In order to build, package, install and test ST2 in an isolated Vagrant VM, run the following:
vagrant up $TARGET
$TARGET is one of
el8. Note that
el6 does not reliably
support docker, so it is not an available option. If you are using
el8, comment out the
vm_config.vm.provision :docker line in the Vagrantfile. There is logic in
install docker in
The following steps are run while provisioning the Vagrant VM:
docker-compose run --rm $TARGETto build, test and package ST2 as described in prior sections.
- Install the packages built in step 2, unless the host
$ST2_INSTALLenvironment variable is set to a value other than
- Execute the
st2-self-checkscript, unless the host
$ST2_VERIFYenvironment variable is set to a value other than
As currently implemented, it is not possible to bypass steps 1 and 2. In the future, we may want to consider allowing the host to provide existing ST2 packages, and install/self-check those in the Vagrant VM.
To specify the ST2 source URL and REV (i.e., branch), use
variables on the host prior to provisioning the VM. Likewise, to specify the ST2 Mistral source URL
and REV, use
ST2MISTRAL_GITREV environment variables on the host prior to
provisioning the VM.
Prior to running
st2-self-check, the required auth token is generated using
st2 auth. If necessary,
you can change the default username and password passed to
st2 auth. To do this, set the
ST2PASSWORD environment variables on the host prior to provisioning the VM. The default values
Current community packages are hosted on https://packagecloud.io/StackStorm. For detailed instructions how install st2 and perform basic configuration follow these instructions:
Adding Support For a New Distribution
If you are adding support for a new distribution for which
images are not yet published to Docker Hub and you want to test the build pipeline locally, you
need to update
docker-compose.yml file to use locally built Docker images.
... bionic: ... image: quay.io/stackstorm/packagingrunner ... ... bionicbuild: ... image: bionicbuild ... ... bionictest: ... image: bionictest ...
distro definition (e.g.
xenial, etc.) needs to use packaging runner image.
As you can see,
image attribute references local image tagged
bionicbuild instead of a
remote image (e.g.
stackstorm/packagingbuild:bionic or similar).
Before that will work, you of course also need to build those images locally.
cd ~/st2packaging-dockerfiles/packagingbuild/bionic docker build -t bionicbuild . cd ~/st2packaging-dockerfiles/packagingtest/bionic/systemd docker build -t bionictest .