diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1156b08bbb5f4ab73de2fe8e3fd7a223360121a4
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,109 @@
+before_script:
+  - "source ~gitlab-runner/cicd_support/cicd_support.shinc" 
+
+
+after_script:
+  - "echo Test Complete."
+
+stages:
+  - clean
+  - build
+  - test
+
+
+
+#
+# Cleaning
+#
+
+#template 
+.do-clean: &do-nightly-clean
+  stage: clean
+  script:
+    - ./cicd_tests/do-clean.sh
+
+# per os items
+do-nightly-clean-ubuntu18:
+  <<: *do-nightly-clean
+  tags:
+    - ubuntu18
+  variables:
+    OS: 'ubuntu18'  
+
+do-nightly-clean-ubuntu16:
+  <<: *do-nightly-clean
+  tags:
+    - ubuntu16
+  variables:
+    OS: 'ubuntu16'  
+
+do-nightly-clean-centos76:
+  <<: *do-nightly-clean
+  tags:
+    - centos76
+  variables:
+    OS: 'centos76'  
+
+
+#
+# building 
+#
+
+
+# template
+.do-build: &do-build
+  stage: build
+  script:
+    - ./cicd_tests/do-build.sh
+
+
+# per os items
+do-build-ubuntu18:
+  <<: *do-build
+  tags:
+    - ubuntu18
+  variables:
+    OS: 'ubuntu18'  
+
+
+do-build-ubuntu16:
+  <<: *do-build
+  tags:
+    - ubuntu16
+  variables:
+    OS: 'ubuntu16'  
+
+do-build-centos76:
+  <<: *do-build
+  tags:
+    - centos76
+  variables:
+    OS: 'centos76'  
+
+
+#
+# test-p1 
+#
+
+# template
+.test-p1: &test-p1
+  stage: test
+  script:
+    - ./cicd_tests/test-p1.sh
+
+test-p1-ubuntu16:
+  <<: *test-p1
+  tags:
+    - ubuntu16
+
+test-p1-ubuntu18:
+  <<: *test-p1
+  tags:
+    - ubuntu18
+
+test-p1-centos76:
+  <<: *test-p1
+  tags:
+    - centos76
+
+             
diff --git a/cicd_tests/do-build.sh b/cicd_tests/do-build.sh
new file mode 100755
index 0000000000000000000000000000000000000000..dfc400fdf1b93209820f9ec749c147ea70019f1b
--- /dev/null
+++ b/cicd_tests/do-build.sh
@@ -0,0 +1,38 @@
+#/bin/bash 
+
+set -e
+set -x
+
+main()
+{
+
+	# gather info for debugging later, probably not necessary 
+	pwd
+	hostname
+	whoami
+	env|grep "^CICD"
+
+	git submodule sync 
+	git submodule update --init --recursive
+
+	local orig_dir=$(pwd)
+
+	# puts cfi_umbrella (and all submodules) in CICD_MODULE_WORK_DIR
+	cicd_setup_module_dependency allnp/peasoup_umbrella.git p1_umbrella
+
+	# Build $PSZ, cleanup db.
+	cd $CICD_MODULE_WORK_DIR/p1_umbrella
+	source set_env_vars
+	sudo ./get-peasoup-packages.sh all
+	./build-all.sh
+	dropdb $PGDATABASE 2>/dev/null || true ; ./postgres_setup.sh
+
+	# build p1 dir
+	cd $orig_dir
+	time rsync -a --exclude='.git'  $CICD_TO_TEST_DIR/ /tmp/p1_test
+	cd /tmp/p1_test
+	source set_env_vars
+	scons -j 3
+}
+
+main "$@"
diff --git a/cicd_tests/do-clean.sh b/cicd_tests/do-clean.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e8ad14832bba62a3fefa678daf181aba2c66b6f8
--- /dev/null
+++ b/cicd_tests/do-clean.sh
@@ -0,0 +1,23 @@
+#/bin/bash 
+
+set -e
+set -x
+
+main()
+{
+
+	# gather info for debugging later, probably not necessary 
+	pwd
+	hostname
+	whoami
+	env|grep "^CICD"
+
+
+	if [[ $CICD_NIGHTLY == 1 ]] ; then
+		rm -rf $CICD_MODULE_WORK_DIR/p1_umbrella
+		rm -rf /tmp/p1_test
+	fi
+
+}
+
+main "$@"
diff --git a/cicd_tests/test-p1.sh b/cicd_tests/test-p1.sh
new file mode 100755
index 0000000000000000000000000000000000000000..fbc1894342af2c72fccf802b530a4b8996d18722
--- /dev/null
+++ b/cicd_tests/test-p1.sh
@@ -0,0 +1,19 @@
+#!/bin/bash  
+
+set -e
+set -x
+
+cd $CICD_MODULE_WORK_DIR/p1_umbrella
+source set_env_vars
+cd /tmp/p1_test
+source set_env_vars
+
+
+main()
+{
+	cd $CICD_MODULE_WORK_DIR/p1_umbrella/tests
+	./test_cmds.sh -c "rida_p1" -l -a "bzip2 tcpdump"
+	exit 0
+}
+
+main $*