Samba CI on gitlab
- 1 Where is the Samba CI repo on GitLab?
- 2 Getting Access
- 3 Triggering CI
- 4 CI Results
- 5 CI for personal GitLab forks
- 6 Creating a merge request
- 7 Merging patches from GitLab (for Samba Team members)
- 8 Getting help
- 9 gitlab.com Service Status
Where is the Samba CI repo on GitLab?
Samba Team members
Samba Team members are encouraged to join the Samba Team organisation here:
Just ask on the team list from your team e-mail with your gitlab username.
A fellow team member with Maintainer rights can then add you as a Developer via this page:
Other Samba developers
Our broader developer community is encouraged to apply to use the Samba CI repo. Access is given to folks active on the mailing list with patches to submit, not just to Samba Team members.
Please write a mail to firstname.lastname@example.org with details of your contribution history or plans and a Samba Team member with Maintainer rights can then add you as a Developer via this page:
The git remote URL for the Samba CI repo is
A CI run is triggered after every push. This makes it easy to find issues early.
Code of conduct
Please prefix branches with your username, and be nice. Use only to develop Samba. Don't overwrite the work of others.
In return you get a full CI run using Samba Team provided resources running thanks to a credit in Rackspace's cloud. That in turn makes it easier for Samba Team members doing Code Review as your patches will work first time, and they can see proof of that.
If you describe your work in the branch name, this will make generating a merge request easier, as the branch name becomes the template title and allows ongoing distinct merge requests.
Step by step instructions
Here are the basics steps for Samba team members (and others who have been granted access) to start from scratch.
$ git remote add gitlab-ci email@example.com:samba-team/devel/samba.git
Push current HEAD to new remote branch on gitlab CI:
$ echo $USER slow $ git push gitlab-ci +HEAD:refs/heads/$USER-foo
See the Code of Conduct for an explanation of the usage of the username from the USER environment variable.
Push HEAD to existing remote branch on gitlab CI:
$ git push gitlab-ci +HEAD:$USER-foo
CI results are here: Pipelines
Debugging CI failures
Docker provides a way to run applications securely isolated in a container, packaged with all its dependencies and libraries.
To install docker on Ubuntu, follow the instructions on this page:
Install docker and run:
docker run -ti registry.gitlab.com/samba-team/samba:latest /bin/bash
Then you need to clone the samba git repository with your changes and run the test.
You can find how to run it in the log of the failed pipeline.
A more complete example for cloning your samba git repositry would be to run, from your samba source dir:
docker run -ti --mount type=bind,source="$(pwd)",target=/src,ro registry.gitlab.com/samba-team/samba:latest /bin/bash
And then from within the docker session:
git clone /src cd src
... you know the drill
Finding the right autobuild command to run in docker
The .gitlab-ci.yml file lists the autobuild command string that is run, matching the split of jobs in the GitLab pipeline GUI, where the command is also printed (in green) at the top of the log. This makes it fairly easy to copy the command into the docker shell. For example:
script/autobuild.py samba-none-env --verbose --nocleanup --keeplogs --tail --testbase /tmp/samba-testbase
Many issues shown up in CI reproduce without difficulty by running the individual test.
This can be either inside the docker container (which has the reference set of packages) or on your development system for more generic issues
Build Samba with
./configure --enable-developer make -j
And run the test with
make test TESTS=mytest
Points to note
The 'private' runners are 4 CPU virtual machines with 8GB of ram. These run in Rackspace's cloud and are paid for from a credit with RackSpace by the Samba Team.
The 'shared' runners are 1 CPU virtual machines with 4GB of RAM. The name is a misnomer, they are not shared VMs, but access to the newly booted VMs is shared to us (and paid for) by gitlab.com.
Some tests fail or flap on GitLab CI due to resource limitations. This can cause
- Docker failure code 137 (likely a kill -9 due to the out of memory killer running)
- Tests failure because they do not run fast enough (timeouts or failures due to timing)
- Race conditions (AD schema and DRS replication are particularly prone to this)
Tests should be re-worked to be more memory efficient, more robust to poor CPU scheduling and race-free, but in the meantime this is worth being aware of.
sn-devel is a nice short hostname, so is laptop etc. Specifically they are less than 14 characters, so do not need to be truncated.
Due to the way the GitLab CI instances are booted under docker, they get long hostnames like runner-191a8437-project-6378020-concurrent-0, which sometimes cause difficult to diagnose issues if not always overridden in the test.
CI for personal GitLab forks
Instructions how to run CI with your own GitLab runner can be found here: CI using Your own gitlab runner.
This is helpful if you do not wish to share the repository with others (you have your own fork on gitlab). However it requires your own build resources.
Free CI for forks on gitlab.com
1 hour Timeout
By default projects on gitlab.com have a 1 hour timeout set on pipelines. This can be changed in the project settings.
We suggest using a timeout of 3 hours, which is still permitted on the free runners.
Creating a merge request
If you pushed your patch to a unique well-named branch (above), then it is really easy to submit the change for inclusion in Samba.
When you pushed your branch, a link will have been printed to create a merge request. Click that.
To do it later, navigate to your branch on gitlab, eg
https://gitlab.com/samba-team/devel/samba/commits/$USER-foo and click 'Create Merge Request'.
This will trigger an e-mail to Samba developers registered on GitLab suggesting that your code should be merged. You may wish to also mail the patch or merge request URL to samba-technical for additional attention.
Further pushes to the same branch will then update the merge request, start a fresh CI run and re-send notifications, so the current code and test status is always available.
For this reason choose a unique branch name per patch series, and do not reuse the branch name until the merge request has been closed.
Merging patches from GitLab (for Samba Team members)
If the developer has created a merge request, then to merge, download the patch with (eg)
Add review tags and then 'git autobuild' locally. The merge button sadly doesn't work.
Then when the patch is in Samba.org's git master close the merge request with a message like:
Merged into master as <git hash> for Samba <next version>.
See for example this closed merge request.
If something isn't working, or you need help, the first port of call should be the samba-technical mailing list.
gitlab.com Service Status
- gitlab.com service issues and outages are tracked on Twitter at GitLab Status
- The current status is at GitLab status
- GitLab forum
- GitLab.com Support Forum Tracker
- Contact GitLab for issues like account access problems
Finally, in the immortal words of Douglas Adams: Don't Panic
As a toolchain, git is a decentralised version control system. While a service outage would certainly be inconvenient, development work can continue locally through an outage.