Skip to content

如何自架 GitLab、整合 CI/CD 及使用 Nexus 作為 Docker Hub 的替代方案

Published: at 下午06:23

gitlab

install

version: '3.6'
services:
  gitlab:
    image: gitlab/gitlab-ee:latest
    container_name: gitlab
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.example.com:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 2424
    ports:
      - '8929:8929'
      - '443:443'
      - '2424:2424'
    volumes:
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
    shm_size: '256m'

gitlab runner

install

sudo 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

register

sudo docker exec -it gitlab-runner gitlab-runner register --url http://{{yourhost}}:{{yourknow}}  --token {{token}}

choose

於註冊流程會問你

  1. host name 使否正確
  2. 取名稱
  3. 要用來幹嘛
    1. 要記得選docker
  4. 預設得docker image
    1. 記得要選docker:latest 到時候.gitlab-cicd.yml 不寫使用image 會跑出來預設

nexus

gen token

要使用 self host docker hub

記得要登入

docker login -u [account] -p [password] [your nexus host or ip]

要使用的機器需要修改 docker damon.json

mac

~/.docker/daemon.json

add your self host nexus ip (but sure need domain and ssl?)

{ “insecure-registries”: [“172.16.5.199:8082”] }

ubuntu

gitlab-runner

因為之前gitlab runnner 是這樣跑起來

sudo 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

對進去的 config

會在 /srv/gitlab-runner/config

裡面會有一個 config.toml

也需要將 docker hub 加上 會像是

concurrent = 1
check_interval = 0
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
****
  [runners.cache]
    MaxUploadedArchiveSize = 0
  [runners.docker]
    tls_verify = false
    image = "docker:latest"
    privileged = true
    insecure_registries = ["your docker hub domain or ip"]
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
    network_mtu = 0