Add Jenkins agent to TestON container and cleanup
Change-Id: Iae00161077c28ba86a075eb21677cb10d97de548
diff --git a/TestON/docker/.gitignore b/TestON/docker/.gitignore
index f0bcaa1..79c6067 100644
--- a/TestON/docker/.gitignore
+++ b/TestON/docker/.gitignore
@@ -1,4 +1,5 @@
fs/home/jenkins/*
!fs/home/jenkins/.ipython
+!fs/home/jenkins/jenkins_agent.sh
fs/usr/local
fs/tmp
diff --git a/TestON/docker/Dockerfile b/TestON/docker/Dockerfile
index 04450d6..a17238f 100644
--- a/TestON/docker/Dockerfile
+++ b/TestON/docker/Dockerfile
@@ -5,6 +5,10 @@
ARG TREX_EXT_LIBS=/external_libs
ARG TREX_LIBS=/trex_python
ARG KUBECTL=v1.22.1
+ARG ONOS_VER=2.5.4
+ARG RANCHER_VER=2.6.5
+ARG GO_VER=1.18.2
+ARG TFMASK_VER=0.7.0
# Install TRex deps
FROM alpine:3.12.1 as trex-builder
@@ -26,6 +30,13 @@
ARG TREX_LIBS
ARG SCAPY_VER
ARG KUBECTL
+ARG JENKINS_URL
+ARG JENKINS_NODE
+ARG ONOS_VER
+ARG RANCHER_VER
+ARG GO_VER
+ARG TFMASK_VER
+ENV DEBIAN_FRONTEND=noninteractive
ENV PACKAGES \
python \
python3 \
@@ -35,7 +46,11 @@
curl \
supervisor \
git \
- iproute2
+ iproute2 \
+ openjdk-11-jre \
+ software-properties-common \
+ git-crypt \
+ gnupg-agent
ADD requirements.txt /
COPY --from=trex-builder /output /
@@ -60,9 +75,23 @@
RUN if [ "$ENV" = "linux" ] ; then groupmod --gid 1001 jenkins && usermod --uid 1001 jenkins ; fi
-RUN curl -sS --fail "https://repo1.maven.org/maven2/org/onosproject/onos-releases/2.5.4/onos-admin-2.5.4.tar.gz" | tar zx && \
- mv onos-admin-2.5.4/* /usr/local/bin/ && \
- rm -r onos-admin-2.5.4
+RUN curl -sS --fail "https://repo1.maven.org/maven2/org/onosproject/onos-releases/${ONOS_VER}/onos-admin-${ONOS_VER}.tar.gz" | tar zx && \
+ mv onos-admin-${ONOS_VER}/* /usr/local/bin/ && \
+ rm -r onos-admin-${ONOS_VER}
+
+RUN curl -L -sS --fail "https://github.com/rancher/cli/releases/download/v${RANCHER_VER}/rancher-linux-amd64-v${RANCHER_VER}.tar.gz" | tar zx && \
+ mv rancher-v${RANCHER_VER}/rancher /usr/local/bin && \
+ rm -r rancher-v${RANCHER_VER}
+
+RUN cd /usr/local && curl -L -sS --fail https://go.dev/dl/go${GO_VER}.linux-amd64.tar.gz | tar zx
+ENV PATH=$PATH:/usr/local/go/bin
+
+RUN curl -fsSL https://apt.releases.hashicorp.com/gpg | apt-key add - && \
+ apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" && \
+ apt-get update && apt-get install terraform
+
+RUN curl -Lo /usr/local/bin/tfmask https://github.com/cloudposse/tfmask/releases/download/${TFMASK_VER}/tfmask_linux_amd64 && \
+ chmod +x /usr/local/bin/tfmask
ENV PYTHONPATH=${TREX_EXT_LIBS}:${TREX_LIBS}
# TODO: should we parametrize those?
@@ -71,7 +100,10 @@
ENV OC3=localhost
ADD docker/fs /
RUN chown -R jenkins.jenkins /home/jenkins && \
- python -m pip install -r /tmp/additional-py-pkgs.txt
+ python -m pip install -r /tmp/additional-py-pkgs.txt && \
+ chmod 1777 /tmp
+ENV JENKINS_URL=${JENKINS_URL}
+ENV JENKINS_NODE=${JENKINS_NODE}
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
diff --git a/TestON/docker/build.sh b/TestON/docker/build.sh
index 964a570..470cfc3 100755
--- a/TestON/docker/build.sh
+++ b/TestON/docker/build.sh
@@ -15,26 +15,47 @@
CONTAINER_FS="${THIS_DIR}/fs"
DI_UTIL_REPO="git@github.com:opennetworkinglab/bf-di-scripts.git"
ENV="macos"
+JENKINS_URL=""
+JENKINS_NODE=""
mkdir -p "${CONTAINER_FS}/tmp"
rm -rf "${CONTAINER_FS}/tmp/additional-py-pkgs.txt"
touch "${CONTAINER_FS}/tmp/additional-py-pkgs.txt"
-for op in $@; do
- case $op in
+while [[ $# -gt 0 ]];
+do
+ case $1 in
'--wk' )
rm -rf "${CONTAINER_FS}/home/jenkins/.ssh"
cp -r "${HOME}/.ssh" "${CONTAINER_FS}/home/jenkins/.ssh"
+ shift
;;
'--di' )
rm -rf "${CONTAINER_FS}/tmp/bf-di-scripts"
git clone "${DI_UTIL_REPO}" "${CONTAINER_FS}/tmp/bf-di-scripts"
echo "/tmp/bf-di-scripts/4/utility" > "${CONTAINER_FS}/tmp/additional-py-pkgs.txt"
+ shift
;;
'--li' )
ENV="linux"
+ shift
;;
+ '--jenkins' )
+ # includes jenkins agent
+ JENKINS_URL=$2
+ JENKINS_NODE=$3
+ curl -Lo "${CONTAINER_FS}/home/jenkins/agent.jar" "${JENKINS_URL}/jnlpJars/agent.jar"
+ shift
+ shift
+ shift
esac
done
-docker build -t teston -f "${THIS_DIR}/Dockerfile" "${TEST_ON_DIR}" --build-arg ENV=$ENV
+if [[ ! -z "${JENKINS_URL}" ]] && [[ ! -f "${CONTAINER_FS}/home/jenkins/secret.txt" ]]; then
+ echo "Please create ${CONTAINER_FS}/home/jenkins/secret.txt with Jenkins secret."
+ exit 1
+fi
+
+docker build -t teston -f "${THIS_DIR}/Dockerfile" "${TEST_ON_DIR}" \
+ --build-arg ENV=$ENV \
+ --build-arg JENKINS_URL=$JENKINS_URL --build-arg JENKINS_NODE=$JENKINS_NODE
diff --git a/TestON/docker/docker-compose.yaml b/TestON/docker/docker-compose.yaml
new file mode 100644
index 0000000..1429737
--- /dev/null
+++ b/TestON/docker/docker-compose.yaml
@@ -0,0 +1,7 @@
+services:
+ teston-node:
+ image: teston
+ volumes:
+ - type: bind
+ source: "../"
+ target: "/home/jenkins/teston"
diff --git a/TestON/docker/fs/etc/supervisor/supervisord.conf b/TestON/docker/fs/etc/supervisor/supervisord.conf
index eb23757..f188987 100644
--- a/TestON/docker/fs/etc/supervisor/supervisord.conf
+++ b/TestON/docker/fs/etc/supervisor/supervisord.conf
@@ -3,3 +3,9 @@
[program:sshd]
command=/usr/sbin/sshd -D
+
+[program:jenkins-agent]
+user=jenkins
+directory=/home/jenkins
+command=/bin/bash jenkins_agent.sh
+environment=USER=jenkins,HOME=/home/jenkins
diff --git a/TestON/docker/fs/home/jenkins/jenkins_agent.sh b/TestON/docker/fs/home/jenkins/jenkins_agent.sh
new file mode 100644
index 0000000..f110002
--- /dev/null
+++ b/TestON/docker/fs/home/jenkins/jenkins_agent.sh
@@ -0,0 +1,2 @@
+!/bin/bash
+/usr/bin/java -jar agent.jar -jnlpUrl "https://$JENKINS_URL/computer/$JENKINS_NODE/jenkins-agent.jnlp" -secret $(cat secret.txt) -workDir /home/jenkins
diff --git a/TestON/docker/start.sh b/TestON/docker/start.sh
deleted file mode 100755
index fd7860f..0000000
--- a/TestON/docker/start.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-# SPDX-FileCopyrightText: Copyright 2021-present Open Networking Foundation.
-# SPDX-License-Identifier: Apache-2.0
-set -euo pipefail
-SSH_PORT=${SSH_PORT:-2222}
-THIS_DIR="$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)"
-TEST_ON_DIR="$(cd ${THIS_DIR}/.. && pwd)"
-
-function cleanup() {
- echo "Stopping TestON container"
- docker stop teston
-}
-trap cleanup EXIT
-
-echo "Starting TestON container..."
-
-docker run -d --rm --init --name teston \
- -p $SSH_PORT:22 \
- -v $TEST_ON_DIR:/home/jenkins/teston \
- teston
-
-echo "SSH server listen on $SSH_PORT"
-echo "Attaching to the container..."
-docker exec -it -u jenkins teston bash -c "cd /home/jenkins && bash"