This is an automated email from the ASF dual-hosted git repository.
snuyanzin pushed a commit to branch release-2.4
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/release-2.4 by this push:
new 844b93bff09 [FLINK-41117][ci] Bump ubuntu to 26 in Azure and GHA
844b93bff09 is described below
commit 844b93bff09244f8d4d245b9337a2cf18dcb8107
Author: Sergey Nuyanzin <[email protected]>
AuthorDate: Fri Oct 30 18:04:50 2026 +0100
[FLINK-41117][ci] Bump ubuntu to 26 in Azure and GHA
---
.github/workflows/docs-check.yml | 2 +-
.github/workflows/docs-legacy.yml | 2 +-
.github/workflows/docs.yml | 2 +-
.github/workflows/nightly.yml | 2 +-
.github/workflows/template.flink-ci.yml | 14 +++++++-------
.github/workflows/template.pre-compile-checks.yml | 4 ++--
azure-pipelines.yml | 8 ++++----
.../test-scripts/common_kubernetes.sh | 10 +++++++---
tools/azure-pipelines/build-apache-repo.yml | 20 ++++++++++----------
tools/azure-pipelines/build-nightly-dist.yml | 4 ++--
tools/azure-pipelines/build-python-wheels.yml | 2 +-
tools/ci/free_disk_space.sh | 20 +++++++++++++++++---
12 files changed, 54 insertions(+), 36 deletions(-)
diff --git a/.github/workflows/docs-check.yml b/.github/workflows/docs-check.yml
index 09c4e38353c..6ec8143f558 100644
--- a/.github/workflows/docs-check.yml
+++ b/.github/workflows/docs-check.yml
@@ -38,7 +38,7 @@ permissions: read-all
jobs:
docs-check:
name: "Docs 404 check"
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-26.04
steps:
- name: "Flink Checkout"
uses: actions/checkout@v7
diff --git a/.github/workflows/docs-legacy.yml
b/.github/workflows/docs-legacy.yml
index e3c6175ac48..9d26ea2dc41 100644
--- a/.github/workflows/docs-legacy.yml
+++ b/.github/workflows/docs-legacy.yml
@@ -84,7 +84,7 @@ jobs:
docker run --rm \
--volume "$PWD:/root/flink" \
--volume "$HOME/.m2/repository:/root/.m2/repository" \
- apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_noble_v2 \
+ apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_resolute \
bash -c "apt-get update && apt-get install -y rsync && cd
/root/flink && ./.github/workflows/docs.sh && chmod -R a+rX docs/target"
- name: Upload documentation
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index f8c71bb849c..dfda5cacbd9 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -68,7 +68,7 @@ jobs:
docker run --rm \
--volume "$PWD:/root/flink" \
--volume "$HOME/.m2/repository:/root/.m2/repository" \
- apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_noble_v2 \
+ apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_resolute \
bash -c "cd /root/flink && ./.github/workflows/docs.sh && chmod -R
a+rX docs/target"
- name: Upload documentation
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index b285112878d..309338f644d 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -79,7 +79,7 @@ jobs:
docs_check:
name: "Docs 404 check"
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-26.04
steps:
- name: "Flink Checkout"
uses: actions/checkout@v7
diff --git a/.github/workflows/template.flink-ci.yml
b/.github/workflows/template.flink-ci.yml
index 279bdc43564..4ad9536feb5 100644
--- a/.github/workflows/template.flink-ci.yml
+++ b/.github/workflows/template.flink-ci.yml
@@ -70,9 +70,9 @@ env:
jobs:
compile:
name: "Compile"
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-26.04
container:
- image: apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_noble_v2
+ image: apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_resolute
# --init makes the process in the container being started as an init
process which will clean up any daemon processes during shutdown
# --privileged allows writing coredumps in docker (FLINK-16973)
options: --init --privileged
@@ -136,9 +136,9 @@ jobs:
packaging:
name: "Test packaging/licensing"
needs: compile
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-26.04
container:
- image: apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_noble_v2
+ image: apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_resolute
# --init makes the process in the container being started as an init
process which will clean up any daemon processes during shutdown
# --privileged allows writing coredumps in docker (FLINK-16973)
options: --init --privileged
@@ -189,9 +189,9 @@ jobs:
test:
name: "Test (module: ${{ matrix.module }})"
needs: compile
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-26.04
container:
- image: apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_noble_v2
+ image: apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_resolute
# --init makes the process in the container being started as an init
process which will clean up any daemon processes during shutdown
# --privileged allows writing coredumps in docker (FLINK-16973)
options: --init --privileged
@@ -345,7 +345,7 @@ jobs:
name: "E2E (group ${{ matrix.group }})"
needs: compile
# the end to end tests are not executed in Flink's CI Docker container due
to problems when running Docker-in-Docker
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-26.04
timeout-minutes: 310
env:
# timeout in minutes - this environment variable is required by
uploading_watchdog.sh
diff --git a/.github/workflows/template.pre-compile-checks.yml
b/.github/workflows/template.pre-compile-checks.yml
index 03717bf9180..de8d175dba9 100644
--- a/.github/workflows/template.pre-compile-checks.yml
+++ b/.github/workflows/template.pre-compile-checks.yml
@@ -41,9 +41,9 @@ permissions: read-all
jobs:
qa:
name: "Basic QA"
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-26.04
container:
- image: apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_noble_v2
+ image: apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_resolute
# --init makes the process in the container being started as an init
process which will clean up any daemon processes during shutdown
# --privileged allows writing coredumps in docker (FLINK-16973)
options: --init --privileged
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 570f097b264..5db33480d17 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -39,7 +39,7 @@ resources:
# Container with SSL to have the same environment everywhere.
# see https://github.com/apache/flink-connector-shared-utils/tree/ci_utils
- container: flink-build-container
- image: apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_noble_v2
+ image: apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_resolute
# the testcontainers based tests need the host Docker daemon, which the
agent does
# not map into job containers by default
mapDockerSocket: true
@@ -76,16 +76,16 @@ stages:
parameters: # see template file for a definition of the parameters.
stage_name: ci_build
test_pool_definition:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
e2e_pool_definition:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
environment: PROFILE="-Dflink.hadoop.version=2.10.2 -Djdk17
-Pjava17-target"
run_end_to_end: false
container: flink-build-container
jdk: 17
- job: docs_404_check # run on a MSFT provided machine
pool:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
steps:
- task: GoTool@0
inputs:
diff --git a/flink-end-to-end-tests/test-scripts/common_kubernetes.sh
b/flink-end-to-end-tests/test-scripts/common_kubernetes.sh
index 190cb468260..5ce239ae3f6 100755
--- a/flink-end-to-end-tests/test-scripts/common_kubernetes.sh
+++ b/flink-end-to-end-tests/test-scripts/common_kubernetes.sh
@@ -136,7 +136,8 @@ function start_kubernetes_if_not_running {
# here.
# Similarly, the kubelets are marking themself as "low disk space",
# causing Flink to avoid this node (again, failing the test)
- CHANGE_MINIKUBE_NONE_USER=true sudo -E minikube start --vm-driver=none
\
+ # pass env explicitly: sudo-rs (Ubuntu 26.04+) ignores 'sudo -E'
+ sudo env HOME="$HOME" PATH="$PATH" CHANGE_MINIKUBE_NONE_USER=true
minikube start --vm-driver=none \
--extra-config=kubelet.image-gc-high-threshold=99 \
--extra-config=kubelet.image-gc-low-threshold=98 \
--extra-config=kubelet.minimum-container-ttl-duration=120m \
@@ -170,6 +171,10 @@ function start_kubernetes {
fi
}
+function stop_minikube {
+ sudo env HOME="$HOME" PATH="$PATH" minikube stop
+}
+
function stop_kubernetes {
if [[ "${OS_TYPE}" != "linux" ]]; then
echo "$NON_LINUX_ENV_NOTE"
@@ -177,8 +182,7 @@ function stop_kubernetes {
kill $minikube_mount_pid 2> /dev/null
else
echo "Stopping minikube ..."
- stop_command="sudo -E minikube stop"
- if ! retry_times ${RETRY_COUNT} ${RETRY_BACKOFF_TIME}
"${stop_command}"; then
+ if ! retry_times ${RETRY_COUNT} ${RETRY_BACKOFF_TIME} stop_minikube;
then
echo "Could not stop minikube. Aborting..."
exit 1
fi
diff --git a/tools/azure-pipelines/build-apache-repo.yml
b/tools/azure-pipelines/build-apache-repo.yml
index 2928e07ce19..4782f96a50e 100644
--- a/tools/azure-pipelines/build-apache-repo.yml
+++ b/tools/azure-pipelines/build-apache-repo.yml
@@ -39,7 +39,7 @@ resources:
# Container with SSL to have the same environment everywhere.
# see https://github.com/apache/flink-connector-shared-utils/tree/ci_utils
- container: flink-build-container
- image: apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_noble_v2
+ image: apache/flink-ci-docker:java_8_11_17_21_25_maven_386_3916_resolute
# the testcontainers based tests need the host Docker daemon, which the
agent does
# not map into job containers by default
mapDockerSocket: true
@@ -71,14 +71,14 @@ stages:
test_pool_definition:
name: Default
e2e_pool_definition:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
environment: PROFILE="-Dflink.hadoop.version=2.10.2 -Djdk17
-Pjava17-target"
run_end_to_end: false
container: flink-build-container
jdk: 17
- job: docs_404_check # run on a MSFT provided machine
pool:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
steps:
# Skip docs check if this is a pull request that doesn't contain a
documentation change
- template: checkout-single-branch.yml
@@ -116,9 +116,9 @@ stages:
parameters:
stage_name: cron_azure
test_pool_definition:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
e2e_pool_definition:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
environment: PROFILE="-Dflink.hadoop.version=2.10.2 -Djdk17
-Pjava17-target"
run_end_to_end: true
container: flink-build-container
@@ -129,7 +129,7 @@ stages:
test_pool_definition:
name: Default
e2e_pool_definition:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
environment: PROFILE="-Dflink.hadoop.version=3.4.3
-Phadoop3-tests,hive3 -Djdk17 -Pjava17-target"
run_end_to_end: true
container: flink-build-container
@@ -140,7 +140,7 @@ stages:
test_pool_definition:
name: Default
e2e_pool_definition:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
environment: PROFILE="-Dflink.hadoop.version=2.10.2 -Djdk11
-Pjava11-target"
run_end_to_end: true
container: flink-build-container
@@ -151,7 +151,7 @@ stages:
test_pool_definition:
name: Default
e2e_pool_definition:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
environment: PROFILE="-Dflink.hadoop.version=2.10.2 -Djdk21
-Pjava21-target"
run_end_to_end: true
container: flink-build-container
@@ -162,14 +162,14 @@ stages:
test_pool_definition:
name: Default
e2e_pool_definition:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
environment: PROFILE="-Dflink.hadoop.version=2.10.2
-Penable-adaptive-scheduler -Djdk17 -Pjava17-target"
run_end_to_end: true
container: flink-build-container
jdk: 17
- job: docs_404_check # run on a MSFT provided machine
pool:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
steps:
- template: checkout-single-branch.yml
- task: GoTool@0
diff --git a/tools/azure-pipelines/build-nightly-dist.yml
b/tools/azure-pipelines/build-nightly-dist.yml
index ae54a7d5844..324c3112ae9 100644
--- a/tools/azure-pipelines/build-nightly-dist.yml
+++ b/tools/azure-pipelines/build-nightly-dist.yml
@@ -19,7 +19,7 @@ parameters:
jobs:
- job: ${{parameters.stage_name}}_binary
pool:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
container: flink-build-container
workspace:
clean: all
@@ -76,7 +76,7 @@ jobs:
# artifact: nightly-release
- job: ${{parameters.stage_name}}_maven
pool:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
container: flink-build-container
timeoutInMinutes: 240
workspace:
diff --git a/tools/azure-pipelines/build-python-wheels.yml
b/tools/azure-pipelines/build-python-wheels.yml
index f0291c79659..f3c13e47a8d 100644
--- a/tools/azure-pipelines/build-python-wheels.yml
+++ b/tools/azure-pipelines/build-python-wheels.yml
@@ -16,7 +16,7 @@
jobs:
- job: build_wheels_on_Linux
pool:
- vmImage: 'ubuntu-24.04'
+ vmImage: 'ubuntu-26.04'
steps:
- task: UsePythonVersion@0
inputs:
diff --git a/tools/ci/free_disk_space.sh b/tools/ci/free_disk_space.sh
index 09511541c52..8626762d81c 100755
--- a/tools/ci/free_disk_space.sh
+++ b/tools/ci/free_disk_space.sh
@@ -42,6 +42,9 @@ df -h
# each background task logs to its own file, printed once all of them are done.
LOG_DIR="$(mktemp -d)"
+# apt-get aborts the whole command on an unknown package name, so only pass
names present on this image
+remove_pkgs() { sudo apt-get remove -y $(dpkg-query -W -f='${Package}\n' "$@"
2>/dev/null) || true; }
+
echo "Removing large packages"
(
sudo apt-get remove -y '^dotnet-.*' || true
@@ -52,9 +55,10 @@ echo "Removing large packages"
sudo apt-get remove -y '^postgresql-.*' || true
sudo apt-get remove -y '^g\+\+-.*' '^clang-.*' '^libclang-.*' || true
sudo apt-get remove -y '^gfortran-.*' '^libruby.*' || true
- sudo apt-get remove -y temurin-8-jdk || true
- sudo apt-get remove -y '^libllvm.*' '^libclang1.*' snapd python3-botocore
podman buildah skopeo mecab-ipadic gh git-lfs || true
- sudo apt-get remove -y azure-cli google-cloud-sdk google-chrome-stable
google-cloud-cli firefox microsoft-edge-stable powershell mono-devel
libgl1-mesa-dri || true
+ remove_pkgs temurin-8-jdk
+ sudo apt-get remove -y '^libllvm.*' '^libclang1.*' || true
+ remove_pkgs snapd python3-botocore podman buildah skopeo mecab-ipadic gh
git-lfs
+ remove_pkgs azure-cli google-cloud-sdk google-chrome-stable google-cloud-cli
firefox microsoft-edge-stable powershell mono-devel libgl1-mesa-dri
sudo apt-get autoremove -y || true
sudo apt-get clean || true
) > "${LOG_DIR}/apt.log" 2>&1 &
@@ -95,3 +99,13 @@ sudo rm -rf /opt/microsoft
cat "${LOG_DIR}"/*.log
rm -rf "${LOG_DIR}"
df -h
+
+# Not disk cleanup, but this script runs on the host before any cache or test
step in both CIs:
+# Ubuntu 26.04 mounts /tmp as a ~4 GB tmpfs, too small for cache archives and
e2e state.
+if findmnt -n -o FSTYPE /tmp | grep -q tmpfs; then
+ echo "Moving /tmp to disk"
+ sudo mkdir -p /var/tmp/ci-tmp
+ sudo chmod 1777 /var/tmp/ci-tmp
+ sudo mount --bind /var/tmp/ci-tmp /tmp
+fi
+df -h /tmp