Skip to content

GitLab Runner で Docker Hub に image を push する

共通事前準備

サーバを用意する。いずれもコンテナで動かします。

GitLab サーバ

version: "3"
services:
  gitlab:
    image: gitlab/gitlab-ee:15.4.2-ee.0
    container_name: nob-gitlab
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url "http://${IP_address}:80"
    ports:
      - "80:80"
      - "2022:22"
    volumes:
      - "/srv/gitlab/config:/etc/gitlab"
      - "/srv/gitlab/logs:/var/log/gitlab"
      - "/srv/gitlab/data:/var/opt/gitlab"

GitLab Runner サーバ

version: "3"
services:
  gitlab-runner:
    image: gitlab/gitlab-runner:ubuntu-v15.7.0
    container_name: nob-gitlab-runner
    restart: always
    volumes:
      - "/srv/gitlab/gitlab-runner/config:/etc/gitlab-runner"
      - "/var/run/docker.sock:/var/run/docker.sock"

runner を登録します。executor はdockerを選択してください。

docker exec -it nob-gitlab-runner gitlab-runner register

docker hub

プロジェクト作成

ディレクトリ構成

first-kaniko-project
  ├─.gitlab-ci.yml
  └─Dockerfile

.gitlab-ci.yml

主に以下の流れで処理が進みます。

  • 実行用の image としてkaniko-project/executor:debugを使う。latestとかだとうまくいかないらしい。
  • DOCKERHUB_TOKENを生成して/kaniko/.docker/config.jsonに記載する。これが docker hub に push する際の認証情報となる。
  • push する。
stages:
  - build

build:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - DOCKERHUB_TOKEN=`echo -n ${DOCKERHUB_USER}:${DOCKERHUB_PASSWORD} | base64`
    - echo "{\"auths\":{\"https://index.docker.io/v1/\":{\"auth\":\"${DOCKERHUB_TOKEN}\"}}}" > /kaniko/.docker/config.json
    - /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
      --destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}"
  rules:
    - if: $CI_COMMIT_TAG

CI_REGISTRY_IMAGEは GitLab の画面から環境変数として登録するか、.gitlab-ci.ymlにベタ書きするかしてください。

Dockerfile

ただ適当なファイルを touch しただけの ubuntu コンテナです。

FROM ubuntu:20.04

RUN mkdir /nob && cd /nob && touch snail-test

実行

準備

各種環境変数を用意する必要があるので、画面のSettings -> CI/CD -> Variablesから定義します。

  • DOCKERHUB_USER: docker hub のユーザ名
  • DOCKERHUB_PASSWORD: ログイン用のパスワードか、hub から発行できるアクセストークン

パイプライン実行

Repository -> Tagsからタグを発行すると、Tag name が image のタグとなります。あとはパイプラインが走るので見守ってください。