multiarch image

This commit is contained in:
2025-08-06 19:27:00 -05:00
parent 2915493f4d
commit d226433fa4
5 changed files with 51 additions and 20 deletions

17
Jenkinsfile vendored
View File

@@ -17,7 +17,21 @@ pipeline {
}
}
stages {
stage('Build/Run') {
stage('Build Multiarch Image') {
agent { label "linux && amd64" }
steps {
withCredentials([string(
credentialsId: 'DOCKER_REGISTRY',
variable: 'DOCKER_REGISTRY'),
usernamePassword(credentialsId: 'DOCKER_REGISTRY_CRED',
passwordVariable: 'DOCKER_REGISTRY_PASS',
usernameVariable: 'DOCKER_REGISTRY_USER'
)]) {
sh "./scripts/docker_build_multiarch_image.sh ${DISTRO}"
}
}
}
stage('Run Multiarch Image') {
agent { label "linux && ${ARCH}" }
steps {
withCredentials([string(
@@ -27,7 +41,6 @@ pipeline {
passwordVariable: 'DOCKER_REGISTRY_PASS',
usernameVariable: 'DOCKER_REGISTRY_USER'
)]) {
sh "./scripts/docker_build_image.sh ${DISTRO}"
sh "./scripts/docker_run_image.sh ${DISTRO}"
}
}

View File

@@ -30,7 +30,7 @@ echo_platform() {
local platKernel platCpu
platKernel="$(uname)"
platKernel="${platKernel,,}"
if [[ "${HOSTTYPE}" == 'x86_64' ]]; then
if [[ ${HOSTTYPE} == 'x86_64' ]]; then
platCpu='amd64'
else
platCpu='arm64'
@@ -60,6 +60,8 @@ docker_build_image() {
validate_selected_image "$@" || return 1
check_docker || return 1
test -d "${DOCKER_DIR}" || mkdir -p "${DOCKER_DIR}"
PLATFORM="${PLATFORM:-$(echo_platform)}"
for distro in "${DISTROS[@]}"; do
image_tag="$(set_distro_image_tag "${distro}")"
echo_info "sourcing package manager for ${image_tag}"
@@ -97,23 +99,25 @@ docker_build_image() {
} >"${dockerfile}"
echo_info "building ${image_tag}"
docker build \
--platform "$(echo_platform)" \
docker buildx build \
--platform "${PLATFORM}" \
-t "${image_tag}" \
-f "${dockerfile}" \
. || return 1
# if a docker registry is defined, push to it
if [[ "${DOCKER_REGISTRY}" != '' ]]; then
docker tag "${image_tag}" "${DOCKER_REGISTRY}/${image_tag}"
if [[ ${DOCKER_REGISTRY} != '' ]]; then
docker login \
-u "${DOCKER_REGISTRY_USER}" \
-p "${DOCKER_REGISTRY_PASS}" \
"${DOCKER_REGISTRY}"
docker push \
--platform "$(echo_platform)" \
"${DOCKER_REGISTRY}/${image_tag}"
docker buildx build \
--push \
--platform "${PLATFORM}" \
-t "${DOCKER_REGISTRY}/${image_tag}" \
-f "${dockerfile}" \
. || return 1
fi
docker system prune -f
@@ -163,21 +167,19 @@ docker_run_image() {
image_tag="$(set_distro_image_tag "${distro}")"
# if a docker registry is defined, pull from it
if [[ "${DOCKER_REGISTRY}" != '' ]]; then
if [[ ${DOCKER_REGISTRY} != '' ]]; then
docker login \
-u "${DOCKER_REGISTRY_USER}" \
-p "${DOCKER_REGISTRY_PASS}" \
"${DOCKER_REGISTRY}"
docker pull \
--platform "$(echo_platform)" \
"${DOCKER_REGISTRY}/${image_tag}"
docker tag "${DOCKER_REGISTRY}/${image_tag}" "${image_tag}"
fi
echo_info "running ffmpeg build for ${image_tag}"
docker run --rm \
--platform "$(echo_platform)" \
-v "${REPO_DIR}":/workdir \
-w /workdir \
-e DEBUG="${DEBUG}" \
@@ -185,3 +187,18 @@ docker_run_image() {
./scripts/build.sh || return 1
done
}
FB_FUNC_NAMES+=('docker_build_multiarch_image')
FB_FUNC_DESCS['docker_build_multiarch_image']='build multiarch docker image'
FB_FUNC_COMPLETION['docker_build_multiarch_image']="${VALID_DOCKER_IMAGES[*]}"
docker_build_multiarch_image() {
validate_selected_image "$@" || return 1
check_docker || return 1
PLATFORM='linux/amd64,linux/arm64'
docker buildx create \
--use \
--platform="${PLATFORM}" \
--name my-multiplatform-builder \
--driver=docker-container
docker_build_image "$@"
}

View File

@@ -40,7 +40,7 @@ cd "$(dirname "$(readlink -f $0)")/.."
export FB_RUNNING_AS_SCRIPT=1
. main.sh
scr_name="$(bash_basename $0)"
cmd="${scr_name//.sh}"
cmd="${scr_name//.sh/}"
if [[ $DEBUG == 1 ]]; then set -x; fi
$cmd $@' >"${ENTRY_SCRIPT}"
chmod +x "${ENTRY_SCRIPT}"

View File

@@ -0,0 +1 @@
entry.sh

View File

@@ -3,6 +3,6 @@ cd "$(dirname "$(readlink -f $0)")/.."
export FB_RUNNING_AS_SCRIPT=1
. main.sh
scr_name="$(bash_basename $0)"
cmd="${scr_name//.sh}"
cmd="${scr_name//.sh/}"
if [[ $DEBUG == 1 ]]; then set -x; fi
$cmd $@