Build Yourself a GitLab Server with CI
Published:
GitLab in a docker is one of the minimal way to self-host a Git server with customized CI runners. Thanks to well-organized docker image offered by GitLab, this explore seems a pleasure rather than a nightmare.
Hey you! Fuchsia! Watch yourself!
Preliminary
The whole system is seperated to 2 parts:
- Main GitLab Framework, providing Git version control, web-based management and SSH service
- GitLab CI runner, working as an instance for carrying CI jobs
This exploration is completed on Ubuntu-20.04, with docker
and other basic utils installed.
Setup GitLab Framework
Get IP Address as Host Address
First, get the IP address of your computer.
$ ifconfig
...
wlp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.100 netmask 255.255.255.0 broadcast 192.168.2.255
...
For example, my IP address is 192.168.2.100
.
Set Environment Variable
$ echo GITLAB_HOME=/srv/gitlab
Start GitLab Docker
$ sudo docker run --detach \
--hostname 192.168.2.100 \
--publish 443:443 --publish 80:80 --publish 2222:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
gitlab/gitlab-ee:latest
About 3 minutes later, enter the hostname in your browser and check the familiar GitLab login page.
Login
The default username is root
, and the password is generated randomly from the Docker process:
$ sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
Password: ...
And to manager the GitLab Website, enter your.customized.hostname/admin
to reach the admin console.
Create an Example Repo and Trigger a CI
Create a blank repo and add a new file named .gitlab-ci.yml
.
Enter the following:
build-job:
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
test-job1:
stage: test
script:
- echo "This job tests something"
test-job2:
stage: test
script:
- echo "This job tests something, but takes more time than test-job1."
- echo "After the echo commands complete, it runs the sleep command for 20 seconds"
- echo "which simulates a test that runs 20 seconds longer than test-job1"
- sleep 20
deploy-prod:
stage: deploy
script:
- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
A CI is triggered. However, its status remains pending
. Don’t worry, we have not created GitLab CI runner yet.
Create a GitLab CI Runner
First, create a GitLab CI runner throught docker engine.
$ docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
Then register the runner instance.
$ docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
Enter the information offered by GitLab CI settings panel.