【系列】CentOS 7.3 離線安裝(無網絡環境)CI CD環境之gitlab + gitlab runner(docker in docker)


目錄

1.【系列】CentOS 7.3 離線安裝(無網絡環境)CI CD環境之docker+docker compose

2.【系列】CentOS 7.3 離線安裝(無網絡環境)CI CD環境之gitlab + gitlab runner(docker in docker) (本篇在此)

3.【系列】CentOS 7.3 離線安裝(無網絡環境)CI CD環境之harbor 

4.【系列】CentOS 7.3 離線安裝(無網絡環境)CI CD環境之gitlab runner 關於私有docker倉庫配置 

5.【系列】CentOS 7.3 離線安裝(無網絡環境)CI CD環境之sonarqube配置 

 

這一篇記錄離線(無網絡環境)使用docker 安裝 gitlab + gitlab runner(docker in docker)

首先准備gitlab gitlab runner 的docker 鏡像

因為是無網絡環境,現在開發機器上使用 docker save 對鏡像進行打包 然后再上傳到服務器上

1.打包鏡像

開發機器執行:

docker save -o E:\gitlab-ce-latest.tar gitlab/gitlab-ce:latest

docker save -o E:\gitlab-runner-latest.tar gitlab/gitlab-runner:latest

docker save -o E:microsoft-dotnet-core-sdk-3-1.tar mcr.microsoft.com/dotnet/core/sdk:3.1

2.服務器上執行docker load 加載鏡像

 docker load -i gitlab-ce-latest.tar

docker load -i gitlab-runner-latest.tar

docker load -i microsoft-dotnet-core-sdk-3-1.tar

3.上傳gitlab + gitlab runner 的yaml腳本

上傳至:/opt/gitlab文件夾下,腳本內容如下

version: '3.7'

services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    restart: always
    hostname: gitlab
    privileged: true
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        registry_external_url 'http://' # ip or hostname
        registry['enable'] = true
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['smtp_address'] = "****"
        gitlab_rails['smtp_port'] = 25
        gitlab_rails['smtp_user_name'] = "****"
        gitlab_rails['smtp_password'] = "123456"
        gitlab_rails['smtp_authentication'] = "login"
        gitlab_rails['smtp_enable_starttls_auto'] = true
    ports:
      - '2222:22'
      - '80:80'
      - '4443:443'
    networks:
      - gitlab-network-overlay
    volumes:
      - /opt/gitlab/config:/etc/gitlab
      - /opt/gitlab/data:/var/opt/gitlab
      - /opt/gitlab/logs:/var/log/gitlab
    

  gitlab-runner1:
    image: gitlab/gitlab-runner:latest
    container_name: gitlab-runner1
    hostname: gitlab-runner1
    restart: always
    privileged: true
    # network_mode: "host"
    volumes:
      - '/opt/gitlab-runner1-config/config:/etc/gitlab-runner:Z'
      - '/var/run/docker.sock:/var/run/docker.sock' #這里一定要映射到宿主機的docker.sock文件上 否則會出現無法訪問的情況
    networks:
      - gitlab-network-overlay
networks:
  gitlab-network-overlay:
    #name: gitlab-network
    external: true

4.創建overlay網絡,使runner可以連接到外部網絡,否則會導致runner 運行時連接不到gitlab harbor nexus等私庫

#初始化swarm
docker swarm init

docker network create --driver=overlay --attachable gitlab-network-overlay

docker network ls

5.創建映射文件夾

mkdir {config,data,logs}

mkdir -vp /opt/gitlab-runner1-config/cofig
6.使用docker stack啟動gitlab 和gitlab runner
docker stack deploy -c docker-compose.yaml gitlab-swarm

這是可能會因為selinux問題出現錯誤:

Creating gitlab ...
Creating gitlab-runner1 ... error

Creating gitlab ... error
c/self/attr/keycreate: permission denied\"": unknown

ERROR: for gitlab Cannot start service gitlab: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"write /proc/self/attr/keycreate: permission denied\"": unknown

ERROR: for gitlab-runner1 Cannot start service gitlab-runner1: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"write /proc/self/attr/keycreate: permission denied\"": unknown

ERROR: for gitlab Cannot start service gitlab: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"write /proc/self/attr/keycreate: permission denied\"": unknown
ERROR: Encountered errors while bringing up the project.

這時候,修改selinux的模式為permissive:

vi /etc/selinux/config

然后重啟服務器,重新執行5中的命令,即可正確啟動gitlab 和 gitlab runner

7.配置gitlab 

vi config/gitlab.rb

修改:

## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
##!
##! Note: During installation/upgrades, the value of the environment variable
##! EXTERNAL_URL will be used to populate/replace this value.
##! On AWS EC2 instances, we also attempt to fetch the public hostname/IP
##! address from AWS. For more details, see:
##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
external_url 'http://188.6.7.131'

修改后重啟服務

docker exec -it gitlab bash

gitlab-ctl reconfigure

exit

這時就可以說使用IP地址訪問gitlab了,然后進行一些相關配置,這里不再贅述

 8.配置gitlab runner (具體參考官網文檔相關配置)

進入runner后執行:

gitlab-runner register

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://188.6.7.131/
Please enter the gitlab-ci token for this runner:
QncXTQE42GLjeLfvcfJD
Please enter the gitlab-ci description for this runner:
[gitlab-runner1]: group-runner1
Please enter the gitlab-ci tags for this runner (comma separated):

Registering runner... succeeded                     runner=QncXTQE4
Please enter the executor: virtualbox, docker-ssh+machine, docker-ssh, shell, ssh, docker+machine, kubernetes, custom, docker, parallels:
docker
Please enter the default Docker image (e.g. ruby:2.6):
Docker:19.03.11
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

這里使用docker運行runner 所以executor 選擇docker

配置完成后先不急進行流水線測試,由於我們是在無網絡環境下,還沒有搭建私有docker倉庫,所以需要修改runner的相關配置:

修改/gitlab-runner1/config/config.toml:

concurrent = 1
check_interval = 0

[session_server]
session_timeout = 1800

[[runners]]
name = "gis-group-runner1"
url = "http://188.6.7.131/"
token = "qQZ1p2hETvf94F7hNFJt"
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.docker]
tls_verify = false
image = "Docker:19.03.11"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
pull_policy = "if-not-present"

重啟容器:

docker ps 

docker restart 22516cf45d71

 

 

常見問題:重啟服務后 gitlab一直處於restart狀態 通過docker logs gitlab 看到如下錯誤:

/opt/gitlab/embedded/bin/runsvdir-start: No such file or directory

解決辦法:刪除容器重啟創建,相關數據已經持久化到服務器,並不會影響數據

docker stack deploy -c docker-compose.yaml gitlab-swarm

參考:

https://blog.51cto.com/xiaozhagn/2488779


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM