Skip to content

Latest commit

 

History

History
227 lines (178 loc) · 5.59 KB

git-runner.md

File metadata and controls

227 lines (178 loc) · 5.59 KB

runner安装

  • 官方文档

  • 使用docker安装

    # 使用docker景象安装
    git pull gitlab/gitlab-runner-helper
    # 启动
    docker run -d \
    	--name=gr1 \
    	--restart=always \
    	-v /data/gitlab-runner/gr1/config:/etc/gitlab-runner \
      -v /var/run/docker.sock:/var/run/docker.sock \
      gitlab/gitlab-runner
    # 注册,会要求输入gitlab的地址,和token,以及选定执行器
    docker exec -it gr1 gitlab-ci-multi-runner register
  • 使用宿主机安装

    yum install -y gitlab-runner
    # 下面注册的时候使用宿主机的用户,避免权限不够用
    gitlab-runner install --working-directory /home/gitlab-runner --user root
  • 容器执行器-使用本地镜像

    vim /data/gitlab-runner/gr1/config/config.toml
    docker restart gr1

    重点在最后一句pull_policy="if-not-present",可以使用本地镜像;修改concurrent的数量,可以提高并发数量

      concurrent = 3
      check_interval = 0
    
      [session_server]
        session_timeout = 1800
    
      [[runners]]
        name = "vue buidler"
        url = "http://gitlab.guyinmedia.net/"
        token = "ByotyRyepsR-X2sDsUsx"
        executor = "docker"
        [runners.custom_build_dir]
        [runners.cache]
          [runners.cache.s3]
          [runners.cache.gcs]
        [runners.docker]
          tls_verify = false
          image = "node:13-alpine"
          privileged = false
          disable_entrypoint_overwrite = false
          oom_kill_disable = false
          disable_cache = false
          volumes = ["/cache"]
          shm_size = 0
          pull_policy="if-not-present"
  • 在gitlab中检查runner是否已经正常链接

  • 在gitlab中给runner关联项目

runner应用

  • 自定义docker

    FROM node:13-alpine
    
    LABEL maintainer="[email protected]" version="1.0" license="MIT"
    
    COPY ./ssh /root/.ssh
    
    # ---------- 编译时所用参数 ----------
    # 默认 Asia/Shanghai
    ARG timezone
    
    ENV TIMEZONE=${timezone:-"Asia/Shanghai"}
    
    RUN set -ex \
        && sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
        && apk update \
        && apk add openssh rsync python \
        && ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
        && echo "${TIMEZONE}" > /etc/timezone \
        # ---------- clear works ----------
        && npm config set registry https://registry.npm.taobao.org \
        && npm install -g node-sass --unsafe-perm=true --allow-root \
        && rm -rf /var/cache/apk/* /tmp/* /usr/share/man \
        && echo -e "\033[42;37m Build Completed :).\033[0m\n"
    
    WORKDIR /home

    Dockerfile 同级目录需要有ssh文件夹

  • 创建免密登录条件

    • 构建临时用的容器上(tmp image)

      docker build -t ti .
    • 创建临时的容器,并进入容器

      docker run -it \
      	--rm \
      	-v $(pwd)/ssh:/root/.ssh \
      	ti sh
    • 在容器中生成免密登录所需要的密钥(ssh-keygen一路回车就好)

      /home # ssh-keygen
      /home # ls /root/.ssh/
      id_rsa      id_rsa.pub

      只需要在第一次的时候生成公钥私钥生成,后面追加要免密登录的服务器的时候,无需再次生成

    • 设置要免密登录的服务器

      /home # ssh-copy-id [email protected]
      # .... 输出内容忽略,中间需要输入一次yes和一次密码
    • 核验免密登录的情况 可以看到设置了三台服务器的免密登录及其对应的ip

      /home # cat /root/.ssh/known_hosts 
      192.168.1.7 ecdsa-sha2-nistp256 xxxx
      192.168.1.8 ecdsa-sha2-nistp256 xxxx
      192.168.1.9 ecdsa-sha2-nistp256 xxx
      
    • 退出当前容器,检查本地免密登录信息生成情况

      [root@localhost runner]# tree
      .
      ├── Dockerfile
      └── ssh
          ├── id_rsa
          ├── id_rsa.pub
          └── known_hosts
      
      1 directory, 4 files

      可以看到已经生成了用于免密登录的信息

  • 构建用于发布vue项目的镜像

    • 构建镜像

      docker build -t vue-release:1.0 .
    • 最后在项目中的.gitlab-ci.yml中

      image: vue-release:1.0
      
      stages:
        - build
      job2:
        stage: build
        script:
          - node -v
          - npm config set registry https://registry.npm.taobao.org
          - npm install
          - npm run build:prod
          - rsync -rzvt $(pwd)/dist/* [email protected]:/home/release-dir
        only:
          - master
        tags:
          - vuebuidler
      

一个生产环境的yml配置

stages:
  - Product

before_script:
  - go version
  - gf version
  - go mod download
  - gf pack config,public packed/pack.go

Deploy:
  stage: Product
  when: manual
  script:
    - eval $(ssh-agent -s)
    - mv config/config.prev.toml config/config.toml
    - sed -i "s/VERSION_PLACEHOLDER/$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA/g" config/config.toml
    - gf build main.go
    - chmod 0600 $_global_pem
    - ssh-add $_global_pem
    - export [email protected]
    - export WKDIR=/var/www/NB
    - scp bin/linux_amd64/nb2 $REMOTE:$WKDIR/nb2.new
    - ssh -p22 $REMOTE "ls -alh $WKDIR"
    - ssh -p22 $REMOTE "supervisorctl stop nb-serve"
    - ssh -p22 $REMOTE "mv $WKDIR/nb2.new $WKDIR/nb2"
    - migrate -path database/migrations -database "mysql://nb2:password@tcp(28.28.28.28:3306)/nb2-prod" up
    - ssh -p22 $REMOTE "supervisorctl start nb-serve"
    - kill $SSH_AGENT_PID
  only:
    - develop
  tags:
    - go