0

ArgoWorkflow を使用して CI/CD チェーンを自動化しています。イメージをビルドしてプライベート レジストリにプッシュするために、buildah または kaniko のどちらかを選択する必要があります。しかし、私はこの 2 つの主な違いに指を置くことはできません。長所と短所、およびこれらのツールが並列ビルドとキャッシュ管理をどのように処理するかについても説明します。誰でもこれらの点を明確にできますか? または、より簡単な方法で作業できる別のツールを提案することもできます。この件に関するいくつかの説明は本当に役に立ちます。前もって感謝します。

4

2 に答える 2

0

kanikoはセットアップが非常に簡単で、kubernetes の要件なしで動作させる魔法があります :)

buildahも試してみましたが、構成できず、kubernetes 環境でセットアップするには複雑すぎることがわかりました。

kanikoのキャッシュ管理として内部 Docker レジストリを使用できますが、代わりにローカル ストレージを構成することもできます (まだ試していません)。最新バージョンのkaniko (v1.7.0) を使用するだけで、キャッシュされたレイヤー管理の重要なバグが修正されます。

これらは、Kubernetes の GitLab ランナーによって実行される、GitLab CI パイプラインで使用する関数の一部です (できれば、kanikoのセットアップと使用法を明確にする必要があります)。

function kaniko_config
{
    local docker_auth="$(echo -n "$CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD" | base64)"

    mkdir -p $DOCKER_CONFIG
    [ -e $DOCKER_CONFIG/config.json ] || \
        cat <<JSON > $DOCKER_CONFIG/config.json
{
    "auths": {
        "$CI_REGISTRY": {
            "auth": "$docker_auth"
        }
    }
}
JSON
}

# Usage example (.gitlab-ci.yml)
#
# build php:
#   extends: .build
#   variables:
#     DOCKER_CONFIG: "$CI_PROJECT_DIR/php/.docker"
#     DOCKER_IMAGE_PHP_DEVEL_BRANCH: &php-devel-image "${CI_REGISTRY_IMAGE}/php:${CI_COMMIT_REF_SLUG}-build"
#   script:
#     - kaniko_build
#       --destination $DOCKER_IMAGE_PHP_DEVEL_BRANCH
#       --dockerfile $CI_PROJECT_DIR/docker/images/php/Dockerfile
#       --target devel

function kaniko_build
{
    kaniko_config
    echo "Kaniko cache enabled ($CI_REGISTRY_IMAGE/cache)"
    /kaniko/executor \
        --build-arg http_proxy="${HTTP_PROXY}" \
        --build-arg https_proxy="${HTTPS_PROXY}" \
        --build-arg no_proxy="${NO_PROXY}" \
        --cache --cache-repo $CI_REGISTRY_IMAGE/cache \
        --context "$CI_PROJECT_DIR" \
        --digest-file=/dev/termination-log \
        --label "com.qwant.ci.job.id=${CI_JOB_ID}" \
        --label "com.qwant.ci.pipeline.id=${CI_PIPELINE_ID}" \
        --verbosity info \
        $@

    [ -r /dev/termination-log ] && \
        echo "Manifest digest: $(cat /dev/termination-log)"
}

これらの関数を使用して、新しいイメージを次のように構築できます。

stages:
  - build

build app:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:v1.7.0-debug
    entrypoint: [""]
  variables:
    DOCKER_CONFIG: "$CI_PROJECT_DIR/app/.docker"
    DOCKER_IMAGE_APP_RELEASE_BRANCH: &app-devel-image "${CI_REGISTRY_IMAGE}/phelps:${CI_COMMIT_REF_SLUG}"
    GIT_SUBMODULE_STRATEGY: recursive
  before_script:
    - source ci/libkaniko.sh
  script:
    - kaniko_build
      --destination $DOCKER_IMAGE_APP_RELEASE_BRANCH
      --digest-file $CI_PROJECT_DIR/docker-content-digest-app
      --dockerfile $CI_PROJECT_DIR/docker/Dockerfile
  artifacts:
    paths:
      - docker-content-digest-app
  tags:
    - k8s-runner
于 2021-11-26T18:29:50.703 に答える