diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..21c9c53ee7bc7f279ec13cbef800ca0981e531ed
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,68 @@
+# Define environment variables for all stages
+variables:
+  # Tell docker images where the host docker daemon is
+  # and how to talk to it
+  DOCKER_TLS_CERTDIR: ""
+  DOCKER_HOST: "tcp://docker:2375"
+  BUILDBUCKET_IMAGE: $CI_REGISTRY_IMAGE/buildbucket
+  GRIDDED_GLM_IMAGE: $CI_REGISTRY_IMAGE/gridded_glm
+
+stages:
+    - buildbucket_build
+    - gridded_glm_build
+    - gridded_glm_tester_build
+    - test
+    - release
+
+create the Gridded GLM buildbucket:
+  stage: buildbucket_build
+  image: docker:19.03.1
+  tags:
+    - docker
+  services:
+    - docker:19.03.1-dind
+  script:
+    - docker login --username $CI_REGISTRY_USER --password $CI_REGISTRY_PASSWORD $CI_REGISTRY
+    - docker build -f buildbucket/Dockerfile --tag $BUILDBUCKET_IMAGE:$CI_COMMIT_SHORT_SHA --cache-from $BUILDBUCKET_IMAGE:latest buildbucket/
+    - docker push $BUILDBUCKET_IMAGE:$CI_COMMIT_SHORT_SHA
+
+create the Gridded GLM package:
+  stage: gridded_glm_build
+  image: docker:19.03.1
+  tags:
+    - docker
+  services:
+    - docker:19.03.1-dind
+  script:
+    - docker login --username $CI_REGISTRY_USER --password $CI_REGISTRY_PASSWORD $CI_REGISTRY
+    # Creates the gridded GLM package
+    - docker run --rm -v "${PWD}":/dock -v $PWD:/work/cspp-geo-gridded-glm $BUILDBUCKET_IMAGE:$CI_COMMIT_SHORT_SHA ./package.sh $CI_COMMIT_SHORT_SHA
+    # Create a simple Docker image with the gridded GLM package included
+    # TODO: this should probably be its own stage?
+    - docker build . -f Dockerfile -t $GRIDDED_GLM_IMAGE:$CI_COMMIT_SHORT_SHA
+    - docker push $GRIDDED_GLM_IMAGE:$CI_COMMIT_SHORT_SHA
+# worry about this later; rsync isn't available in busybox. we probably need some refactoring to use a build image more directly & upload from there.
+#    # upload the package to /apollo/ via a limited-use key on espresso
+#    - rsync -auv -e "ssh -T -o StrictHostKeyChecking=no -o IdentitiesOnly=yes -o ForwardAgent=no -i $NICKB_UPLOAD_KEY" cspp-geo-gridded-glm-$CI_COMMIT_SHORT_SHA.tar.xz nickb@espresso:/apollo/csppgeo/packages/gridded-glm/ci/cspp-geo-gridded-glm-$CI_COMMIT_SHORT_SHA.tar.xz
+
+push our images as latest tags:
+  stage: release
+  image: docker:19.03.1
+  tags:
+    - docker
+  services:
+    - docker:19.03.1-dind
+  script:
+    - docker login --username $CI_REGISTRY_USER --password $CI_REGISTRY_PASSWORD $CI_REGISTRY
+# buildbucket
+    - docker pull $BUILDBUCKET_IMAGE:$CI_COMMIT_SHORT_SHA
+    - docker tag $BUILDBUCKET_IMAGE:$CI_COMMIT_SHORT_SHA $BUILDBUCKET_IMAGE:latest
+    - docker push $BUILDBUCKET_IMAGE:latest
+# gridded_glm
+    - docker pull $GRIDDED_GLM_IMAGE:$CI_COMMIT_SHORT_SHA
+    - docker tag $GRIDDED_GLM_IMAGE:$CI_COMMIT_SHORT_SHA $GRIDDED_GLM_IMAGE:latest
+    - docker push $GRIDDED_GLM_IMAGE:latest
+
+  only:
+    - tags
+    - master
diff --git a/buildbucket/package.sh b/buildbucket/package.sh
index 6c22178d32e7e0ce98ea973cf8a0555a3457d8d7..cffb35e89c680bee049c73ab5649537099ea57c3 100755
--- a/buildbucket/package.sh
+++ b/buildbucket/package.sh
@@ -26,7 +26,7 @@ fi
 pkg_name=cspp-geo-gridded-glm-${version}
 DIST=${DIST:-"/dock"}
 LMATOOLS_REF=${LMATOOLS_REF:-"minvaluegrids"}
-GLMTOOLS_REF=${GLMTOOLS_REF:-"ugf-newgrid"}
+GLMTOOLS_REF=${GLMTOOLS_REF:-"master"}
 GLMTOOLS_REPOS=${GLMTOOLS_REPOS:-"https://github.com/deeplycloudy/glmtools.git"}
 GGLM_REPOS=${GGLM_REPOS:-"https://gitlab.ssec.wisc.edu/cspp_geo/cspp-geo-gridded-glm.git"}
 GGLM_REF=${GGLM_REF:-"master"}