我正在使用ArgoWorkflow自动化我们的CI/CD链。为了构建镜像,并将它们推送到我们的私有注册表,我们面临着在buildah或kaniko之间的选择。但我不能指出两者之间的主要区别。优点和缺点,以及这些工具如何处理并行构建和缓存管理。有人能澄清这几点吗?或者甚至建议另一个工具,也许可以用一种更简单的方式完成这项工作。对这个问题进行一些澄清将是非常有帮助的。提前谢谢。
发布于 2021-11-26 18:29:51
kaniko的设置非常简单,并且有一些魔法,可以让它在kubernetes中不需要任何要求就能工作:)
我也尝试过buildah,但无法对其进行配置,并且发现在kubernetes环境中设置它太复杂。
您可以使用内部Docker注册表作为kaniko的缓存管理,但也可以改为配置本地存储(尚未尝试)。只需使用最新版本的kaniko (v1.7.0),它修复了缓存层管理中的一个重要错误。
以下是我在GitLab CI管道中使用的一些函数,它们由Kubernetes中的GitLab运行器执行(它们有望阐明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
https://stackoverflow.com/questions/70126243
复制相似问题