Here we outline the current setup of MoveIt’s continuous integration setup, including Docker files and Travis configuration.
For each ROS distribution there are up to 4 containers, built on top of a standard ros:noetic-ros-base (or other distro version) image. We use Dockerhub to automatically build new versions of the containers each time a code change is committed to the moveit
repo (but only for the corresponding branch).
An image optimized for running continuous integration with Travis. This container downloads all of the MoveIt source code, using MoveIt’s rosinstall file, and then installs all the required dependencies for that source code. It then removes the source code before saving the image. It uses ros-shadow-fixed
and runs apt dist-upgrade
to ensure it has the latest code.
Builds on top of the CI image, contains a full MoveIt workspace downloaded and built to ~/ws_moveit/src
. This container is useful for developers wanting to test or develop in a sandbox.
Builds on top of the CI image, the full debian-based install of MoveIt using apt
.
Adds experimental packages to the source install. Use this if you want a working warehouse database.
MoveIt uses the industrial_ci project for defining the workflows for CI run on GitHub Actions.
To setup your environment for running the CI workflows locally follow these instructions from industrial_ci’s documentation
Industrial CI is configured using environment variables. These can be found by expanding the top of the industrial_ci step in the CI job you’d like to replicate. If you use this job as an example you’ll see this at the top of the industrial_ci step:
Run ros-industrial/industrial_ci@master
with:
env:
DOCKER_IMAGE: moveit/moveit2:foxy-ci-testing
UPSTREAM_WORKSPACE: moveit2.repos
AFTER_SETUP_UPSTREAM_WORKSPACE: vcs pull $BASEDIR/upstream_ws/src
BEFORE_TARGET_TEST_EMBED: set +u && source moveit_kinematics/test/test_ikfast_plugins.sh && set -u
AFTER_RUN_TARGET_TEST:
TARGET_CMAKE_ARGS: -DCMAKE_BUILD_TYPE=Release
CCACHE_DIR: /home/runner/work/moveit2/moveit2/.ccache
BASEDIR: /home/runner/work/moveit2/moveit2/.work
CACHE_PREFIX: foxy-ci-testing
CLANG_TIDY_BASE_REF: refs/heads/main
IMAGE: foxy-ci-testing
IKFAST_TEST: true
CLANG_TIDY: true
Running test 'source_tests'
To re-create this job locally you’ll need a checkout of moveit2 at the commit you want to test. For the sake of this example the checkout is at ~/ws_moveit/src/moveit2
. Below is the command you’d construct to run the above job:
ros2 run industrial_ci rerun_ci ~/ws_moveit/src/moveit2 \
DOCKER_IMAGE='moveit/moveit2:foxy-ci-testing' \
UPSTREAM_WORKSPACE='moveit2.repos' \
AFTER_SETUP_UPSTREAM_WORKSPACE='vcs pull ~/upstream_ws/src/' \
BEFORE_TARGET_TEST_EMBED='set +u && source moveit_kinematics/test/test_ikfast_plugins.sh && set -u' \
TARGET_CMAKE_ARGS='-DCMAKE_BUILD_TYPE=Release' \
CCACHE_DIR='~/.ccache' \
CLANG_TIDY='true'
You’ll notice a couple things. First is that I changed the ccache directory to use the ccache I have locally. Do this if the environment you are running matches your local environment for a speed up. The second is that I changed the AFTER_SETUP_UPSTREAM_WORKSPACE
. This is because the directory used by CI is specific to github and we want to use the default directory structure from industrial_ci instead of a custom one.
After this finishes (pass or fail) it will output a docker commit tag that it creates. That line will look something like this:
Committing container to tag: 'industrial-ci/rerun_ci/moveit2:df7d8ce97aeb'
You can then use that tag to open a terminal in that container to debug the CI run:
docker run -it industrial-ci/rerun_ci/moveit2:df7d8ce97aeb /bin/bash