diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 33ee561903507115863d189ed578ee4f1b19c641..ef8cea4676b2c611cc98b42d3c2361ba0d631660 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,7 +1,7 @@
 # GitLab CI in conjunction with GitLab Runner can use Docker Engine to test and build any application.
 # Docker, when used with GitLab CI, runs each job in a separate and isolated container using the predefined image that is set up in .gitlab-ci.yml.
 # In this case we use the latest python docker image to build and test this project.
-image: nexus.engageska-portugal.pt/ska-docker/ska-python-buildenv:latest
+image: $SKA_K8S_TOOLS_DEPLOY_IMAGE
 
 # cache is used to specify a list of files and directories which should be cached between jobs. You can only use paths that are within the project workspace.
 # If cache is defined outside the scope of jobs, it means it is set globally and all jobs will use that definition
@@ -24,23 +24,11 @@ stages:
 # You can specify an unlimited number of jobs which are defined as top-level elements with an arbitrary name and always
 #  have to contain at least the script clause.
 
-build wheel:
-  stage: build
-  tags:
-    - k8srunner
-  script:
-    - python3 setup.py sdist bdist_wheel
-  artifacts:
-    paths:
-      - ./dist/
-
 # The test job produces a coverage report and the unittest output (see setup.cfg), and
 #  the coverage xml report is moved to the reports directory while the html output is persisted for use by the pages
 #  job. TODO: possibly a candidate for refactor / renaming later on.
 test:
   stage: test
-#  tags:
-#   - k8srunner
   script:
    - pipenv run python3 setup.py test
    - mv coverage.xml ./build/reports/code-coverage.xml
@@ -65,7 +53,7 @@ list_dependencies:
       - public
 
 linting:
-  image: nexus.engageska-portugal.pt/ska-docker/ska-python-buildenv:latest
+  image: $SKA_K8S_TOOLS_DEPLOY_IMAGE
   tags:
     - k8srunner
   stage: linting
@@ -76,28 +64,6 @@ linting:
     paths:
       - ./build
 
-publish to nexus:
-  stage: publish
-  tags:
-    - k8srunner
-  variables:
-    TWINE_USERNAME: $TWINE_USERNAME
-    TWINE_PASSWORD: $TWINE_PASSWORD
-  script:
-    # Note: katversion will include the git hash in the version for non-tagged commits, but need git
-    # Check metadata requirements
-    - scripts/validate-metadata.sh
-    - python3 -m pip install twine
-    - twine upload --repository-url $PYPI_REPOSITORY_URL dist/*
-  only:
-    refs:
-      - tags
-    variables:
-      # Confirm tag message exists
-      - $CI_COMMIT_MESSAGE =~ /^.+$/
-      # Confirm semantic versioning of tag
-      - $CI_COMMIT_TAG =~ /^((([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)$/
-
 pages:
   stage: deploy
   tags:
@@ -115,18 +81,8 @@ pages:
       - public
     expire_in: 30 days
 
-create ci metrics:
-  stage: .post
-  image: nexus.engageska-portugal.pt/ska-docker/ska-python-buildenv:latest
-  when: always
-  tags:
-    - k8srunner
-  script:
-    # Gitlab CI badges creation: START
-    - apt-get -y update
-    - apt-get install -y curl --no-install-recommends
-    - curl -s https://gitlab.com/ska-telescope/ci-metrics-utilities/raw/master/scripts/ci-badges-func.sh | sh
-    # Gitlab CI badges creation: END
-  artifacts:
-    paths:
-      - ./build
+include:
+- project: 'ska-telescope/templates-repository'
+  file: 'gitlab-ci/includes/build_wheel.yml'
+- project: 'ska-telescope/templates-repository'
+  file: 'gitlab-ci/includes/post_step.yml'
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index eb752e0afca1a17aa71ab9b45676eb13c6223b6a..1089d2d25b26d98080f9b5042a960c2f0c0eee70 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -5,6 +5,11 @@ Change Log
 All notable changes to this project will be documented in this file.
 This project adheres to `Semantic Versioning <http://semver.org/>`_.
 
+v4.0.1
+******
+
+No change, moving artefacts to a new repository https://artefact.skao.int/.
+
 v0.4.0
 ******
 
diff --git a/Pipfile b/Pipfile
index 13f0fada642d4fdfcbdcff3111e21898b538cfa1..f76d8e615a5c3b8e3f3722e4e6cc1d7cf4a3fc53 100644
--- a/Pipfile
+++ b/Pipfile
@@ -1,12 +1,7 @@
 [[source]]
-url = "https://nexus.engageska-portugal.pt/repository/pypi-proxy/simple"
+url = "https://artefact.skao.int/repository/pypi-all/simple"
 verify_ssl = true
-name = "nexus-proxy"
-
-[[source]]
-url = "https://nexus.engageska-portugal.pt/repository/pypi/simple"
-verify_ssl = true
-name = "nexus-hosted"
+name = "skao"
 
 [packages]
 docutils = "*"
diff --git a/tests/test_configuration.py b/tests/test_configuration.py
index 8c4e3826516c1b2b45760a0cc72d7592cd08f135..6cb8a8b8664df221eb4a75dba2bdb70dff6ad3e1 100644
--- a/tests/test_configuration.py
+++ b/tests/test_configuration.py
@@ -18,7 +18,7 @@ def reset_logging():
     yield
     manager = logging.root.manager
     manager.disabled = logging.NOTSET
-    for logger in list(manager.loggerDict.values()) + [logging.root]:
+    for logger in list(manager.loggerDict.values()) + [logging.root]:  # pylint: disable=no-member
         if isinstance(logger, logging.Logger):
             logger.setLevel(logging.NOTSET)
             logger.propagate = True