diff --git a/TESTING.rst b/TESTING.rst
index 311654b9ee3..c5a4d69f0be 100644
--- a/TESTING.rst
+++ b/TESTING.rst
@@ -405,7 +405,7 @@ Running Tests
 -------------
 
 Before submitting a patch for review you should always ensure all tests pass; a
-tox run is triggered by the jenkins gate executed on gerrit for each patch
+tox run is triggered by the zuul jobs executed on gerrit for each patch
 pushed for review.
 
 Neutron, like other OpenStack projects, uses `tox`_ for managing the virtual
diff --git a/doc/source/contributor/contribute.rst b/doc/source/contributor/contribute.rst
index 0c0ef9a15ae..d1ddb60a56c 100644
--- a/doc/source/contributor/contribute.rst
+++ b/doc/source/contributor/contribute.rst
@@ -132,7 +132,7 @@ quickly their code can fall out of sync with the rapidly changing Neutron core
 code base.
 
 * You should run unit tests in your own external library (e.g. on
-  opendev.org where Jenkins setup is for free).
+  opendev.org where Zuul setup is for free).
 
 * Your third-party CI should validate third-party integration with Neutron via
   functional testing. The third-party CI is a communication mechanism. The
@@ -268,10 +268,8 @@ flexibility when dealing with DevStack based dev/test deployments.
 One final consideration is worth making for third-party CI setups: if `Devstack
 Gate <https://opendev.org/openstack/devstack-gate>`_ is used,
 it does provide hook functions that can be executed at specific times of the
-devstack-gate-wrap script run.  For example, the `Neutron Functional job
-<https://opendev.org/openstack/project-config/tree/jenkins/jobs/neutron.yaml>`_
-uses them. For more details see `devstack-vm-gate-wrap.sh
-<https://opendev.org/openstack/devstack-gate/tree/devstack-vm-gate-wrap.sh>`_.
+devstack-gate-wrap script run. For more details see `devstack-vm-gate-wrap.sh
+<https://opendev.org/openstack/devstack-gate/src/devstack-vm-gate-wrap.sh>`_.
 
 
 Documentation
@@ -319,7 +317,7 @@ be the bare minimum you have to complete in order to get you off the ground.
   validate your patches when posted to Gerrit. For instance, one thing you
   would need to do is to define an entry point for your plugin or driver in
   your own setup.cfg similarly as to how it is done in the `setup.cfg for ODL
-  <https://opendev.org/openstack/networking-odl/tree/setup.cfg#n31>`_.
+  <https://opendev.org/openstack/networking-odl/src/tag/19.0.0/setup.cfg#L41>`_.
 * Define an entry point for your plugin or driver in setup.cfg
 * Create third-party CI account: if you do not already have one, follow
   instructions for `third-party CI
diff --git a/doc/source/contributor/internals/api_layer.rst b/doc/source/contributor/internals/api_layer.rst
index fb8423b3627..d4c08ee4201 100644
--- a/doc/source/contributor/internals/api_layer.rst
+++ b/doc/source/contributor/internals/api_layer.rst
@@ -33,14 +33,14 @@ Server Gateway Interface (WSGI) - defined in `PEP 333 <http://legacy.python.org/
 Startup
 -------
 
-Neutron's WSGI server is started from the `server module <http://opendev.org/openstack/neutron/tree/neutron/server/__init__.py>`_
+Neutron's WSGI server is started from the `server module <http://opendev.org/openstack/neutron/src/neutron/server/__init__.py>`_
 and the entry point `serve_wsgi` is called to build an instance of the
 `NeutronApiService`_, which is then returned to the server module,
 which spawns a `Eventlet`_ `GreenPool`_ that will run the WSGI
 application and respond to requests from clients.
 
 
-.. _NeutronApiService: http://opendev.org/openstack/neutron/tree/neutron/service.py
+.. _NeutronApiService: http://opendev.org/openstack/neutron/src/neutron/service.py
 
 .. _Eventlet: http://eventlet.net/
 
@@ -62,11 +62,11 @@ Neutron, which contains several methods that map Neutron resources (such as
 Ports, Networks, Subnets) to URLs, and the controller for each resource.
 
 
-.. _config.py: http://opendev.org/openstack/neutron/tree/neutron/common/config.py
+.. _config.py: http://opendev.org/openstack/neutron/src/neutron/common/config.py
 
-.. _api-paste.ini: http://opendev.org/openstack/neutron/tree/etc/api-paste.ini
+.. _api-paste.ini: http://opendev.org/openstack/neutron/src/etc/api-paste.ini
 
-.. _APIRouter: http://opendev.org/openstack/neutron/tree/neutron/api/v2/router.py
+.. _APIRouter: http://opendev.org/openstack/neutron/src/neutron/api/v2/router.py
 
 .. _Paste: http://pythonpaste.org/
 
diff --git a/doc/source/contributor/internals/objects_usage.rst b/doc/source/contributor/internals/objects_usage.rst
index 915f4db0e56..7a02aa52fa5 100644
--- a/doc/source/contributor/internals/objects_usage.rst
+++ b/doc/source/contributor/internals/objects_usage.rst
@@ -683,13 +683,13 @@ The :code:`convert_filters` method is available in
 
 References
 ----------
-.. [#] https://opendev.org/openstack/neutron/tree/neutron/objects/base.py?h=stable/ocata#n258
-.. [#] https://opendev.org/openstack/neutron/tree/neutron/db/standard_attr.py?h=stable/ocata
-.. [#] https://opendev.org/openstack/neutron/tree/neutron/objects/base.py?h=stable/ocata#n516
-.. [#] https://opendev.org/openstack/neutron/tree/neutron/objects/base.py?h=stable/ocata#n542
+.. [#] https://opendev.org/openstack/neutron/src/tag/ocata-eol/neutron/objects/base.py#L258
+.. [#] https://opendev.org/openstack/neutron/src/tag/ocata-eol/neutron/db/standard_attr.py
+.. [#] https://opendev.org/openstack/neutron/src/tag/ocata-eol/neutron/objects/base.py#L516
+.. [#] https://opendev.org/openstack/neutron/src/tag/ocata-eol/neutron/objects/base.py#L542
 .. [#] https://docs.openstack.org/neutron/latest/contributor/internals/db_layer.html#the-standard-attribute-table
-.. [#] https://opendev.org/openstack/neutron/tree/neutron/objects/rbac_db.py?h=stable/ocata#n291
+.. [#] https://opendev.org/openstack/neutron/src/tag/ocata-eol/neutron/objects/rbac_db.py#L291
 .. [#] https://access.redhat.com/support/policy/updates/openstack/platform/
 .. [#] https://www.suse.com/releasenotes/x86_64/SUSE-OPENSTACK-CLOUD/8/#Upgrade
 .. [#] https://www.ubuntu.com/about/release-cycle
-.. [#] https://opendev.org/openstack/neutron-lib/tree/neutron_lib/objects/utils.py
+.. [#] https://opendev.org/openstack/neutron-lib/src/neutron_lib/objects/utils.py
diff --git a/doc/source/contributor/internals/policy.rst b/doc/source/contributor/internals/policy.rst
index 22e6fbeb063..cfbe9ef9d06 100644
--- a/doc/source/contributor/internals/policy.rst
+++ b/doc/source/contributor/internals/policy.rst
@@ -399,19 +399,19 @@ References
 .. [#] `Oslo policy developer <https://docs.openstack.org/oslo.policy/latest/>`_
 .. [#] API controller item_ method
 
-.. _item: http://opendev.org/openstack/neutron/tree/neutron/api/v2/base.py?id=2015.1.1#n282
+.. _item: http://opendev.org/openstack/neutron/src/tag/2015.1.1/neutron/api/v2/base.py#L282
 
 .. [#] Policy engine's build_match_rule_ method
 
-.. _build_match_rule: http://opendev.org/openstack/neutron/tree/neutron/policy.py?id=2015.1.1#n187
+.. _build_match_rule: http://opendev.org/openstack/neutron/src/tag/2015.1.1/neutron/policy.py#L187
 
 .. [#] exclude_attributes_by_policy_ method
 
-.. _exclude_attributes_by_policy: http://opendev.org/openstack/neutron/tree/neutron/api/v2/base.py?id=2015.1.1#n132
+.. _exclude_attributes_by_policy: http://opendev.org/openstack/neutron/src/tag/2015.1.1/neutron/api/v2/base.py#L132
 
 .. [#] Policy reset_ in neutron.api.v2.router
 
-.. _reset: http://opendev.org/openstack/neutron/tree/neutron/api/v2/router.py?id=2015.1.1#n122
+.. _reset: http://opendev.org/openstack/neutron/src/tag/2015.1.1/neutron/api/v2/router.py#L122
 
 .. [#] https://github.com/openstack/neutron/blob/051b6b40f3921b9db4f152a54f402c402cbf138c/neutron/pecan_wsgi/hooks/policy_enforcement.py#L173
 .. [#] https://github.com/openstack/neutron/blob/051b6b40f3921b9db4f152a54f402c402cbf138c/neutron/pecan_wsgi/hooks/policy_enforcement.py#L143
diff --git a/doc/source/contributor/internals/provisioning_blocks.rst b/doc/source/contributor/internals/provisioning_blocks.rst
index 83c829e00df..08ad0b2e0b0 100644
--- a/doc/source/contributor/internals/provisioning_blocks.rst
+++ b/doc/source/contributor/internals/provisioning_blocks.rst
@@ -34,7 +34,7 @@ provisioning by multiple asynchronous entities before they are ready to
 be used so managing the transition to the ACTIVE status becomes more
 complex. To handle these cases, Neutron has `the provisioning_blocks
 module
-<http://opendev.org/openstack/neutron/tree/neutron/db/provisioning_blocks.py>`_
+<http://opendev.org/openstack/neutron/src/neutron/db/provisioning_blocks.py>`_
 to track the entities that are still provisioning a resource.
 
 The main example of this is with ML2, the L2 agents and the DHCP agents.
diff --git a/doc/source/contributor/internals/quota.rst b/doc/source/contributor/internals/quota.rst
index c964a004b37..d39f76f8add 100644
--- a/doc/source/contributor/internals/quota.rst
+++ b/doc/source/contributor/internals/quota.rst
@@ -389,10 +389,10 @@ Please be aware of the following limitations of the quota enforcement engine:
 References
 ----------
 
-.. [1] Subnet allocation extension: http://opendev.org/openstack/neutron/tree/neutron/extensions/subnetallocation.py
-.. [2] DB Quota driver class: http://opendev.org/openstack/neutron/tree/neutron/db/quota/driver.py#n30
-.. [3] Quota API extension controller: http://opendev.org/openstack/neutron/tree/neutron/extensions/quotasv2.py#n40
-.. [4] Neutron resource attribute map: http://opendev.org/openstack/neutron/tree/neutron/api/v2/attributes.py#n639
+.. [1] Subnet allocation extension: http://opendev.org/openstack/neutron/src/neutron/extensions/subnetallocation.py
+.. [2] DB Quota driver class: http://opendev.org/openstack/neutron/src/neutron/db/quota/driver.py#L30
+.. [3] Quota API extension controller: https://opendev.org/openstack/neutron/src/tag/19.0.0/neutron/extensions/quotasv2.py#L56
+.. [4] Neutron resource attribute map: https://opendev.org/openstack/neutron-lib/src/tag/2.17.0/neutron_lib/api/attributes.py#L299
 .. [5] Quota limit exceeded: https://bugs.launchpad.net/neutron/+bug/1862050/
-.. [6] Base controller class: http://opendev.org/openstack/neutron/tree/neutron/api/v2/base.py#n50
+.. [6] Base controller class: https://opendev.org/openstack/neutron/src/tag/19.0.0/neutron/api/v2/base.py#L44
 .. [7] http://lists.openstack.org/pipermail/openstack-dev/2015-February/057534.html
diff --git a/doc/source/contributor/internals/security_group_api.rst b/doc/source/contributor/internals/security_group_api.rst
index c0b1f264cc2..6e7d929a760 100644
--- a/doc/source/contributor/internals/security_group_api.rst
+++ b/doc/source/contributor/internals/security_group_api.rst
@@ -33,7 +33,7 @@ API Extension
 The API extension is the 'front' end portion of the code, which handles defining a `REST-ful API`_, which is used by projects.
 
 
-.. _`REST-ful API`: https://opendev.org/openstack/neutron/tree/neutron/extensions/securitygroup.py
+.. _`REST-ful API`: https://opendev.org/openstack/neutron/src/neutron/extensions/securitygroup.py
 
 
 Database API
@@ -41,7 +41,7 @@ Database API
 
 The Security Group API extension adds a number of `methods to the database layer`_ of Neutron
 
-.. _`methods to the database layer`: https://opendev.org/openstack/neutron/tree/neutron/db/securitygroups_db.py
+.. _`methods to the database layer`: https://opendev.org/openstack/neutron/src/neutron/db/securitygroups_db.py
 
 Agent RPC
 ---------
@@ -50,12 +50,12 @@ This portion of the code handles processing requests from projects, after they h
 running on the compute nodes, and modifying the IPTables rules on each hypervisor.
 
 
-* `Plugin RPC classes <https://opendev.org/openstack/neutron/tree/neutron/db/securitygroups_rpc_base.py>`_
+* `Plugin RPC classes <https://opendev.org/openstack/neutron/src/neutron/db/securitygroups_rpc_base.py>`_
 
-  * `SecurityGroupServerRpcMixin <https://opendev.org/openstack/neutron/tree/neutron/db/securitygroups_rpc_base.py>`_ - defines the RPC API that the plugin uses to communicate with the agents running on the compute nodes
+  * `SecurityGroupServerRpcMixin <https://opendev.org/openstack/neutron/src/neutron/db/securitygroups_rpc_base.py>`_ - defines the RPC API that the plugin uses to communicate with the agents running on the compute nodes
   * SecurityGroupServerRpcMixin  -  Defines the API methods used to fetch data from the database, in order to return responses to agents via the RPC API
 
-* `Agent RPC classes <https://opendev.org/openstack/neutron/tree/neutron/api/rpc/handlers/securitygroups_rpc.py>`_
+* `Agent RPC classes <https://opendev.org/openstack/neutron/src/neutron/api/rpc/handlers/securitygroups_rpc.py>`_
 
   * The SecurityGroupServerRpcApi defines the API methods that can be called by agents, back to the plugin that runs on the Neutron controller
   * The SecurityGroupAgentRpcCallbackMixin defines methods that a plugin uses to call back to an agent after performing an action called by an agent.
diff --git a/doc/source/contributor/internals/services_and_agents.rst b/doc/source/contributor/internals/services_and_agents.rst
index 39697ec10ff..bd0da5ebf03 100644
--- a/doc/source/contributor/internals/services_and_agents.rst
+++ b/doc/source/contributor/internals/services_and_agents.rst
@@ -67,7 +67,7 @@ eventlet.monkey_patch() directly but instead maintain its entry point main()
 function under neutron/cmd/eventlet/... If that is the case, the standard
 Python library will be automatically patched for the service on entry point
 import (monkey patching is done inside `python package file
-<http://opendev.org/openstack/neutron/tree/neutron/cmd/eventlet/__init__.py>`_).
+<http://opendev.org/openstack/neutron/src/neutron/cmd/eventlet/__init__.py>`_).
 
 Note: an entry point 'main()' function may just be an indirection to a real
 callable located elsewhere, as is done for reference services such as DHCP, L3
diff --git a/doc/source/contributor/policies/blueprints.rst b/doc/source/contributor/policies/blueprints.rst
index d1ccf5b3247..ec95bbdcf9e 100644
--- a/doc/source/contributor/policies/blueprints.rst
+++ b/doc/source/contributor/policies/blueprints.rst
@@ -16,7 +16,7 @@ assign these into milestones or move them to the backlog for selection into
 a future release.
 
 Please note that we use a `template
-<http://opendev.org/openstack/neutron-specs/tree/specs/template.rst>`_
+<http://opendev.org/openstack/neutron-specs/src/specs/template.rst>`_
 for spec submissions. It is not required to fill out all sections in the
 template. Review of the spec may require filling in information left out by
 the submitter.
diff --git a/doc/source/contributor/policies/code-reviews.rst b/doc/source/contributor/policies/code-reviews.rst
index c470131328e..320f4c2d9d4 100644
--- a/doc/source/contributor/policies/code-reviews.rst
+++ b/doc/source/contributor/policies/code-reviews.rst
@@ -57,7 +57,7 @@ In addition to that, the following rules are to follow:
         the right to discontinue support for unresponsive platforms.
 
   #. The change should also include a new `sanity check
-     <https://opendev.org/openstack/neutron/tree/neutron/cmd/sanity/checks.py>`_
+     <https://opendev.org/openstack/neutron/src/neutron/cmd/sanity/checks.py>`_
      that would help interested parties to identify their platform limitation
      in timely manner.
 
diff --git a/doc/source/contributor/policies/gate-failure-triage.rst b/doc/source/contributor/policies/gate-failure-triage.rst
index f9b2cf5ff38..c3e53d8463f 100644
--- a/doc/source/contributor/policies/gate-failure-triage.rst
+++ b/doc/source/contributor/policies/gate-failure-triage.rst
@@ -60,7 +60,7 @@ Troubleshooting Tempest jobs
 
 Troubleshooting functional/fullstack job
 ----------------------------------------
-1. Go to the job link provided by Jenkins CI.
+1. Go to the job link provided by Zuul CI.
 2. Look at logs/testr_results.html.gz for which particular test failed.
 3. More logs from a particular test are stored at
    logs/dsvm-functional-logs/<path_of_the_test> (or dsvm-fullstack-logs
diff --git a/doc/source/contributor/policies/gerrit-recheck.rst b/doc/source/contributor/policies/gerrit-recheck.rst
index 5d418e3e94c..0d49078154d 100644
--- a/doc/source/contributor/policies/gerrit-recheck.rst
+++ b/doc/source/contributor/policies/gerrit-recheck.rst
@@ -2,7 +2,7 @@ Recheck Failed CI jobs in Neutron
 =================================
 
 This document provides guidelines on what to do in case your patch fails one of
-the Jenkins CI jobs. In order to discover potential bugs hidden in the code or
+the Zuul CI jobs. In order to discover potential bugs hidden in the code or
 tests themselves, it's very helpful to check failed scenarios to investigate
 the cause of the failure. Sometimes the failure will be caused by the patch
 being tested, while other times the failure can be caused by a previously
diff --git a/doc/source/contributor/policies/thirdparty-ci.rst b/doc/source/contributor/policies/thirdparty-ci.rst
index b4b8c1d979a..22845dfa874 100644
--- a/doc/source/contributor/policies/thirdparty-ci.rst
+++ b/doc/source/contributor/policies/thirdparty-ci.rst
@@ -38,7 +38,7 @@ What Tests To Run
 Network API tests (git link).
 Network scenario tests (The test_network_* tests here).
 Any tests written specifically for your setup.
-http://opendev.org/openstack/tempest/tree/tempest/api/network
+http://opendev.org/openstack/tempest/src/tempest/api/network
 
 Run with the test filter: 'network'. This will include all neutron specific
 tests as well as any other tests that are tagged as requiring networking. An
diff --git a/doc/source/contributor/stadium/guidelines.rst b/doc/source/contributor/stadium/guidelines.rst
index 13563fcdc2f..9cb12d6c0f5 100644
--- a/doc/source/contributor/stadium/guidelines.rst
+++ b/doc/source/contributor/stadium/guidelines.rst
@@ -152,7 +152,7 @@ To release a sub-project, follow the following steps:
   other Neutron projects. You can skip this step if you don't have a version in
   setup.cfg.
 * A sub-project owner `proposes
-  <https://opendev.org/openstack/releases/tree/README.rst>`_ a patch
+  <https://opendev.org/openstack/releases/src/README.rst>`_ a patch
   to openstack/releases repository with the intended git hash. `The Neutron
   release liaison <https://wiki.openstack.org/wiki/CrossProjectLiaisons#Release_management>`_
   should be added in Gerrit to the list of reviewers for the patch.
@@ -210,7 +210,7 @@ To make a branch end of life, follow the following steps:
 * A sub-project owner should request the infrastructure team to delete
   the branch by sending an email to the infrastructure mailing list, not by
   bothering the infrastructure team on IRC.
-* A sub-project owner should tweak jenkins jobs in project-config if any.
+* A sub-project owner should tweak zuul jobs in project-config if any.
 
 References
 ~~~~~~~~~~