code: def test_training_step_with_output_path_as_join(
      sagemaker_session,
      role,
      tf_full_version,
      tf_full_py_version,
      pipeline_name,
      region_name,
  ):
      input_path = sagemaker_session.upload_data(
          path=os.path.join(DATA_DIR, "xgboost_abalone", "abalone"),
          key_prefix="integ-test-data/xgboost_abalone/abalone",
      )
      inputs = {"train": TrainingInput(s3_data=input_path)}
  
      instance_count = ParameterInteger(
          name="InstanceCount", default_value=1
      )
      instance_type = ParameterString(
          name="InstanceType", default_value="ml.m5.xlarge"
      )
      entry_point1 = "dummy1"
      entry_point2 = "dummy2"
      src_base_dir = os.path.join(
          DATA_DIR, "xgboost_abalone/estimator_source_code"
      )
      source_dir1 = sagemaker_session.upload_data(
          path=os.path.join(
              src_base_dir, "estimator_source_code_dummy1.tar.gz"
          ),
          key_prefix="integ-test-data/estimator/training",
      )
      source_dir2 = sagemaker_session.upload_data(
          path=os.path.join(
              src_base_dir, "estimator_source_code_dummy2.tar.gz"
          ),
          key_prefix="integ-test-data/estimator/training",
      )
      entry_point_param = ParameterString(name="EntryPoint")
      source_dir_param = ParameterString(name="SourceDir")
      output_path = Join(
          on="/",
          values=[
              "s3:/",
              f"{sagemaker_session.default_bucket()}",
              f"{pipeline_name}Train",
          ],
      )
      image_uri = image_uris.retrieve(
          framework="xgboost",
          region=sagemaker_session.boto_session.region_name,
          version="1.0-1",
          py_version="py3",
          instance_type="ml.m5.xlarge",
      )
      estimator = Estimator(
          image_uri=image_uri,
          role=role,
          instance_count=instance_count,
          instance_type=instance_type,
          sagemaker_session=sagemaker_session,
          output_path=output_path,
          source_dir=source_dir_param,
          entry_point=entry_point_param,
          # TODO: remove base_job_name once we merge
          # https://github.com/aws/sagemaker-python-sdk/pull/3158/files
          base_job_name="TestJob",
      )
      estimator.set_hyperparameters(
          objective="reg:linear",
          num_round=50,
          max_depth=5,
          eta=0.2,
          gamma=4,
          min_child_weight=6,
          subsample=0.7,
      )
      step_train = TrainingStep(
          name="MyTrain",
          estimator=estimator,
          inputs=inputs,
      )
      pipeline = Pipeline(
          name=pipeline_name,
          parameters=[
              instance_count,
              instance_type,
              source_dir_param,
              entry_point_param,
          ],
          steps=[step_train],
          sagemaker_session=sagemaker_session,
      )
  
      try:
          pipeline.create(role)
          # execution1
          _start_and_verify_execution_with_retry(
              pipeline=pipeline,
              parameters={
                  "EntryPoint": entry_point1,
                  "SourceDir": source_dir1,
              },
          )
          # execution2 updates parameters to different values
          _start_and_verify_execution_with_retry(
              pipeline=pipeline,
              parameters={
                  "EntryPoint": entry_point2,
                  "SourceDir": source_dir2,
              },
          )
      finally:
          try:
              pipeline.delete()
          except Exception as error:
              logging.error(error)
  
imports: from __future__ import absolute_import
  import os
  import uuid
  import logging
  import pytest
  from tests.integ.sagemaker.workflow.helpers import wait_pipeline_execution
  from sagemaker import TrainingInput, get_execution_role, utils, image_uris
  from sagemaker.debugger import DebuggerHookConfig, Rule, rule_configs
  from sagemaker.estimator import Estimator
  from sagemaker.pytorch.estimator import PyTorch
  from sagemaker.tensorflow import TensorFlow
  from sagemaker.utils import sagemaker_timestamp
  from sagemaker.workflow.functions import Join
  from sagemaker.workflow.parameters import ParameterInteger, ParameterString
  from sagemaker.workflow.pipeline import Pipeline
  from sagemaker.workflow.steps import TrainingStep
  from tests.integ.retry import retries
  from tests.integ import DATA_DIR
label_desc: Use image node_id 5 for calling a global function with example usage: test_training_step_with_output_path_as_join(sagemaker_session, role, tf_full_version, tf_full_py_version, pipeline_name, region_name) without return types