Featured image of post How To Set Up a GitLab Environment Locally on MacBook Pro

How To Set Up a GitLab Environment Locally on MacBook Pro

 

Recently, I decided to explore infrastructure concepts more deeply and set up a personal learning environment. To build the environment, I used my MacBook Pro 2021 with Docker without access to additional hardware. The initial setup went smoothly.

Installing GitLab

The M1 chip in MacBooks uses the ARM architecture, so I used the yrzr/gitlab-ce-arm64v8:latest Docker image.

Create Required Directories

First, create three working directories for GitLab: etc, log, and opt. Otherwise, errors will occur. Modify the volumes section in the Docker Compose configuration to point to these directories. Two ports, 9922 and 9980, are exposed. Since this setup is for local use, 443 is not enabled.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
version: "3.8"
services:
  gitlab-ce:
    image: yrzr/gitlab-ce-arm64v8:latest
    container_name: gitlab-ce
    privileged: true
    restart: always
    ports:
      - "9922:22"
      - "9980:9980"
    volumes:
      - /Users/hxzhouh/tools/gitlab/etc:/etc/gitlab:z
      - /Users/hxzhouh/tools/gitlab/log:/var/log/gitlab:z
      - /Users/hxzhouh/tools/gitlab/opt:/var/opt/gitlab:z
    deploy:
      resources:
        limits:
          memory: 4096M
    tty: true
    stdin_open: true

Note: Exposing port 9980 avoids issues like this one.

Update GitLab Configuration

Once the container is running, modify the GitLab configuration file:

1
2
docker exec -it gitlab-ce /bin/bash
vi /etc/gitlab/gitlab.rb

Add the following lines at the end:

1
2
3
external_url 'http://127.0.0.1:9980'
gitlab_rails['gitlab_ssh_host'] = '127.0.0.1'
gitlab_rails['gitlab_shell_ssh_port'] = 9922

Change the Default Password

Run the following commands to update the root password:

1
2
3
4
gitlab-rails console -e production
user = User.where(id: 1).first
user.password = 'AIl+mVN(:bk\#5%c'
user.save!

Changing GitLab Password

Finally, reconfigure and restart GitLab:

1
2
gitlab-ctl reconfigure
gitlab-ctl restart

Restarting GitLab

Access GitLab

Visit http://127.0.0.1:9980 in your browser. The default root username and the password you just set should work.

Adding SSH

To enable SSH-based access like GitHub, create an SSH key pair and add the public key to GitLab, and update your local SSH configuration in ~/.ssh/config:

1
2
3
4
5
6
Host 127.0.0.1
HostName 127.0.0.1
Port 9922
IdentityFile ~/.ssh/ssh
PreferredAuthentications publickey
User root

Test the connection:

You should see:

1
Welcome to GitLab, @root!

Create a new project and clone it

1
2
3
4
git clone ssh://[email protected]:9922/root/hello-world.git
some modify 
.....
git push origin --force

GitLab Project Created

1
2
3
➜  hello-world git:(main) git push origin --force
To ssh://127.0.0.1:9922/root/hello-world.git
   b4dd724..e45f213  main -> main

Configuring GitLab Runners

Go to Settings -> CI/CD -> Runners, and follow the instructions under “Show runner installation and registration instructions.”
Pasted image 20241116093057

Install and Register the Runner

1
2
3
4
5
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-arm64
sudo chmod +x /usr/local/bin/gitlab-runner
gitlab-runner install
gitlab-runner start
gitlab-runner register --url http://127.0.0.1:9980 --registration-token GR13489416KQ-jitR3JhfMgr8f-9G

GitLab Runner Registration

Key Points:

  1. Tags: Use tags to specify runner tasks in .gitlab-ci.yml.
  2. Executor: For this example, use the shell executor.

For more information about GitLab Runner, please refer to the article on the official website, which will not be expanded here.

Testing CI/CD Pipeline

Create a .gitlab-ci.yml file in your project:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
stages:  
  - build  
build_job:  
  stage: build  
  tags:  
    - golang-local-shell  
  script:  
    - go build -o myapp  
  only:  
    - main  
    - tags  
  artifacts:  
    paths:  
      - myapp

Push the code to GitLab, and the build pipeline should execute automatically.

Pipeline Results

Artifacts can be found at:

1
http://127.0.0.1:9980/root/hello-world/-/artifacts

Build Artifacts

Next Steps

This setup concludes the local GitLab environment. In the next article, I’ll demonstrate setting up a local Kubernetes cluster and automating Docker image deployment from GitLab to Kubernetes for a complete CI/CD pipeline.

Built with Hugo
Theme Stack designed by Jimmy