Triggered by Gerrit: https://gerrit.opensdn.io/c/opensdn-io/tf-controller/+/3036 Obtained pipelines/main.groovy from git https://github.com/opensdn-io/tf-jenkins.git [Pipeline] Start of Pipeline [Pipeline] timestamps [Pipeline] { [Pipeline] timeout [2026-08-20T16:44:25.632Z] Timeout set to expire in 8 hr 0 min [Pipeline] { [Pipeline] node [2026-08-20T16:44:25.677Z] Running on slave-openstack-gz1_1 in /home/jenkins/workspace/pipeline-post-merge [Pipeline] { [Pipeline] stage [Pipeline] { (init) [Pipeline] cleanWs [2026-08-20T16:44:25.753Z] [WS-CLEANUP] Deleting project workspace... [2026-08-20T16:44:25.753Z] [WS-CLEANUP] Deferred wipeout is disabled by the job configuration... [2026-08-20T16:44:25.850Z] [WS-CLEANUP] done [Pipeline] checkout [2026-08-20T16:44:25.880Z] The recommended git tool is: git [2026-08-20T16:44:25.885Z] No credentials specified [2026-08-20T16:44:25.887Z] Cloning the remote Git repository [2026-08-20T16:44:25.889Z] Cloning repository https://github.com/opensdn-io/tf-jenkins.git [2026-08-20T16:44:25.889Z] > git init /home/jenkins/workspace/pipeline-post-merge/src/opensdn-io/tf-jenkins # timeout=10 [2026-08-20T16:44:25.894Z] Fetching upstream changes from https://github.com/opensdn-io/tf-jenkins.git [2026-08-20T16:44:25.894Z] > git --version # timeout=10 [2026-08-20T16:44:25.897Z] > git --version # 'git version 2.25.1' [2026-08-20T16:44:25.897Z] > git fetch --tags --force --progress -- https://github.com/opensdn-io/tf-jenkins.git +refs/heads/*:refs/remotes/origin/* # timeout=10 [2026-08-20T16:44:27.198Z] Avoid second fetch [2026-08-20T16:44:27.203Z] Checking out Revision 9c86492d4a22712d2c3b4ab27040cd93556012b4 (refs/remotes/origin/master) [2026-08-20T16:44:27.262Z] Commit message: "Merge "install cloud-init from site mirror"" [2026-08-20T16:44:27.190Z] > git config remote.origin.url https://github.com/opensdn-io/tf-jenkins.git # timeout=10 [2026-08-20T16:44:27.192Z] > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 [2026-08-20T16:44:27.200Z] > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 [2026-08-20T16:44:27.205Z] > git config core.sparsecheckout # timeout=10 [2026-08-20T16:44:27.207Z] > git checkout -f 9c86492d4a22712d2c3b4ab27040cd93556012b4 # timeout=10 [2026-08-20T16:44:27.276Z] > git rev-list --no-walk 9c86492d4a22712d2c3b4ab27040cd93556012b4 # timeout=10 [Pipeline] load [Pipeline] { (/home/jenkins/workspace/pipeline-post-merge/src/opensdn-io/tf-jenkins/pipelines/utils/gerrit.groovy) [Pipeline] } [Pipeline] // load [Pipeline] echo [2026-08-20T16:44:27.641Z] INFO: resolved gerrit URL is https://gerrit.opensdn.io/ [Pipeline] sh [2026-08-20T16:44:27.940Z] + /home/jenkins/workspace/pipeline-post-merge/src/opensdn-io/tf-jenkins/infra/gerrit/resolve_patchsets.py --gerrit https://gerrit.opensdn.io/ --review Ie5f870bf286247031ebf235606c5ed8c27ec841f --branch master --changed_files --output /home/jenkins/workspace/pipeline-post-merge/patchsets-info.json [Pipeline] archiveArtifacts [2026-08-20T16:44:28.053Z] Archiving artifacts [Pipeline] sh [Pipeline] load [Pipeline] { (/home/jenkins/workspace/pipeline-post-merge/src/opensdn-io/tf-jenkins/pipelines/utils/gerrit.groovy) [Pipeline] } [Pipeline] // load [Pipeline] load [Pipeline] { (/home/jenkins/workspace/pipeline-post-merge/src/opensdn-io/tf-jenkins/pipelines/constants.groovy) [Pipeline] } [Pipeline] // load [Pipeline] load [Pipeline] { (/home/jenkins/workspace/pipeline-post-merge/src/opensdn-io/tf-jenkins/pipelines/utils/config.groovy) [Pipeline] } [Pipeline] // load [Pipeline] load [Pipeline] { (/home/jenkins/workspace/pipeline-post-merge/src/opensdn-io/tf-jenkins/pipelines/utils/jobs.groovy) [Pipeline] } [Pipeline] // load [Pipeline] load [Pipeline] { (/home/jenkins/workspace/pipeline-post-merge/src/opensdn-io/tf-jenkins/pipelines/utils/gate.groovy) [Pipeline] } [Pipeline] // load [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (Pre-build) [Pipeline] echo [2026-08-20T16:44:29.982Z] Logs URL: http://nexus.gz1.opensdn.io:8082/jenkins_logs/gerrit/36/3036/2/post-merge_946 [Pipeline] echo [2026-08-20T16:44:30.012Z] terminate_runs_by_review_number: start [Pipeline] echo [2026-08-20T16:44:33.163Z] terminate_runs_by_review_number: terminated builds = [] [Pipeline] sh [Pipeline] echo [2026-08-20T16:44:33.504Z] Pipeline to run: post-merge [Pipeline] sh [Pipeline] sh [Pipeline] archiveArtifacts [2026-08-20T16:44:34.129Z] Archiving artifacts [Pipeline] readYaml [Pipeline] readYaml [Pipeline] readYaml [Pipeline] readYaml [Pipeline] readYaml [Pipeline] readYaml [Pipeline] readYaml [Pipeline] readYaml [Pipeline] readYaml [Pipeline] readYaml [Pipeline] readYaml [Pipeline] echo [2026-08-20T16:44:35.248Z] WARNING: project opensdn-io/tf-controller doesn't define pipeline post-merge [Pipeline] echo [2026-08-20T16:44:35.264Z] Streams from config: [:] [Pipeline] echo [2026-08-20T16:44:35.280Z] Jobs from config: [:] [Pipeline] echo [2026-08-20T16:44:35.296Z] Post Jobs from config: [:] [Pipeline] echo [2026-08-20T16:44:35.327Z] Notify gerrit verified=null, submit=false, msg= [2026-08-20T16:44:35.327Z] TF CI Build Started (post-merge) https://jenkins.opensdn.io/job/pipeline-post-merge/946/ [Pipeline] withCredentials [2026-08-20T16:44:35.350Z] Masking supported pattern matches of $GERRIT_API_PASSWORD [Pipeline] { [Pipeline] echo [2026-08-20T16:44:35.418Z] INFO: resolved gerrit URL is https://gerrit.opensdn.io/ [Pipeline] sh [2026-08-20T16:44:35.706Z] + /home/jenkins/workspace/pipeline-post-merge/src/opensdn-io/tf-jenkins/infra/gerrit/notify.py --gerrit https://gerrit.opensdn.io/ --user tf-gerrit --password **** --review Ie5f870bf286247031ebf235606c5ed8c27ec841f --patchset 2 --branch master --message 'TF CI Build Started (post-merge) https://jenkins.opensdn.io/job/pipeline-post-merge/946/' [2026-08-20T16:44:35.707Z] DEBUG: Change: {'id': 'opensdn-io%2Ftf-controller~master~Ie5f870bf286247031ebf235606c5ed8c27ec841f', 'project': 'opensdn-io/tf-controller', 'branch': 'master', 'topic': 'log-severity', 'attention_set': {}, 'removed_from_attention_set': {'1000003': {'account': {'_account_id': 1000003}, 'last_update': '2026-08-20 16:44:08.000000000', 'reason': 'Change was submitted'}, '1000001': {'account': {'_account_id': 1000001}, 'last_update': '2026-08-20 08:22:41.000000000', 'reason': 'removed on reply'}, '1000021': {'account': {'_account_id': 1000021}, 'last_update': '2026-08-20 16:44:08.000000000', 'reason': 'Change was submitted'}}, 'hashtags': [], 'change_id': 'Ie5f870bf286247031ebf235606c5ed8c27ec841f', 'subject': 'ST: IP next hop is not a service instance', 'status': 'MERGED', 'created': '2026-08-06 06:46:44.000000000', 'updated': '2026-08-20 16:44:08.000000000', 'submitted': '2026-08-20 16:44:08.000000000', 'submitter': {'_account_id': 1000001}, 'insertions': 114, 'deletions': 0, 'total_comment_count': 6, 'unresolved_comment_count': 0, 'has_review_started': True, 'submission_id': '3036-log-severity', 'meta_rev_id': 'ae3e450c617dc93fea7a4c047cf23b2c41e4a8eb', '_number': 3036, 'owner': {'_account_id': 1000021}, 'labels': {'Code-Review': {'all': [{'value': 2, 'date': '2026-08-20 08:22:32.000000000', 'permitted_voting_range': {'min': 2, 'max': 2}, '_account_id': 1000003}, {'value': 0, '_account_id': 1000001}], 'values': {'-2': 'This shall not be submitted', '-1': 'I would prefer this is not submitted as is', ' 0': 'No score', '+1': 'Looks good to me, but someone else must approve', '+2': 'Looks good to me, approved'}, 'description': '', 'default_value': 0}, 'Verified': {'all': [{'value': 0, '_account_id': 1000003}, {'value': 2, 'date': '2026-08-20 16:43:59.000000000', 'permitted_voting_range': {'min': 2, 'max': 2}, '_account_id': 1000001}], 'values': {'-2': 'Fails', '-1': 'Fails', ' 0': 'No score', '+1': 'Verified', '+2': 'Gating'}, 'description': '', 'default_value': 0}}, 'permitted_labels': {'Code-Review': [' 0', '+1', '+2'], 'Verified': ['+2']}, 'removable_labels': {}, 'removable_reviewers': [{'_account_id': 1000002}], 'reviewers': {'REVIEWER': [{'_account_id': 1000001}, {'_account_id': 1000003}], 'CC': [{'_account_id': 1000002}]}, 'pending_reviewers': {}, 'current_revision': '119d3f6738857355373c9342bb4164aafec63a78', 'revisions': {'119d3f6738857355373c9342bb4164aafec63a78': {'kind': 'NO_CODE_CHANGE', '_number': 2, 'created': '2026-08-20 08:22:24.000000000', 'uploader': {'_account_id': 1000003}, 'ref': 'refs/changes/36/3036/2', 'fetch': {'ssh': {'url': 'ssh://tf-gerrit@gerrit.opensdn.io:29418/opensdn-io/tf-controller', 'ref': 'refs/changes/36/3036/2'}, 'anonymous http': {'url': 'https://gerrit.opensdn.io/opensdn-io/tf-controller', 'ref': 'refs/changes/36/3036/2'}, 'http': {'url': 'https://tf-gerrit@gerrit.opensdn.io/a/opensdn-io/tf-controller', 'ref': 'refs/changes/36/3036/2'}}, 'commit': {'parents': [{'commit': '9112407ed0a26aaec3ee49b7513d267bf7e93597', 'subject': 'Switching to oneTBB: old includes removal'}], 'author': {'name': 'Charnsilp Chinprasert(Nipa)', 'email': 'justice.form@gmail.com', 'date': '2026-08-06 06:43:39.000000000', 'tz': 420}, 'committer': {'name': 'Andrey', 'email': 'andrey-mp@yandex.ru', 'date': '2026-08-20 08:22:24.000000000', 'tz': 0}, 'subject': 'ST: IP next hop is not a service instance', 'message': 'ST: IP next hop is not a service instance\n\nset_route_target_list() walks the virtual network\'s routes and hands\nevery next hop to _get_routing_instance_from_route(), which resolves a\nservice instance by fq_name and logs an error when the lookup misses:\n\n def _get_routing_instance_from_route(self, next_hop):\n si = ...get(\'service_instance\').get(next_hop)\n if si is None:\n self._logger.error("Cannot find service instance %s" % next_hop)\n\nA next hop of type ip-address is the ordinary case for a static route\nand is never a service instance, so every such route produces an ERROR\nnaming the address. On a production config node these read\n\n Cannot find service instance 10.10.195.254\n Cannot find service instance 100.70.0.3\n\nwhich is the operator\'s own gateway. Someone looking into why a route is\nnot working finds an ERROR naming it and reasonably concludes the route\nis broken. Nothing is wrong: the caller handles the None with continue,\nand the route is processed exactly as before.\n\nRouteType already carries next_hop_type, whose only other value is\nservice-instance, and the other two callers filter on it -\nroute_table.py checks `!= \'ip-address\'` and routing_instance.py checks\n`== "ip-address"`. This call site is the one that does not. Add the same\ncheck.\n\nThe guard goes at the call site rather than inside the helper on\npurpose. The helper\'s contract is "resolve a service-instance next hop";\na caller passing something else is the one in the wrong, and guarding\ninside would make it silently accept input it cannot handle. Demoting\nthe log to debug was also rejected - a genuinely missing service\ninstance is a real condition this message exists to report.\n\nTwo tests, one per direction, and both were checked against a mutation\nso neither is vacuous. The first drives set_route_target_list() by\nchanging the route-target list, because the loop returns early unless\nthat list actually changed - attaching the route table alone never\nreaches it. Without the fix it fails with\n\n MismatchError: [\'10.10.10.10\'] matches Contains(\'10.10.10.10\'):\n an ip-address next hop was passed to\n _get_routing_instance_from_route\n\nThe second asserts a service-instance next hop is still resolved, so\nthat the noisy log cannot later be silenced by skipping the lookup\naltogether. Replacing the guard with an unconditional continue fails it:\n\n MismatchError: \'default-domain:default-project:no-such-service-\n instance\' not in []: a service-instance next hop was not resolved\n\nExisting state: none. The defect only ever produced log lines - the\nroute was always processed correctly - so there is nothing stored to\nrepair and no db_manage step is needed.\n\nTested: tox -e pep8 passes; tox -e py39 gives 68 passed, 16 skipped,\n0 failed - two more than the 66 baseline, which are these tests.\n\nCloses-Bug: https://github.com/OpenSDN-io/community/issues/137\nChange-Id: Ie5f870bf286247031ebf235606c5ed8c27ec841f\nSigned-off-by: Charnsilp Chinprasert(Nipa) \n'}, 'description': 'Edit commit message'}}, 'requirements': [], 'submit_records': [{'rule_name': 'gerrit~DefaultSubmitRule', 'status': 'CLOSED', 'labels': [{'label': 'Code-Review', 'status': 'OK', 'applied_by': {'_account_id': 1000003}}, {'label': 'Verified', 'status': 'OK', 'applied_by': {'_account_id': 1000001}}]}]} [2026-08-20T16:44:35.707Z] DEBUG: push message data: {'labels': {}, 'message': 'TF CI Build Started (post-merge) https://jenkins.opensdn.io/job/pipeline-post-merge/946/'} [Pipeline] } [Pipeline] // withCredentials [Pipeline] echo [2026-08-20T16:44:35.783Z] Notify discord for new job is started [Pipeline] echo [2026-08-20T16:44:35.823Z] INFO: resolved gerrit URL is https://gerrit.opensdn.io/ [Pipeline] echo [2026-08-20T16:44:35.848Z] Notify discord msg= [2026-08-20T16:44:35.848Z] The review was merged. [2026-08-20T16:44:35.848Z] [ST: IP next hop is not a service instance](https://gerrit.opensdn.io/c/opensdn-io/tf-controller/+/3036) [Pipeline] withCredentials [2026-08-20T16:44:35.875Z] Masking supported pattern matches of $DISCORD_WEBHOOK_URL [Pipeline] { [Pipeline] writeFile [Pipeline] sh [2026-08-20T16:44:36.254Z] % Total % Received % Xferd Average Speed Time Time Time Current [2026-08-20T16:44:36.254Z] Dload Upload Total Spent Left Speed [2026-08-20T16:44:36.823Z] [2026-08-20T16:44:36.823Z] 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 [2026-08-20T16:44:36.823Z] 100 175 0 0 100 175 0 338 --:--:-- --:--:-- --:--:-- 338 [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // stage [Pipeline] echo [2026-08-20T16:44:36.955Z] Jobs results: [:] [Pipeline] stage [Pipeline] { (gerrit vote) [Pipeline] echo [2026-08-20T16:44:37.028Z] Notify gerrit verified=null, submit=false, msg= [2026-08-20T16:44:37.028Z] TF CI Build Succeeded (post-merge) in 0h 0m 7s [2026-08-20T16:44:37.028Z] [2026-08-20T16:44:37.028Z] Succeeded checks: [Pipeline] withCredentials [2026-08-20T16:44:37.053Z] Masking supported pattern matches of $GERRIT_API_PASSWORD [Pipeline] { [Pipeline] echo [2026-08-20T16:44:37.105Z] INFO: resolved gerrit URL is https://gerrit.opensdn.io/ [Pipeline] sh [2026-08-20T16:44:37.405Z] + /home/jenkins/workspace/pipeline-post-merge/src/opensdn-io/tf-jenkins/infra/gerrit/notify.py --gerrit https://gerrit.opensdn.io/ --user tf-gerrit --password **** --review Ie5f870bf286247031ebf235606c5ed8c27ec841f --patchset 2 --branch master --message 'TF CI Build Succeeded (post-merge) in 0h 0m 7s [2026-08-20T16:44:37.405Z] [2026-08-20T16:44:37.405Z] Succeeded checks:' [2026-08-20T16:44:37.406Z] DEBUG: Change: {'id': 'opensdn-io%2Ftf-controller~master~Ie5f870bf286247031ebf235606c5ed8c27ec841f', 'project': 'opensdn-io/tf-controller', 'branch': 'master', 'topic': 'log-severity', 'attention_set': {}, 'removed_from_attention_set': {'1000003': {'account': {'_account_id': 1000003}, 'last_update': '2026-08-20 16:44:08.000000000', 'reason': 'Change was submitted'}, '1000001': {'account': {'_account_id': 1000001}, 'last_update': '2026-08-20 08:22:41.000000000', 'reason': 'removed on reply'}, '1000021': {'account': {'_account_id': 1000021}, 'last_update': '2026-08-20 16:44:08.000000000', 'reason': 'Change was submitted'}}, 'hashtags': [], 'change_id': 'Ie5f870bf286247031ebf235606c5ed8c27ec841f', 'subject': 'ST: IP next hop is not a service instance', 'status': 'MERGED', 'created': '2026-08-06 06:46:44.000000000', 'updated': '2026-08-20 16:44:35.000000000', 'submitted': '2026-08-20 16:44:08.000000000', 'submitter': {'_account_id': 1000001}, 'insertions': 114, 'deletions': 0, 'total_comment_count': 6, 'unresolved_comment_count': 0, 'has_review_started': True, 'submission_id': '3036-log-severity', 'meta_rev_id': '434504fd7a9075d011f48aa7e7bdee63ce0fe90a', '_number': 3036, 'owner': {'_account_id': 1000021}, 'labels': {'Code-Review': {'all': [{'value': 2, 'date': '2026-08-20 08:22:32.000000000', 'permitted_voting_range': {'min': 2, 'max': 2}, '_account_id': 1000003}, {'value': 0, '_account_id': 1000001}], 'values': {'-2': 'This shall not be submitted', '-1': 'I would prefer this is not submitted as is', ' 0': 'No score', '+1': 'Looks good to me, but someone else must approve', '+2': 'Looks good to me, approved'}, 'description': '', 'default_value': 0}, 'Verified': {'all': [{'value': 0, '_account_id': 1000003}, {'value': 2, 'date': '2026-08-20 16:43:59.000000000', 'permitted_voting_range': {'min': 2, 'max': 2}, '_account_id': 1000001}], 'values': {'-2': 'Fails', '-1': 'Fails', ' 0': 'No score', '+1': 'Verified', '+2': 'Gating'}, 'description': '', 'default_value': 0}}, 'permitted_labels': {'Code-Review': [' 0', '+1', '+2'], 'Verified': ['+2']}, 'removable_labels': {}, 'removable_reviewers': [{'_account_id': 1000002}], 'reviewers': {'REVIEWER': [{'_account_id': 1000001}, {'_account_id': 1000003}], 'CC': [{'_account_id': 1000002}]}, 'pending_reviewers': {}, 'current_revision': '119d3f6738857355373c9342bb4164aafec63a78', 'revisions': {'119d3f6738857355373c9342bb4164aafec63a78': {'kind': 'NO_CODE_CHANGE', '_number': 2, 'created': '2026-08-20 08:22:24.000000000', 'uploader': {'_account_id': 1000003}, 'ref': 'refs/changes/36/3036/2', 'fetch': {'ssh': {'url': 'ssh://tf-gerrit@gerrit.opensdn.io:29418/opensdn-io/tf-controller', 'ref': 'refs/changes/36/3036/2'}, 'anonymous http': {'url': 'https://gerrit.opensdn.io/opensdn-io/tf-controller', 'ref': 'refs/changes/36/3036/2'}, 'http': {'url': 'https://tf-gerrit@gerrit.opensdn.io/a/opensdn-io/tf-controller', 'ref': 'refs/changes/36/3036/2'}}, 'commit': {'parents': [{'commit': '9112407ed0a26aaec3ee49b7513d267bf7e93597', 'subject': 'Switching to oneTBB: old includes removal'}], 'author': {'name': 'Charnsilp Chinprasert(Nipa)', 'email': 'justice.form@gmail.com', 'date': '2026-08-06 06:43:39.000000000', 'tz': 420}, 'committer': {'name': 'Andrey', 'email': 'andrey-mp@yandex.ru', 'date': '2026-08-20 08:22:24.000000000', 'tz': 0}, 'subject': 'ST: IP next hop is not a service instance', 'message': 'ST: IP next hop is not a service instance\n\nset_route_target_list() walks the virtual network\'s routes and hands\nevery next hop to _get_routing_instance_from_route(), which resolves a\nservice instance by fq_name and logs an error when the lookup misses:\n\n def _get_routing_instance_from_route(self, next_hop):\n si = ...get(\'service_instance\').get(next_hop)\n if si is None:\n self._logger.error("Cannot find service instance %s" % next_hop)\n\nA next hop of type ip-address is the ordinary case for a static route\nand is never a service instance, so every such route produces an ERROR\nnaming the address. On a production config node these read\n\n Cannot find service instance 10.10.195.254\n Cannot find service instance 100.70.0.3\n\nwhich is the operator\'s own gateway. Someone looking into why a route is\nnot working finds an ERROR naming it and reasonably concludes the route\nis broken. Nothing is wrong: the caller handles the None with continue,\nand the route is processed exactly as before.\n\nRouteType already carries next_hop_type, whose only other value is\nservice-instance, and the other two callers filter on it -\nroute_table.py checks `!= \'ip-address\'` and routing_instance.py checks\n`== "ip-address"`. This call site is the one that does not. Add the same\ncheck.\n\nThe guard goes at the call site rather than inside the helper on\npurpose. The helper\'s contract is "resolve a service-instance next hop";\na caller passing something else is the one in the wrong, and guarding\ninside would make it silently accept input it cannot handle. Demoting\nthe log to debug was also rejected - a genuinely missing service\ninstance is a real condition this message exists to report.\n\nTwo tests, one per direction, and both were checked against a mutation\nso neither is vacuous. The first drives set_route_target_list() by\nchanging the route-target list, because the loop returns early unless\nthat list actually changed - attaching the route table alone never\nreaches it. Without the fix it fails with\n\n MismatchError: [\'10.10.10.10\'] matches Contains(\'10.10.10.10\'):\n an ip-address next hop was passed to\n _get_routing_instance_from_route\n\nThe second asserts a service-instance next hop is still resolved, so\nthat the noisy log cannot later be silenced by skipping the lookup\naltogether. Replacing the guard with an unconditional continue fails it:\n\n MismatchError: \'default-domain:default-project:no-such-service-\n instance\' not in []: a service-instance next hop was not resolved\n\nExisting state: none. The defect only ever produced log lines - the\nroute was always processed correctly - so there is nothing stored to\nrepair and no db_manage step is needed.\n\nTested: tox -e pep8 passes; tox -e py39 gives 68 passed, 16 skipped,\n0 failed - two more than the 66 baseline, which are these tests.\n\nCloses-Bug: https://github.com/OpenSDN-io/community/issues/137\nChange-Id: Ie5f870bf286247031ebf235606c5ed8c27ec841f\nSigned-off-by: Charnsilp Chinprasert(Nipa) \n'}, 'description': 'Edit commit message'}}, 'requirements': [], 'submit_records': [{'rule_name': 'gerrit~DefaultSubmitRule', 'status': 'CLOSED', 'labels': [{'label': 'Code-Review', 'status': 'OK', 'applied_by': {'_account_id': 1000003}}, {'label': 'Verified', 'status': 'OK', 'applied_by': {'_account_id': 1000001}}]}]} [2026-08-20T16:44:37.406Z] DEBUG: push message data: {'labels': {}, 'message': 'TF CI Build Succeeded (post-merge) in 0h 0m 7s\n\nSucceeded checks:'} [Pipeline] } [Pipeline] // withCredentials [Pipeline] sh [Pipeline] archiveArtifacts [2026-08-20T16:44:38.094Z] Archiving artifacts [Pipeline] withCredentials [2026-08-20T16:44:38.174Z] Masking supported pattern matches of $LOGS_HOST_SSH_KEY [Pipeline] { [Pipeline] writeFile [Pipeline] sh [2026-08-20T16:44:38.524Z] Warning: Permanently added 'nexus.gz1.opensdn.io,212.233.90.199' (ECDSA) to the list of known hosts. [2026-08-20T16:44:39.897Z] Warning: Permanently added 'nexus.gz1.opensdn.io,212.233.90.199' (ECDSA) to the list of known hosts. [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // stage [Pipeline] echo [2026-08-20T16:44:40.663Z] URL of console output = https://jenkins.opensdn.io/job/pipeline-post-merge/946/consoleText [Pipeline] withCredentials [2026-08-20T16:44:40.690Z] Masking supported pattern matches of $LOGS_HOST_SSH_KEY [Pipeline] { [Pipeline] sh