CodeRanch is talking about moving to Git for our source code. Some of the moderators expressed a preference for GitLab. I’ve used GitHub, but not GitLab so decided to try it out with one of my personal projects. Looking at it, GitLab has built in CI so I want to see if i can switch to that and get off Jenkins for my pet project.
Signing up for GitLab
You can register with a new account for GitLab or use your credentials for other services including Google, Twitter, GitHub and BitBucket. It feels weird to me to sign in for a version control system with the credentials for another version control system so I created a new account.
While signing up, it automatically imported my gravatar. I had an old picture on there so fixed that. I then added some basic information to my GitLab profile
I set up an SSH key to make it easy to commit from my home computer:
- SSH Keys
- Paste in key
I also set up two factor:
- The very first option is “Enable two factor authentication”
- It uses Google Authenticator which is my first choice of two factor. They also supply backup codes.
Migrating a repository from GitHub
GitLab has a page about migrating from GitHub. The most important pre-requisite is to make sure each committer to the GitHub project has an account on GitLab. Conveniently, I am the only person who has ever committed to this project!
I then migrated in:
- Create a personal access token on GitHub just for this migration
- Click “Create a project”
- Choose “Import a project” tab
- Enter personal access token for github and choose “List your repositories”. Note that this lists both your personal repositories and all of these for GitHub organizations you have access to
- Click “Import” on the row next to the repository to migrate. (There’s also an “Import all” on top. I’m not looking to migrate all my repositories though!). Nothing appeared to happen for a minute. I must have missed a status warning. But then the page refreshed and had a “done” checkbox.
- Delete the personal access token from GitHub. I don’t like to leave extra access laying around enabled
I confirmed the same number of commits (including the latest), branches and tags are all there.
I’ve been running this job on Jenkins each night to check for changes. Since this is a public repository, accessing it for polling is easy and worked on the first shot. While I’d like to switch to GitLab CI, I’m going with incremental progress. GitLab has a good page on interacting with Jenkins.
I temporarily made this a private project to re-test. I confirmed that I could commit and that Jenkins failed to pull. Then I tried to set up Jenkins to be able to interact with project.
When using my own account, I can set up a token with read access to all my projects, but not a specific one. I think I’d have to create an extra account on GitLab for Jenkins if I wanted it to have only access to specific projects. Since this is just an experiment, I’ll use my own token for now.
Failing with the GitLab plugin
- Installed the GitLab plugin on Jenkins
- In GitLab, went to Settings > Access Tokens
- Created a token with read_repository permissions
- In Jenkins, manage > Configure System
- Add a GitLab Connection. I like that it uses Jenkins Credentials for securing the token
- Click “Test Connection”
- Using https://gitlab.com/boyarsky gives Client error: HTTP 401 Unauthorized
- Using https://gitlab.com/ gives Client error: HTTP 403 Forbidden
I noticed that the Jenkins GitLab plugin is not well supported. The primary committer wrote that he doesn’t use GitLab daily anymore and this affects his time spent on this project.
At this point, I gave up and just set up polling. I created a credential with the username boyarsky and the password as my personal access token. (That I set up while attempting to get GitLab working.) This worked on the first shot.
Now time to start looking at GitLab Ci…