CI: update os version and fix integrate test error (#165)

diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 9d1b94e..4d281f6 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -77,22 +77,21 @@
         # YAML parse `3.10` to `3.1`, so we have to add quotes for `'3.10'`, see also:
         # https://github.com/actions/setup-python/issues/160#issuecomment-724485470
         python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
-        # FIXME: temp change os to ubuntu-20.04 to fix python can not found error https://github.com/actions/setup-python/issues/162#issuecomment-1325307787
-        os: [ubuntu-20.04, macOS-latest, windows-latest]
+        os: [ubuntu-latest, macOS-latest, windows-latest]
         exclude:
           # Skip because dependence [py4j](https://pypi.org/project/py4j/) not work on those environments
           - os: windows-latest
             python-version: '3.10'
           - os: windows-latest
-            python-version: 3.11
+            python-version: '3.11'
           - os: windows-latest
-            python-version: 3.12
+            python-version: '3.12'
           # Python 3.9 is on macos-13 but not macos-latest (macos-14-arm64)
           # https://github.com/actions/setup-python/issues/696#issuecomment-1637587760
           - os: macos-latest
-            python-version: 3.9
+            python-version: '3.9'
         include:
-          - python-version: 3.9
+          - python-version: '3.9'
             os: macos-13
     steps:
       - uses: actions/checkout@v3
diff --git a/setup.cfg b/setup.cfg
index 992e2cb..e76e8ea 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -24,9 +24,9 @@
 long_description_content_type = text/markdown
 author = Apache Software Foundation
 author_email = dev@dolphinscheduler.apache.org
-license = Apache License 2.0
+license = Apache-2.0
 license_files = 
-    file: LICENSE
+    LICEN[CS]E*
 keywords = 
     dolphinscheduler
     workflow
@@ -37,7 +37,6 @@
     Development Status :: 4 - Beta
     Environment :: Console
     Intended Audience :: Developers
-    License :: OSI Approved :: Apache Software License
     Operating System :: Unix
     Operating System :: POSIX
     Operating System :: Microsoft :: Windows
diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py
index 7a962ef..cf17afb 100644
--- a/tests/integration/conftest.py
+++ b/tests/integration/conftest.py
@@ -17,12 +17,15 @@
 
 """py.test conftest.py file for package integration test."""
 
+import logging
 import os
 
 import pytest
 
 from tests.testing.docker_wrapper import DockerWrapper
 
+logger = logging.getLogger(__name__)
+
 
 @pytest.fixture(scope="package", autouse=True)
 def docker_setup_teardown():
@@ -41,7 +44,11 @@
         docker_wrapper = DockerWrapper(
             image="apache/dolphinscheduler-standalone-server:ci",
             container_name="ci-dolphinscheduler-standalone-server",
-            environment={"API_PYTHON_GATEWAY_ENABLED": "true"},
+            environment={
+                "API_PYTHON_GATEWAY_ENABLED": "true",
+                "MASTER_SERVER_LOAD_PROTECTION_ENABLED": "false",
+                "WORKER_SERVER_LOAD_PROTECTION_ENABLED": "false",
+            },
         )
         ports = {"25333/tcp": 25333, "12345/tcp": 12345}
         container = docker_wrapper.run_until_log(
@@ -49,4 +56,9 @@
         )
         assert container is not None
         yield
+        container_logs = container.logs()
+        logger.info(
+            "Finished integration tests run, Container logs: %s",
+            container_logs.decode("utf-8"),
+        )
         docker_wrapper.remove_container()
diff --git a/tests/testing/docker_wrapper.py b/tests/testing/docker_wrapper.py
index 8f1a9fb..ce8ba0c 100644
--- a/tests/testing/docker_wrapper.py
+++ b/tests/testing/docker_wrapper.py
@@ -18,12 +18,15 @@
 """Wrap docker commands for easier create docker container."""
 from __future__ import annotations
 
+import logging
 import time
 
 import docker
 from docker.errors import ImageNotFound
 from docker.models.containers import Container
 
+logger = logging.getLogger(__name__)
+
 
 class DockerWrapper:
     """Wrap docker commands for easier create docker container.
@@ -72,7 +75,7 @@
         log_byte = str.encode(log)
         container = self.run(*args, **kwargs)
 
-        timeout_threshold = 10 * 60
+        timeout_threshold = 5 * 60
         start_time = time.time()
         while time.time() <= start_time + timeout_threshold:
             if log_byte in container.logs(tail=1000):
@@ -80,6 +83,14 @@
             time.sleep(2)
         # Stop container and raise error when reach timeout threshold but do not appear specific log output
         else:
+            container_log = container.logs()
+            logger.error(
+                "Cannot find specific log `%s` in %d seconds, the whole log as below",
+                log,
+                timeout_threshold,
+            )
+            logger.error(container_log.decode("utf-8"))
+
             container.remove(force=True)
             raise RuntimeError(
                 "Can not capture specific log `%s` in %d seconds, remove container.",