Skip to content

gitlab runner安装

  • 选中一个项目或群组,点击设置CI/CDRunner
  • 点击显示Runner安装说明,即可看到安装代码
sh
# 下载
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# 权限设置
sudo chmod +x /usr/local/bin/gitlab-runner
# 创建用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
# 安装服务
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
# 注册
sudo gitlab-runner register --url http://test.com/ --registration-token $REGISTRATION_TOKEN
# 最后选择一个输入(输入shell)
shell
  • gitlab查看当前可用runner,点击修改图标,把运行未标记的作业打勾,然后保存(如果不选中 运行未标记的作业, CI/CD 任务会一直被阻塞挂起)
  • 安装nodejs并在文件 .bash_profile 配置 export PATH=$PATH:/home/gitlab-runner/node/bin
  • npm仓库登录 npm login --registry=http://test.com/repository/npm-host/

卸载

sh
# 停止服务
gitlab-runner stop
# 取消随机启动
chkconfig gitlab-runner off
# 卸载服务
gitlab-runner uninstall
# 清理文件
rm -rf /etc/gitlab-runner
rm -rf /usr/local/bin/gitlab-runner
rm -rf /usr/bin/gitlab-runner
rm -rf /etc/sudoers.d/gitlab-runner
# 删除用户
userdel -r gitlab-runner

cicd示例

sh
image: node:latest

cache:
  untracked: true
  paths:
    - node_modules/

stages:
  - install
  - build
  - test
  - deploy

install:
  stage: install
  script:
    - npm run init
  only:
    changes:
      - "package.json"

build:
  stage: build
  script:
    - npm run build
  artifacts: 
    paths:
      - dist/
  only:
    changes:
      - "package.json"

test:
  stage: test
  script:
    - npm run test
  only:
    changes:
      - "package.json"

deploy:
  stage: deploy
  script:
    - npm run pub
  only:
    changes:
      - "package.json"

使用docker安装gitlab runner

docker-compose.yml文件

yml
name: gitlab-runner
services:
  gitlab-runner:
    image: gitlab/gitlab-runner:latest
    container_name: gitlab-runner
    restart: always
    privileged: true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./config:/etc/gitlab-runner
    environment:
      - TZ=Asia/Shanghai  # 可选时区设置
  • docker compose up -d
  • docker exec -it gitlab-runner gitlab-runner register --url http://test.com/ --registration-token token
  • 最后的执行器选择docker,然后输入默认镜像:node:lts
  • 修改并发数,concurrent = 2
  • 如果需要构建容器镜像,config.toml配置中的runners.docker的privileged = true 是必要的
  • 如果需要操作宿主机的docker,则需要添加
yaml
volumes = [
     "/var/run/docker.sock:/var/run/docker.sock",  # 容器内访问宿主机 Docker
     "/www/docker/test:/www/docker/test",  # 把宿主机目录挂进去
     "/cache",
  "/etc/localtime:/etc/localtime:ro", "/etc/timezone:/etc/timezone:ro" # 映射时区
   ]
  • 服务重启,docker restart gitlab-runner

config.toml中的docker配置

yaml
[runners.docker]
    tls_verify = false
    image = "node:lts"
    dns = ["8.8.8.8", "1.1.1.1"]
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
    network_mtu = 0

使用cicd发布项目

使用内部的docker发布,不影响外部的docker环境

yml
default:
  tags:
    - mas-server2
  interruptible: true # 自动取消之前正在运行的 job
  
workflow:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "web" && $CI_COMMIT_BRANCH == "pedpl"' # 手动点击触发并且当前是dev分支
      when: always
    - when: never

layout:
  stage: layout
  image: docker:latest
  services:
    - name: docker:dind
      command:
        ["--insecure-registry=test.com:5000", "--registry-mirror=https://docker.1ms.run", "--registry-mirror=https://dockerproxy.cn", "--registry-mirror=https://k-docker.asia", "--registry-mirror=https://docker.ketches.cn"]
  variables:
    DOCKER_TLS_CERTDIR: ""
    DOCKER_HOST: tcp://docker:2375
  script:
    - |
      echo "Cloning repository..."
      git clone --branch $CI_BRANCH --depth=1 http://test:$CI_ACCESS_TOKEN@test.com/test.git
      cd ./test
      echo "? 登录 Nexus 私有镜像仓库"
      docker login test.com:5000 -u test -p $CI_NEXUS_PASSWD
      echo "? 开始构建 test:$CI_VISION"
      docker build -t test.com:5000/test/test:$CI_VISION .
      echo "? 开始推送 test:$CI_VISION 到私服"
      docker push test.com:5000/test/test:$CI_VISION
  when: manual

使用cicd重启docker-compose服务

需要操作宿主机的docker

yml
restart-local:
  stage: restart-local
  image: docker:latest
  script:
    - cd /www/docker/test
    - echo "? 登录 Nexus 私有镜像仓库"
    - docker login test.com:5000 -u test -p $CI_NEXUS_PASSWD
    - docker compose down
    - docker compose pull
    - docker compose up -d
  tags:
    - mas-server2-docker
  when: manual