diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ea39355327ada560864a747e3bb9ae933dd03216..469548ba0bc8139e012efd1de3ae00299228f24a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -11,6 +11,12 @@ stages:
     # it appears this is necessary whenever there is a never rule
     - when: on_success
 
+.install_npm_dependencies:
+  before_script:
+    - cd assets
+    - npm config set -- '//code.usgs.gov/api/v4/packages/npm/:_authToken' "${CI_JOB_TOKEN}"
+    - npm install
+
 python_unit_test:
   extends: .base_rules
   image: public.ecr.aws/bitnami/python:3.8
@@ -53,12 +59,12 @@ python_lint:
         - "wdfn-server/waterdata/**/*.py"
 
 javascript_test:
-  extends: .base_rules
+  extends:
+    - .base_rules
+    - .install_npm_dependencies
   image: public.ecr.aws/bitnami/node:16
   stage: test
   script:
-    - cd assets
-    - npm install
     - npm run test
   artifacts:
     reports:
@@ -77,12 +83,12 @@ javascript_test:
       when: on_success
 
 static_asset_lint:
-  extends: .base_rules
+  extends:
+    - .base_rules
+    - .install_npm_dependencies
   image: public.ecr.aws/bitnami/node:16
   stage: test
   script:
-    - cd assets
-    - npm install
     - npm run lint
   rules:
     - if: $CI_PIPELINE_SOURCE == "merge_request_event"