gitlab+gitlab-runner同步代码并使用docker执行

鸿辰 Dcoker 3.86 K

说明

用于代码托管在gitlab,提交后通过gitlab-runner实现自动部署

在宿主机安装

  • 安装Git
    查看是否已经安装,建议版本安装2.x,因为低版本会在gitlab-runner中报错

      # 查看安装的版本
      git --version
    
      # 如果版本低于2.x,则移除重新安装
      yum remove git
    
      # 安装镜像源
      yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-1.noarch.rpm
      yum install git -y
      # 更新确保是新版本
      yum update git
    
      # 查看安装的版本
      git --version
  • 安装gitlab

    gitlab-runner不建议在docker运行,因为权限和一些不必要的内存限制使用问题,安装教程查看 Centos 7安装gitlab

  • 安装gitlab-runner

    查看 Install GitLab Runner manually on GNU/Linux

  • 安装docker

    查看 Linux Centos7.9安装docker

  • 安装docker-compose

    查看 Linux Centos7.9安装docker-compose

配置gitlab-runner用户免密登录

  1. 切换至 gitlab-runner 用户

    su gitlab-runner
    cd ~
  2. 生成密钥

    ssh-keygen -t rsa # 后面一直按回车即可

    完成后会在/home/gitlab-runner/.ssh 目录生成id_rsa 和 id_rsa.pub 两个文件

  3. 导入密钥 (这里的场景是runner和需要部署的服务器是同一台服务器,如果不是同一台服务器,将密钥导入到对应服务器)

    # 回到root用户
    exit 
    # 导入 gitlab-runner 用户密钥
    cat /home/gitlab-runner/.ssh/id_rsa.pub >>/root/.ssh/authorized_keys
    # 重启
    systemctl restart sshd
  4. 测试

    su gitlab-runner
    ssh root@服务器ip # 输入完成后回车,会直接以root身份登录服务器

注册runner

在如下位置获取项目的注册信息
gitlab+gitlab-runner同步代码并使用docker执行-第1张图片-鸿辰个人分享站

然后执行下面的命令注册runner

[root@localhost ~]# gitlab-ci-multi-runner register
Runtime platform                                    arch=amd64 os=linux pid=4387 revision=98daeee0 version=14.7.0
Running in system-mode.                            

Enter the GitLab instance URL (for example, https://gitlab.com/):
输入注册地址
Enter the registration token:
输入注册令牌
Enter a description for the runner:
[localhost.localdomain]: 描述,可以随便写
Enter tags for the runner (comma-separated):
标签 与 .gitlab-ci.yml文件中的tags对应
Registering runner... succeeded                     runner=2aZHpdoN
Enter an executor: kubernetes, custom, ssh, virtualbox, docker+machine, docker-ssh+machine, docker, docker-ssh, parallels, shell:
shell # 这里选择shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

验证注册信息

[root@localhost ~]# gitlab-ci-multi-runner list
Runtime platform                                    arch=amd64 os=linux pid=5062 revision=98daeee0 version=14.7.0
Listing configured runners                          ConfigFile=/etc/gitlab-runner/config.toml
node-build                                          Executor=shell Token=注册令牌 URL=注册地址

在服务器上拉取项目

因是基于http拉起的项目,需要先在服务器拉取项目,以便保存git的账号和密码,如果是使用的ssh方式拉取项目,则可以不做此步骤,在gitlab中配置服务器的部署密钥即可

# 配置git永久保存账号密码
git config --global credential.helper store
# 拉取代码
cd /home/project
git clone -b master 仓库地址
输入账号密码拉取代码

编写.gitlab-ci.yml

可以参考下面的配置

# usermod -aG docker gitlab-runner

stages:
  - deploy

variables:
  PROJECT_DIR: /home/project # 项目目录
  PROJECT_SAAS_NAME: 项目名称 # 如test

deploy_saas_test:
  stage: deploy
  before_script:
    - git --version # 检测是否安装git
    - docker -v # 检测是否安装docker
    - docker-compose -v # 检测是否安装docker-compose
  script:
    - ssh -tt root@172.18.26.69 << serverssh # 以root身份登录服务器
    - cd $PROJECT_DIR/$PROJECT_SAAS_NAME/ # 进入项目代码目录
    - git pull origin master # 更新代码
    - mkdir ./runtime # 创建缓存目录
    - chown -R 33:tape ./runtime ./public/storage # 修改权限
    - docker-compose -p v5-saas down && docker-compose -p v5-saas up -d # 使用docker-compose拉起项目
    - exit # 退出
    - serverssh
  only:
    - master # 仅对某个分支生效
  tags:
    - test # 需要执行的runner设置的tags名称

标签: git docker gitlab