GitlabCI(二)- 使用

gitlab-runner

安装

# 安装
yum install gitlab-ci-multi-runner
# 启动
gitlab-runner start

此时,就可以进行注册使用了。

注册

# 注册
gitlab-runner register

GitlabCI(二)- 使用_第1张图片

说明
1:输入gitlab网址(在项目->settings->CI/CD->runner settings中)
2:token值(在项目->settings->CI/CD->runner settings中)
3:tag,最好不要重复,在编写ci文件时需要指定某一个stage要用那个runner跑,这时候就需要tag做区分

3.5:(4 上面那个,截图时漏了)这个就是选择runner在哪儿执行用的,可以在本机也可以在docker。如详细了解,可以上官网看文档。

4:如果上面选的是docker,则ci会在docker中运行,如果ci文件中没指定image,就会用这个默认的,这里要说一下,使用docker image优先级是: job image(ci文件定义) > global image(ci文件定义) > default image(runner注册时定义)

GitlabCI(二)- 使用_第2张图片

至此工具安装好了,准备开始搞流程了。

CI文件编写

直接拿出一份简单的ci文件,做下解析,有个直观上的认识。

# global image 前面说过,如果job中不定义,就用这个作为默认docker runner,就是说下面的job执行步骤在这里面跑。
image: 192.168.60.153/wops/docker-docker:v0.1

# ci文件运行定义变量,放在下面的job中使用
variables:
  # go module
  GOSUMDB: 'off'
  GO111MODULE: 'on'
  # 仓库信息
  REMOTE_DOCKER_URI:192.168.60.153/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}
  # 最新tag
  LATEST_IMAGE_TAG: "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}"

# stage:阶段,每个阶段都是1到多个job的集合,每个job中也会有stage参数指明属于哪个阶段。stage是顺序执行,轮到某个stage了就会顺序执行下面的job。
# 下面这个stages定义了两个stage:build,message
stages:
#  - unittest
  - build
#  - deploy
  - message

# stage:build
build:
# gitlab分支过滤,当某分支有代码变更,触发ci,个人分支不想触发,不要写在里面
  only:
    - /^develop$/
    - /^master$/
    - /^release/
    - tags

# 所属 stage
  stage: build
# 用哪个runner跑,就写哪个runner的tag,gitlab自动匹配。
  tags:
    - harbor

# 执行的shell命令,这里选docker,则该命令就会在指定镜像运行的容器中跑,这里有涉及到docker in docker的相关知识,下面会单独讲。
  script:
#    - REMOTE_DOCKER_URI=192.168.0.103:8080/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}
    - docker pull ${REMOTE_DOCKER_URI}:latest || true # runner
    - docker build --cache-from ${REMOTE_DOCKER_URI}:latest
      --tag ${REMOTE_DOCKER_URI}:${LATEST_IMAGE_TAG} --tag ${REMOTE_DOCKER_URI}:latest .
    - docker login 192.168.60.153 -u admin -p ${HARBOR_PWD}
    - docker push ${REMOTE_DOCKER_URI}:latest
    - docker push ${REMOTE_DOCKER_URI}:${LATEST_IMAGE_TAG}
    - docker rmi ${REMOTE_DOCKER_URI}:${LATEST_IMAGE_TAG}

message:
  tags:
    - report
  when: always
  stage: message
  script:
    - MESSAGE_HEADER="${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_SLUG}"
    - echo ${MESSAGE_HEADER}
# 更详细的参数,建议看官网

Q&A

  1. 如何在docker中push代码到仓库?
    答:(1) 镜像要下载有docker client的(docker 分为client和server不懂的上网查)。能执行docker命令就行,然后我们需要在这个job用到的runner配置文件做以下修改!
# 配置文件(按需,可以ps -ef |grep gitlab-runner看下用的哪个配置)
vi /etc/gitlab-runner/config.toml
发现了新大陆了吧,这里比较关键的是volumes,把docker.sock挂在容器中,然后在容器中执行docker命令,实际是用的服务器的server端。保证server端能和仓库联通就可以了。
[[runners]]
  name = "master"
  url = "https://gxxx"
  token = "xxx"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "192.168.60.153/wops/docker-docker:v0.1"
    privileged = false
    disable_cache = false
    volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]
    shm_size = 0
  [runners.cache]

暂时告捷

你可能感兴趣的:(CI/CD)