🙌
GitLab CI でマルチ CPU アーキテクチャ対応 PHP イメージを登録してみる
はじめに
マルチ CPU アーキテクチャ対応イメージを GitLab CE へ直接出力してみる
手動で出来ることは分かったので、GitLab CI で実行できるようにしてみる。
ついでに、PHP のイメージを使ってみる。
前提
- PHP のイメージ上で、ややこしいことはやらない。
-
phpinfio()
が実行されるだけ。
-
- 以下のタグを打った時だけ、イメージをプッシュ出来るようにする。
- vX.X.X (例: v1.12.3)
- XXXXXXXX (例: 20210914)
- XXXXXXXX-X (例: 20210914-02)
ディレクトリ構成
├── .gitlab-ci.yml
└── php
└── Dockerfile
ソース
Dockerfile
FROM php:8.0-apache
RUN { \
echo '<?php'; \
echo 'phpinfo();'; \
} > /var/www/html/index.php
.gitlab-ci.yml
---
stages:
- build
- push
image: docker:20.10
variables:
IMAGE_NAME: php-webserver-sample
.condition:
rules:
- if: $CI_COMMIT_TAG =~ /^v(\d+\.)?(\d+\.)?(\*|\d+)$/
- if: $CI_COMMIT_TAG =~ /^\d{8}(-\d+)?$/
buildx:
stage: build
extends: .condition
variables:
GIT_STRATEGY: none
artifacts:
paths:
- buildx
expire_in: 1 hour
script:
- export DOCKER_BUILDKIT=1
- docker build --platform=local -o . https://github.com/docker/buildx.git
.push:
stage: push
extends: .condition
before_script:
- mkdir -p ~/.docker/cli-plugins
- cp buildx ~/.docker/cli-plugins/docker-buildx
script:
- echo "${CI_REGISTRY_PASSWORD}" | docker login -u ${CI_REGISTRY_USER} --password-stdin ${CI_REGISTRY}
- docker buildx create --use --name mybuilder
- docker buildx inspect --bootstrap
- docker buildx build -t "${IMAGE_TAG}"
--platform linux/amd64,linux/arm64
--push
./php
push_latest_image:
extends: .push
variables:
IMAGE_TAG: "${CI_REGISTRY}/${CI_PROJECT_PATH}/${IMAGE_NAME}"
push_tagged_image:
extends: .push
variables:
IMAGE_TAG: "${CI_REGISTRY}/${CI_PROJECT_PATH}/${IMAGE_NAME}:${CI_COMMIT_TAG}"
補足
${CI_REGISTRY}/${CI_PROJECT_PATH}/${IMAGE_NAME}
をグローバルな variables で使用した場合
.gitlag-ci.yml
variables:
IMAGE_NAME: php-webserver-sample
IMAGE_PATH: "${CI_REGISTRY}/${CI_PROJECT_PATH}/${IMAGE_NAME}"
# (ry
push_latest_image:
extends: .push
variables:
IMAGE_TAG: "${IMAGE_PATH}"
以下のエラーが起きて登録できなかった 😅
$ docker buildx build -t "${IMAGE_TAG}" --platform linux/amd64,linux/arm64 --push ./php
error: invalid tag "${CI_REGISTRY}/${CI_PROJECT_PATH}/php-webserver-sample": invalid reference format
環境
- GitLab CE: 13.12.10
- GitLab Runner versions: 13.4.0
Discussion