diff --git a/.gitignore b/.gitignore
index a2fca4cf8d00da516ad32563e638a5f70b5c6aa4..d0385ff310f94b54ff428d669740a3c7066a4f6b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
 archives/
 DS-TEST-RESULTS/
 ci-scripts/mysql-complete.cmd
-ci-scripts/temp/ci-generate_amf_conf.sh
+ci-scripts/temp/ci-*.sh
diff --git a/ci-scripts/Jenkinsfile-GitLab-Docker b/ci-scripts/Jenkinsfile-GitLab-Docker
index 39253ab9fb701674ce0405a5b4c83c92c48c294f..c7a61183f9dd2ef30cdee5e435d1b4762153e39f 100644
--- a/ci-scripts/Jenkinsfile-GitLab-Docker
+++ b/ci-scripts/Jenkinsfile-GitLab-Docker
@@ -176,6 +176,8 @@ pipeline {
               myShCmd('python3 ./ci-scripts/dsTestDeployTools.py --action=DeployMySqlServer', new_host_flag, new_host_user, new_host)
               // Deploy and configure AMF
               myShCmd('python3 ./ci-scripts/dsTestDeployTools.py --action=DeployAMF --tag=' + amfTag, new_host_flag, new_host_user, new_host)
+              // Deploy and configure SMF
+              myShCmd('python3 ./ci-scripts/dsTestDeployTools.py --action=DeploySMF --tag=' + smfTag, new_host_flag, new_host_user, new_host)
             }
           }
         }
diff --git a/ci-scripts/dsTestDeployTools.py b/ci-scripts/dsTestDeployTools.py
index e97d62ce8eded6e2f0f4472808659ce412390696..dbc13f424ece778cf44782a4a628461c6b406104 100644
--- a/ci-scripts/dsTestDeployTools.py
+++ b/ci-scripts/dsTestDeployTools.py
@@ -32,6 +32,7 @@ CICD_PUBLIC_NETWORK_RANGE='192.168.61.192/26'
 CICD_MYSQL_PUBLIC_ADDR='192.168.61.194'
 CICD_AMF_PUBLIC_ADDR='192.168.61.195'
 CICD_SMF_PUBLIC_ADDR='192.168.61.196'
+CICD_UPF_PUBLIC_ADDR='192.168.61.197'
 CICD_DUMMY_SMF_PUBLIC_ADDR='192.168.61.200'
 
 class deployForDsTester():
@@ -105,9 +106,27 @@ class deployForDsTester():
         subprocess_run_w_echo('docker cp ci-scripts/temp/ci-generate_amf_conf.sh cicd-oai-amf:/openair-amf/generate_amf_conf.sh')
         subprocess_run_w_echo('docker exec -it cicd-oai-amf /bin/bash -c "chmod 755 generate_amf_conf.sh && ./generate_amf_conf.sh" > archives/amf_config.log')
 
+    def deploySMF(self):
+        res = ''
+        # first check if tag exists
+        try:
+            res = subprocess.check_output('docker image inspect oai-smf:' + self.tag, shell=True, universal_newlines=True)
+        except:
+            sys.exit(-1)
+
+        # check if there is an entrypoint
+        entrypoint = re.search('entrypoint', str(res))
+        if entrypoint is not None:
+            print('not supported yet')
+        else:
+            subprocess_run_w_echo('docker run --privileged --name cicd-oai-smf --network cicd-oai-public-net --ip ' + CICD_SMF_PUBLIC_ADDR + ' -d oai-smf:' + self.tag + ' /bin/bash -c "sleep infinity"')
+        subprocess_run_w_echo('sed -e "s@CI_N4_IF_NAME@eth0@" -e "s@CI_SBI_IF_NAME@eth0@" -e "s@CI_AMF_IP_ADDR@' + CICD_AMF_PUBLIC_ADDR + '@" -e "s@CI_UPF_IP_ADDR@' + CICD_UPF_PUBLIC_ADDR + '@" ci-scripts/temp/generate_smf_conf.sh > ci-scripts/temp/ci-generate_smf_conf.sh')
+        subprocess_run_w_echo('docker cp ci-scripts/temp/ci-generate_smf_conf.sh cicd-oai-smf:/openair-smf/generate_smf_conf.sh')
+        subprocess_run_w_echo('docker exec -it cicd-oai-smf /bin/bash -c "chmod 755 generate_smf_conf.sh && ./generate_smf_conf.sh" > archives/smf_config.log')
+
     def removeAllContainers(self):
         try:
-            subprocess_run_w_echo('docker rm -f cicd-mysql-svr')
+            subprocess_run_w_echo('docker rm -f cicd-mysql-svr cicd-oai-amf cicd-oai-smf')
         except:
             pass
 
@@ -157,6 +176,7 @@ while len(argvs) > 1:
            action != 'RemoveNetworks' and \
            action != 'DeployMySqlServer' and \
            action != 'DeployAMF' and \
+           action != 'DeploySMF' and \
            action != 'RemoveAllContainers':
             print('Unsupported Action => ' + action)
             Usage()
@@ -178,6 +198,12 @@ elif DFDT.action == 'DeployAMF':
         Usage()
         sys.exit(-1)
     DFDT.deployAMF()
+elif DFDT.action == 'DeploySMF':
+    if DFDT.tag == '':
+        print('Missing OAI-SMF image tag')
+        Usage()
+        sys.exit(-1)
+    DFDT.deploySMF()
 elif DFDT.action == 'RemoveAllContainers':
     DFDT.removeAllContainers()
 
diff --git a/ci-scripts/temp/generate_smf_conf.sh b/ci-scripts/temp/generate_smf_conf.sh
new file mode 100755
index 0000000000000000000000000000000000000000..140d7f1bd2be0f2f56a5b414163da87dc321b08a
--- /dev/null
+++ b/ci-scripts/temp/generate_smf_conf.sh
@@ -0,0 +1,34 @@
+# prompt has been removed for easier Ctrl+C Ctrl+V
+# please update the following information according to your configuration
+
+INSTANCE=1
+PREFIX='/openair-smf/etc'
+
+declare -A SMF_CONF
+
+SMF_CONF[@INSTANCE@]=$INSTANCE
+SMF_CONF[@PID_DIRECTORY@]='/var/run'
+
+SMF_CONF[@SMF_INTERFACE_NAME_FOR_N4@]='CI_N4_IF_NAME'
+SMF_CONF[@SMF_INTERFACE_NAME_FOR_SBI@]='CI_SBI_IF_NAME'
+
+SMF_CONF[@SMF_INTERFACE_PORT_FOR_SBI@]='80'
+SMF_CONF[@SMF_INTERFACE_HTTP2_PORT_FOR_SBI@]='9090'
+
+SMF_CONF[@UDM_IPV4_ADDRESS@]='127.0.0.1'
+SMF_CONF[@UDM_PORT@]='80'
+
+SMF_CONF[@AMF_IPV4_ADDRESS@]='CI_AMF_IP_ADDR'
+SMF_CONF[@AMF_PORT@]='80'
+
+SMF_CONF[@UPF_IPV4_ADDRESS@]='CI_UPF_IP_ADDR'
+
+SMF_CONF[@DEFAULT_DNS_IPV4_ADDRESS@]='8.8.8.8'
+SMF_CONF[@DEFAULT_DNS_SEC_IPV4_ADDRESS@]='4.4.4.4'
+
+for K in "${!SMF_CONF[@]}"; do 
+  egrep -lRZ "$K" $PREFIX/smf.conf | xargs -0 -l sed -i -e "s|$K|${SMF_CONF[$K]}|g"
+  ret=$?;[[ ret -ne 0 ]] && echo "Tried to replace $K with ${SMF_CONF[$K]}"
+done
+
+echo "SMF Configuration Successful"