Conversation
Use upstream images Reorganize build stages
use env to export ROS_DOMAIN_ID remove mapserver to be managed by rosdep don't ignore errors during rosdep install
workspace chaining done durring initializion should suffice
rather than cloning/checking branch URL
|
Is the performance gain largely because you've switched to CircleCI or is it because you're starting from |
c82e784 to
a16de31
Compare
@crdelsey , its partly both. Most of the upfront time is saved by starting from a Docker Image prepped for the CI with common dependence pre-installed, but then some more is also saved by making use of the caching between jobs. We could perhaps save even more by enabling Docker Layer Caching, but this currently seems to be a premium feature from CircleCI.
Well, I'm not sure. You could have both if you wanted, don't think it would be much drain. You might want to have only one or the other CI enabled for PRs to prevent too much integration noise. CircleCI might be better for this, as long as we can keep the quick turnaround times I've tabled above. I'm not sure Travis has the same monthly limit as CircleCI, so it may still be well suited for longer builds via periodic cron jobs. E.g. just rebuilding the whole Dockerfile daily via master branch and run the stock tests and code coverage. Also ping @mkhansen-intel , @SteveMacenski , I've updated the top PR comment with more details. |
ghost
left a comment
There was a problem hiding this comment.
I'll admit I don't understand the details of docker cache breaks yet, but I see no harm in adding Circle CI. It would definitely be nice to have faster feedback from the CI system, and it seems to best way to get a feel for Circle vs Travis is to turn this on and get some experience with both side by side.
Add distro digest to checksum chain to break caches Compare .repo files from checkout to determine if upstream needs cleaning
navigation2 -> source
thus overwrite checksum upon first write
|
docker hub doesn't allow symbols in an organization name, so I called the org |
|
Ok, I've polished up the caching chain so it should skip the upstream re-build if the
Sounds fine. @crdelsey , it looks like these items were left undone, so my own account can not complete the first due to the absence of the second.
I.e I'm unable to setup the Build configurations for the
Your account should be able to configure the repo to resemble what I have on my fork: |
|
I just linked DockerHub to Github, so you should have access now. I also set up the Dockerhub build as you showed above and triggered it. |
To ensure test package is built
|
Alright, 2f02de1 is passing on my end here: I don't see the CircleCI from ros-planning though: @crdelsey, did you enable After we see green light from ros-planning's circleci on this PR, this should be good to merge. |
|
@ruffsl I did enable "Build forked pull requests". I made you an admin of this repo so I'm not slowing things down. You should be able to check any settings directly. |
|
@ruffsl Circle CI is running on #553, so it could just be that it doesn't run on this PR because it was created before CircleCI was enabled. I'm willing to just merge to master and see what happens. We can then quickly fix any problems that come up or just revert the change if the problem is big, which seems unlikely. |
That just might be it.
Sounds good to me. |
mkhansenbot
left a comment
There was a problem hiding this comment.
I also am new to CircleCI, but this looks good to me.
|
Well, after the merge commit triggered a fresh CI job, it looks like the CTest for https://circleci.com/gh/ros-planning/navigation2/16#artifacts Although the artifacts tab may seem invisible if your not logging into github, one can force it visible by just adding |
|
I had seen occasional failures with that test on my local machine, but never in CI. I figured it was only flaky after a few runs and various stops and restarts. Looks like it is flaky in CI too now. :-( I restarted the build and it passed on the second try, so it seems good. Now I just need to figure out what's going on with that test. |
|
I opened #556 for the flaky test. By the way, thanks for doing all this work cleaning up the CI stuff for us. I really appreciate it! |
* Add description for new BtNavigator param * Fix typo in Iron.rst * Add description for new BtActionServer/Navigator param * Add exemplary param config
Bumps [ros-tooling/setup-ros](https://github.com/ros-tooling/setup-ros) from 0.5.0 to 0.6.0. - [Release notes](https://github.com/ros-tooling/setup-ros/releases) - [Commits](ros-tooling/setup-ros@0.5.0...0.6.0) --- updated-dependencies: - dependency-name: ros-tooling/setup-ros dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>



This PR add CI support for CircleCI.
Summary
Like Travis, CircleCI is a Continuous Integration service, however CircleCI provides more docker integration such as support for custom images without resorting to machine type executors. This means that CI jobs can start as soon as they are triggered, rather than queuing for an available Virtual Machine to then spin up. The pulling of the Docker Image is perhaps the only main flat overhead in triggering jobs. Further features such as caching and storage of artifacts additionally accelerate job times while providing insight into build and test results.
Overview
The proposed CI would start with pre-build Docker Image, hosted on automated repo on Docker Hub that would trigger tag builds upon new commits into particular GitHub branches or rebuilds of linked Docker Hub repos, i.e.
osrf/ros2:nightlybase image. Built tags would include all/most the necessary dependencies for the project, include any build dependencies for prerequisite dependencies, i.e. runningvcs import,rosdep install, etc. on the master branch. Even when short cutting the install time by buildingFROMtheosrf/ros2:nightlybase image, this takes about 90 min on Docker Hub, so it helpful to offload/bake this amount of setup into the image our CI pulls from.Once the CI pulls the docker image above, the config proceeds to clean the workspaces and checkout the source to inspect. This also entails
vcs importing and prerequisite defined in the new checked out source, installing the prerequisite dependencies, building the prerequisites themselves, installing the source packages dependencies, building the source packages, then testing the source packages.In between steps in the job of the workflow, caching of the build stages for both prerequisite and source packages is attempted. Caches are broken with either the installed dependencies change or the source code has changed. This allows the cache to persist across jobs.
Lastly, the log files for the colcon build and test steps are also archived and made linkable by storing them with the job's public artifacts.
Workflow
Action Items
DockerHub
ros-planningDockerHub organization (admin)navigation2automated repo to DockerHub org (admin)ros-planning/navigation2:masterosrf/ros2:nightlyCircleCI
References:
CircleCI
Related: