前置环境

  • git
  • docker

    安装配置 gitlab-runner

    可以直接安装在主机上,也可以使用 Docker 安装。

    安装

    参考:https://docs.gitlab.com/runner/install/linux-manually.html

    注册

    1. $ sudo gitlab-runner register -n \
    2. --url https://gitlab.com/ \
    3. --registration-token REGISTRATION_TOKEN \
    4. --executor shell \
    5. --description "My Runner"
    注意 —executor 选的是 shell。其中 —url 和 —registration-token 见下图红框:
    GitLab-CI 配置 - 图1

    配置账号信息

    1. # 将 gitlab-runner 用户添加到 docker 组
    2. $ sudo usermod -aG docker gitlab-runner
    3. # 切换到 gitlab-runner 用户
    4. $ su gitlab-runner
    5. $ 登录镜像仓库
    6. $ docker login

    添加 .gitlab-ci.yml 文件

    一个参考例子: ```bash stages:
  • test
  • build
  • deploy

test: stage: test tags:

  • kfcoding script:
  • echo ‘just for test’
  • echo $CI_PROJECT_URL/tree/$CI_COMMIT_REF_NAME
  • echo $CI_PROJECT_URL/commit/$CI_COMMIT_SHA

build: stage: build tags:

  • kfcoding script:
  • | if [[ $CI_COMMIT_REF_NAME = “dev” ]]; then docker build -t $IMAGE_DEV . docker push $IMAGE_DEV elif [[ $CI_COMMIT_REF_NAME = “master” ]]; then docker build -t $IMAGE_PROD . docker push $IMAGE_PROD else echo ‘no need to build for this branch’ fi

deploy: stage: deploy tags:

  • kfcoding script:
  • | if [[ $CI_COMMIT_REF_NAME = “dev” ]]; then curl $UPDATE_HOOK_DEV elif [[ $CI_COMMIT_REF_NAME = “master” ]]; then curl $UPDATE_HOOK_PROD else echo ‘no need to deploy for this branch’ fi ```

    设置 CI/CD 环境变量

    image.png

    常见问题

    1、Job 一直在排队等待

    报错信息:此作业被卡住,因为没有任何活动的 runner 能运行此构建。
    image.png
    解决方法:这是因为在 .gitlab-ci.yml 没有指名 tags, 可添加配置。另外,也可以设定 Runner 为可以运行没有任何标签的作业,方法:

GitLab-CI 配置 - 图4
GitLab-CI 配置 - 图5

2、无法推送镜像

docker push 的时候报错:denied: requested access to the resource is denied
解决方法:这是在 push 镜像的时候是直接调用 CI 主机的 docker server 来执行的。报错表示没有登录到远程镜像仓库,需要参照 这里 配置。