Triggered by Gerrit: https://gerrit.opensdn.io/c/opensdn-io/tf-controller/+/3080 Obtained pipelines/main.groovy from git https://github.com/opensdn-io/tf-jenkins.git [Pipeline] Start of Pipeline [Pipeline] timestamps [Pipeline] { [Pipeline] timeout [2026-10-30T01:46:46.116Z] Timeout set to expire in 8 hr 0 min [Pipeline] { [Pipeline] node [2026-10-30T01:46:46.173Z] Running on slave-openstack-gz1_1 in /home/jenkins/workspace/pipeline-post-merge [Pipeline] { [Pipeline] stage [Pipeline] { (init) [Pipeline] cleanWs [2026-10-30T01:46:46.276Z] [WS-CLEANUP] Deleting project workspace... [2026-10-30T01:46:46.276Z] [WS-CLEANUP] Deferred wipeout is disabled by the job configuration... [2026-10-30T01:46:46.360Z] [WS-CLEANUP] done [Pipeline] checkout [2026-10-30T01:46:46.403Z] The recommended git tool is: git [2026-10-30T01:46:46.407Z] No credentials specified [2026-10-30T01:46:46.409Z] Cloning the remote Git repository [2026-10-30T01:46:46.442Z] Cloning repository https://github.com/opensdn-io/tf-jenkins.git [2026-10-30T01:46:46.442Z] > git init /home/jenkins/workspace/pipeline-post-merge/src/opensdn-io/tf-jenkins # timeout=10 [2026-10-30T01:46:46.447Z] Fetching upstream changes from https://github.com/opensdn-io/tf-jenkins.git [2026-10-30T01:46:46.447Z] > git --version # timeout=10 [2026-10-30T01:46:46.449Z] > git --version # 'git version 2.25.1' [2026-10-30T01:46:46.449Z] > git fetch --tags --force --progress -- https://github.com/opensdn-io/tf-jenkins.git +refs/heads/*:refs/remotes/origin/* # timeout=10 [2026-10-30T01:46:47.718Z] Avoid second fetch [2026-10-30T01:46:47.722Z] Checking out Revision d0c52da635d06c50a3dbc331927c823e00983714 (refs/remotes/origin/master) [2026-10-30T01:46:47.770Z] Commit message: "Merge "upgrade default kolla-ansible version to 2025.1"" [2026-10-30T01:46:47.707Z] > git config remote.origin.url https://github.com/opensdn-io/tf-jenkins.git # timeout=10 [2026-10-30T01:46:47.710Z] > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 [2026-10-30T01:46:47.719Z] > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 [2026-10-30T01:46:47.723Z] > git config core.sparsecheckout # timeout=10 [2026-10-30T01:46:47.727Z] > git checkout -f d0c52da635d06c50a3dbc331927c823e00983714 # timeout=10 [2026-10-30T01:46:47.772Z] > git rev-list --no-walk d0c52da635d06c50a3dbc331927c823e00983714 # 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-10-30T01:46:48.079Z] INFO: resolved gerrit URL is https://gerrit.opensdn.io/ [Pipeline] sh [2026-10-30T01:46:48.375Z] + /home/jenkins/workspace/pipeline-post-merge/src/opensdn-io/tf-jenkins/infra/gerrit/resolve_patchsets.py --gerrit https://gerrit.opensdn.io/ --review Ib685dcc2348e61315305d48ca712ee153b46ada8 --branch master --changed_files --output /home/jenkins/workspace/pipeline-post-merge/patchsets-info.json [Pipeline] archiveArtifacts [2026-10-30T01:46:48.413Z] 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-10-30T01:46:50.182Z] Logs URL: http://nexus.gz1.opensdn.io:8082/jenkins_logs/gerrit/80/3080/1/post-merge_1001 [Pipeline] echo [2026-10-30T01:46:50.217Z] terminate_runs_by_review_number: start [Pipeline] echo [2026-10-30T01:46:54.038Z] terminate_runs_by_review_number: terminated builds = [] [Pipeline] sh [Pipeline] echo [2026-10-30T01:46:54.366Z] Pipeline to run: post-merge [Pipeline] sh [Pipeline] sh [Pipeline] archiveArtifacts [2026-10-30T01:46:54.982Z] 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-10-30T01:46:55.989Z] WARNING: project opensdn-io/tf-controller doesn't define pipeline post-merge [Pipeline] echo [2026-10-30T01:46:56.009Z] Streams from config: [:] [Pipeline] echo [2026-10-30T01:46:56.027Z] Jobs from config: [:] [Pipeline] echo [2026-10-30T01:46:56.044Z] Post Jobs from config: [:] [Pipeline] echo [2026-10-30T01:46:56.079Z] Notify gerrit verified=null, submit=false, msg= [2026-10-30T01:46:56.079Z] TF CI Build Started (post-merge) https://jenkins.opensdn.io/job/pipeline-post-merge/1001/ [Pipeline] withCredentials [2026-10-30T01:46:56.104Z] Masking supported pattern matches of $GERRIT_API_PASSWORD [Pipeline] { [Pipeline] echo [2026-10-30T01:46:56.171Z] INFO: resolved gerrit URL is https://gerrit.opensdn.io/ [Pipeline] sh [2026-10-30T01:46:56.465Z] + /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 Ib685dcc2348e61315305d48ca712ee153b46ada8 --patchset 1 --branch master --message 'TF CI Build Started (post-merge) https://jenkins.opensdn.io/job/pipeline-post-merge/1001/' [2026-10-30T01:46:56.465Z] DEBUG: Change: {'id': 'opensdn-io%2Ftf-controller~master~Ib685dcc2348e61315305d48ca712ee153b46ada8', 'project': 'opensdn-io/tf-controller', 'branch': 'master', 'attention_set': {}, 'removed_from_attention_set': {'1000022': {'account': {'_account_id': 1000022}, 'last_update': '2026-10-30 01:46:30.000000000', 'reason': 'Change was submitted'}}, 'hashtags': [], 'change_id': 'Ib685dcc2348e61315305d48ca712ee153b46ada8', 'subject': 'refresh replicated paths on export route target change', 'status': 'MERGED', 'created': '2026-09-16 07:42:42.000000000', 'updated': '2026-10-30 01:46:30.000000000', 'submitted': '2026-10-30 01:46:30.000000000', 'submitter': {'_account_id': 1000001}, 'insertions': 103, 'deletions': 5, 'total_comment_count': 1, 'unresolved_comment_count': 0, 'has_review_started': True, 'submission_id': '3080', 'meta_rev_id': 'c02d2d7c5250126d5612ef445a95e89c93a7ca22', '_number': 3080, 'owner': {'_account_id': 1000022}, 'labels': {'Code-Review': {'all': [{'value': 2, 'date': '2026-10-29 07:55:57.000000000', 'permitted_voting_range': {'min': 2, 'max': 2}, '_account_id': 1000002}, {'value': 0, '_account_id': 1000001}, {'value': 1, 'date': '2026-10-20 16:54:07.000000000', 'permitted_voting_range': {'min': 1, 'max': 1}, '_account_id': 1000015}, {'value': 1, 'date': '2026-10-25 19:20:19.000000000', 'permitted_voting_range': {'min': 1, 'max': 1}, '_account_id': 1000012}], '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': 1000002}, {'value': 2, 'date': '2026-10-30 01:46:18.000000000', 'permitted_voting_range': {'min': 2, 'max': 2}, '_account_id': 1000001}, {'value': 0, '_account_id': 1000015}, {'value': 0, '_account_id': 1000012}], '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': [], 'reviewers': {'REVIEWER': [{'_account_id': 1000001}, {'_account_id': 1000002}, {'_account_id': 1000012}, {'_account_id': 1000015}]}, 'pending_reviewers': {}, 'current_revision': 'cdd602ea7f4c6e5e9cf5426cab857ac34745e9e2', 'revisions': {'cdd602ea7f4c6e5e9cf5426cab857ac34745e9e2': {'kind': 'REWORK', '_number': 1, 'created': '2026-09-16 07:42:42.000000000', 'uploader': {'_account_id': 1000022}, 'ref': 'refs/changes/80/3080/1', 'fetch': {'ssh': {'url': 'ssh://tf-gerrit@gerrit.opensdn.io:29418/opensdn-io/tf-controller', 'ref': 'refs/changes/80/3080/1'}, 'anonymous http': {'url': 'https://gerrit.opensdn.io/opensdn-io/tf-controller', 'ref': 'refs/changes/80/3080/1'}, 'http': {'url': 'https://tf-gerrit@gerrit.opensdn.io/a/opensdn-io/tf-controller', 'ref': 'refs/changes/80/3080/1'}}, 'commit': {'parents': [{'commit': 'adada969c079d899182f4e84a6e543626bbed40a', 'subject': 'ksync: Extend unit tests'}], 'author': {'name': 'Moo_Pratin', 'email': 'boombe40@hotmail.com', 'date': '2026-09-16 07:42:20.000000000', 'tz': 420}, 'committer': {'name': 'Moo_Pratin', 'email': 'boombe40@hotmail.com', 'date': '2026-09-16 07:42:38.000000000', 'tz': 420}, 'subject': 'refresh replicated paths on export route target change', 'message': "refresh replicated paths on export route target change\n\nRoutePathReplicator::RouteListener skips replication work for a route\nthat has not changed for 30 minutes and already carries an RtReplicated\nDBState. In that mode it reduces the destination set to the tables that\nwere not in the previous set, so a table present both before and after\nthe walk is skipped entirely: RouteReplicate() is never called for it\nand its secondary path keeps the BgpAttr it was given the first time.\n\nThe destination set is not a proxy for the attributes of the replicated\npath. A VRF's export route target list is appended to the attributes of\nevery path replicated out of it, so changing that list changes the\nattributes without necessarily changing the destination set. The VPN\ntable is in the destination set of every export target of a VRF - it\njoins each RtGroup the VRF exports into - so for a route in a VRF, the\none table whose copy is advertised to every peer and every DC gateway\nis precisely the one that is never refreshed.\n\nBoth directions are wrong. A route target removed from a VRF stays on\nthe VPN copy of its routes, and those routes are then leaked into\nwhichever instance is allocated that route target next. A route target\nadded to a VRF never reaches the VPN copy, so prefixes that existed\nbefore the change are not advertised with the new target and the\nconnection the operator just configured does not work for them.\n\nAdding or removing an export target does call Join()/Leave() and walk\nthe table, but the walk re-enters the skip path for every route older\nthan the threshold: Route::last_update_at_ is only advanced by\nRoute::Sort(), which a config driven walk does not reach. Nothing later\nrewrites the stale copy short of a route event or a control node\nrestart.\n\nKey the optimization on something that tracks the attributes instead of\nthe destination set: a generation counter on TableState, bumped whenever\nan export target is added to or removed from the table, recorded in\nRtReplicated at each replication and compared on the next one. The\noptimized path is taken only when the two match, so a walk caused by an\nexport target change replicates in full while walks caused by import\nside churn in other tables - the case the optimization was written for -\ndo not bump the counter and stay optimized. The counter is read from the\ndb::DBTable task and written from the config tasks, so it is atomic, and\nit is read once per RouteListener call so that a change racing with the\nwalk is not recorded as already applied.\n\nAdds a unit test covering both directions: an export target added to,\nand then removed from, an instance whose route is older than the\noptimization threshold, checking the route targets on the path\nreplicated into the VPN table after each change.\n\nGithub Issue: https://github.com/OpenSDN-io/community/issues/143\n\nChange-Id: Ib685dcc2348e61315305d48ca712ee153b46ada8\nSigned-off-by: Moo_Pratin \n"}}}, 'requirements': [], 'submit_records': [{'rule_name': 'gerrit~DefaultSubmitRule', 'status': 'CLOSED', 'labels': [{'label': 'Code-Review', 'status': 'OK', 'applied_by': {'_account_id': 1000002}}, {'label': 'Verified', 'status': 'OK', 'applied_by': {'_account_id': 1000001}}]}]} [2026-10-30T01:46:56.465Z] DEBUG: push message data: {'labels': {}, 'message': 'TF CI Build Started (post-merge) https://jenkins.opensdn.io/job/pipeline-post-merge/1001/'} [Pipeline] } [Pipeline] // withCredentials [Pipeline] echo [2026-10-30T01:46:56.556Z] Notify discord for new job is started [Pipeline] echo [2026-10-30T01:46:56.605Z] INFO: resolved gerrit URL is https://gerrit.opensdn.io/ [Pipeline] echo [2026-10-30T01:46:56.639Z] Notify discord msg= [2026-10-30T01:46:56.639Z] The review was merged. [2026-10-30T01:46:56.639Z] [refresh replicated paths on export route target ch](https://gerrit.opensdn.io/c/opensdn-io/tf-controller/+/3080) [Pipeline] withCredentials [2026-10-30T01:46:56.673Z] Masking supported pattern matches of $DISCORD_WEBHOOK_URL [Pipeline] { [Pipeline] writeFile [Pipeline] sh [2026-10-30T01:46:57.036Z] % Total % Received % Xferd Average Speed Time Time Time Current [2026-10-30T01:46:57.036Z] Dload Upload Total Spent Left Speed [2026-10-30T01:46:57.036Z] [2026-10-30T01:46:57.293Z] 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 [2026-10-30T01:46:57.293Z] 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 [2026-10-30T01:46:57.293Z] 100 184 0 0 100 184 0 528 --:--:-- --:--:-- --:--:-- 527 [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // stage [Pipeline] echo [2026-10-30T01:46:57.458Z] Jobs results: [:] [Pipeline] stage [Pipeline] { (gerrit vote) [Pipeline] echo [2026-10-30T01:46:57.530Z] Notify gerrit verified=null, submit=false, msg= [2026-10-30T01:46:57.530Z] TF CI Build Succeeded (post-merge) in 0h 0m 7s [2026-10-30T01:46:57.530Z] [2026-10-30T01:46:57.530Z] Succeeded checks: [Pipeline] withCredentials [2026-10-30T01:46:57.559Z] Masking supported pattern matches of $GERRIT_API_PASSWORD [Pipeline] { [Pipeline] echo [2026-10-30T01:46:57.626Z] INFO: resolved gerrit URL is https://gerrit.opensdn.io/ [Pipeline] sh [2026-10-30T01:46:57.918Z] + /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 Ib685dcc2348e61315305d48ca712ee153b46ada8 --patchset 1 --branch master --message 'TF CI Build Succeeded (post-merge) in 0h 0m 7s [2026-10-30T01:46:57.918Z] [2026-10-30T01:46:57.918Z] Succeeded checks:' [2026-10-30T01:46:57.918Z] DEBUG: Change: {'id': 'opensdn-io%2Ftf-controller~master~Ib685dcc2348e61315305d48ca712ee153b46ada8', 'project': 'opensdn-io/tf-controller', 'branch': 'master', 'attention_set': {}, 'removed_from_attention_set': {'1000022': {'account': {'_account_id': 1000022}, 'last_update': '2026-10-30 01:46:30.000000000', 'reason': 'Change was submitted'}}, 'hashtags': [], 'change_id': 'Ib685dcc2348e61315305d48ca712ee153b46ada8', 'subject': 'refresh replicated paths on export route target change', 'status': 'MERGED', 'created': '2026-09-16 07:42:42.000000000', 'updated': '2026-10-30 01:46:56.000000000', 'submitted': '2026-10-30 01:46:30.000000000', 'submitter': {'_account_id': 1000001}, 'insertions': 103, 'deletions': 5, 'total_comment_count': 1, 'unresolved_comment_count': 0, 'has_review_started': True, 'submission_id': '3080', 'meta_rev_id': 'f83db49bee4cdb609b6a3209a1237d07d0ce03a0', '_number': 3080, 'owner': {'_account_id': 1000022}, 'labels': {'Code-Review': {'all': [{'value': 2, 'date': '2026-10-29 07:55:57.000000000', 'permitted_voting_range': {'min': 2, 'max': 2}, '_account_id': 1000002}, {'value': 0, '_account_id': 1000001}, {'value': 1, 'date': '2026-10-20 16:54:07.000000000', 'permitted_voting_range': {'min': 1, 'max': 1}, '_account_id': 1000015}, {'value': 1, 'date': '2026-10-25 19:20:19.000000000', 'permitted_voting_range': {'min': 1, 'max': 1}, '_account_id': 1000012}], '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': 1000002}, {'value': 2, 'date': '2026-10-30 01:46:18.000000000', 'permitted_voting_range': {'min': 2, 'max': 2}, '_account_id': 1000001}, {'value': 0, '_account_id': 1000015}, {'value': 0, '_account_id': 1000012}], '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': [], 'reviewers': {'REVIEWER': [{'_account_id': 1000001}, {'_account_id': 1000002}, {'_account_id': 1000012}, {'_account_id': 1000015}]}, 'pending_reviewers': {}, 'current_revision': 'cdd602ea7f4c6e5e9cf5426cab857ac34745e9e2', 'revisions': {'cdd602ea7f4c6e5e9cf5426cab857ac34745e9e2': {'kind': 'REWORK', '_number': 1, 'created': '2026-09-16 07:42:42.000000000', 'uploader': {'_account_id': 1000022}, 'ref': 'refs/changes/80/3080/1', 'fetch': {'ssh': {'url': 'ssh://tf-gerrit@gerrit.opensdn.io:29418/opensdn-io/tf-controller', 'ref': 'refs/changes/80/3080/1'}, 'anonymous http': {'url': 'https://gerrit.opensdn.io/opensdn-io/tf-controller', 'ref': 'refs/changes/80/3080/1'}, 'http': {'url': 'https://tf-gerrit@gerrit.opensdn.io/a/opensdn-io/tf-controller', 'ref': 'refs/changes/80/3080/1'}}, 'commit': {'parents': [{'commit': 'adada969c079d899182f4e84a6e543626bbed40a', 'subject': 'ksync: Extend unit tests'}], 'author': {'name': 'Moo_Pratin', 'email': 'boombe40@hotmail.com', 'date': '2026-09-16 07:42:20.000000000', 'tz': 420}, 'committer': {'name': 'Moo_Pratin', 'email': 'boombe40@hotmail.com', 'date': '2026-09-16 07:42:38.000000000', 'tz': 420}, 'subject': 'refresh replicated paths on export route target change', 'message': "refresh replicated paths on export route target change\n\nRoutePathReplicator::RouteListener skips replication work for a route\nthat has not changed for 30 minutes and already carries an RtReplicated\nDBState. In that mode it reduces the destination set to the tables that\nwere not in the previous set, so a table present both before and after\nthe walk is skipped entirely: RouteReplicate() is never called for it\nand its secondary path keeps the BgpAttr it was given the first time.\n\nThe destination set is not a proxy for the attributes of the replicated\npath. A VRF's export route target list is appended to the attributes of\nevery path replicated out of it, so changing that list changes the\nattributes without necessarily changing the destination set. The VPN\ntable is in the destination set of every export target of a VRF - it\njoins each RtGroup the VRF exports into - so for a route in a VRF, the\none table whose copy is advertised to every peer and every DC gateway\nis precisely the one that is never refreshed.\n\nBoth directions are wrong. A route target removed from a VRF stays on\nthe VPN copy of its routes, and those routes are then leaked into\nwhichever instance is allocated that route target next. A route target\nadded to a VRF never reaches the VPN copy, so prefixes that existed\nbefore the change are not advertised with the new target and the\nconnection the operator just configured does not work for them.\n\nAdding or removing an export target does call Join()/Leave() and walk\nthe table, but the walk re-enters the skip path for every route older\nthan the threshold: Route::last_update_at_ is only advanced by\nRoute::Sort(), which a config driven walk does not reach. Nothing later\nrewrites the stale copy short of a route event or a control node\nrestart.\n\nKey the optimization on something that tracks the attributes instead of\nthe destination set: a generation counter on TableState, bumped whenever\nan export target is added to or removed from the table, recorded in\nRtReplicated at each replication and compared on the next one. The\noptimized path is taken only when the two match, so a walk caused by an\nexport target change replicates in full while walks caused by import\nside churn in other tables - the case the optimization was written for -\ndo not bump the counter and stay optimized. The counter is read from the\ndb::DBTable task and written from the config tasks, so it is atomic, and\nit is read once per RouteListener call so that a change racing with the\nwalk is not recorded as already applied.\n\nAdds a unit test covering both directions: an export target added to,\nand then removed from, an instance whose route is older than the\noptimization threshold, checking the route targets on the path\nreplicated into the VPN table after each change.\n\nGithub Issue: https://github.com/OpenSDN-io/community/issues/143\n\nChange-Id: Ib685dcc2348e61315305d48ca712ee153b46ada8\nSigned-off-by: Moo_Pratin \n"}}}, 'requirements': [], 'submit_records': [{'rule_name': 'gerrit~DefaultSubmitRule', 'status': 'CLOSED', 'labels': [{'label': 'Code-Review', 'status': 'OK', 'applied_by': {'_account_id': 1000002}}, {'label': 'Verified', 'status': 'OK', 'applied_by': {'_account_id': 1000001}}]}]} [2026-10-30T01:46:57.919Z] 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-10-30T01:46:58.315Z] Archiving artifacts [Pipeline] withCredentials [2026-10-30T01:46:58.378Z] Masking supported pattern matches of $LOGS_HOST_SSH_KEY [Pipeline] { [Pipeline] writeFile [Pipeline] sh [2026-10-30T01:46:58.740Z] Warning: Permanently added 'nexus.gz1.opensdn.io,212.233.90.199' (ECDSA) to the list of known hosts. [2026-10-30T01:46:59.301Z] 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-10-30T01:47:00.078Z] URL of console output = https://jenkins.opensdn.io/job/pipeline-post-merge/1001/consoleText [Pipeline] withCredentials [2026-10-30T01:47:00.123Z] Masking supported pattern matches of $LOGS_HOST_SSH_KEY [Pipeline] { [Pipeline] sh