From 64032a22ea73bae2bb685684f3512fcf2d8ab6fb Mon Sep 17 00:00:00 2001 From: simon987 Date: Sat, 23 Feb 2019 19:49:00 -0500 Subject: [PATCH] Jenkins setup --- .gitignore | 1 + README.md | 6 ++++++ jenkins/Jenkinsfile | 33 +++++++++++++++++++++++++++++ jenkins/build.sh | 9 ++++++++ jenkins/deploy.sh | 9 ++++++++ requirements.txt | 1 + src/tt_drone/__init__.py | 0 api.py => src/tt_drone/api.py | 0 src/tt_drone/drone.py | 20 +++++++++++++++++ src/tt_drone/test/__init__.py | 0 src/tt_drone/test/test_worker.py | 10 +++++++++ worker.py => src/tt_drone/worker.py | 20 ++++++++++++++++- 12 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 README.md create mode 100644 jenkins/Jenkinsfile create mode 100755 jenkins/build.sh create mode 100755 jenkins/deploy.sh create mode 100644 requirements.txt create mode 100644 src/tt_drone/__init__.py rename api.py => src/tt_drone/api.py (100%) create mode 100644 src/tt_drone/drone.py create mode 100644 src/tt_drone/test/__init__.py create mode 100644 src/tt_drone/test/test_worker.py rename worker.py => src/tt_drone/worker.py (87%) diff --git a/.gitignore b/.gitignore index 8eb269a..50ff872 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .idea/ work/ +env/ worker.json __pycache__/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..a1f20b5 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ + + +### Running tests +```bash +python -m unittest discover +``` \ No newline at end of file diff --git a/jenkins/Jenkinsfile b/jenkins/Jenkinsfile new file mode 100644 index 0000000..f69705b --- /dev/null +++ b/jenkins/Jenkinsfile @@ -0,0 +1,33 @@ +def remote = [:] +remote.name = 'remote' +remote.host = 'localhost' +remote.user = 'simon' +remote.identityFile = '/var/lib/jenkins/.ssh/id_rsa' +remote.knownHosts = '/var/lib/jenkins/.ssh/known_hosts' + +pipeline { + agent any + stages { + stage('Build') { + steps { + sh './jenkins/build.sh' + stash includes: 'env/', name: 'env' + } + } + stage('Test') { + steps { + unstash 'env' + sh 'bash -c "source env/bin/activate && cd src && python -m unittest discover"' + } + } + stage('Deploy') { + steps { + unstash 'env' + sshPut remote: remote, from: 'env', into: 'task_tracker_drone' + sshPut remote: remote, from: 'jenkins/deploy.sh', into: 'task_tracker_drone/deploy.sh' + sshPut remote: remote, from: 'src', into: 'task_tracker_drone' + sshCommand remote: remote, command: 'chmod +x task_tracker_drone/deploy.sh && ./task_tracker_drone/deploy.sh' + } + } + } +} \ No newline at end of file diff --git a/jenkins/build.sh b/jenkins/build.sh new file mode 100755 index 0000000..1082aff --- /dev/null +++ b/jenkins/build.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +virtualenv env --download --always-copy --clear -p python3.7 +source env/bin/activate +python --version + +pip install -r requirements.txt +deactivate + diff --git a/jenkins/deploy.sh b/jenkins/deploy.sh new file mode 100755 index 0000000..49f4427 --- /dev/null +++ b/jenkins/deploy.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +export DRONEROOT="task_tracker_drone" + +screen -S tt_drone -X quit +echo "starting drone" +screen -S tt_drone -d -m bash -c "cd ${DRONEROOT} && source env/bin/activate && python src/tt_drone/drone.py" +sleep 1 +screen -list diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..663bd1f --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +requests \ No newline at end of file diff --git a/src/tt_drone/__init__.py b/src/tt_drone/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api.py b/src/tt_drone/api.py similarity index 100% rename from api.py rename to src/tt_drone/api.py diff --git a/src/tt_drone/drone.py b/src/tt_drone/drone.py new file mode 100644 index 0000000..6eba0ed --- /dev/null +++ b/src/tt_drone/drone.py @@ -0,0 +1,20 @@ +import signal +import time + +die = False + + +def cleanup(signum, frame): + global die + die = True + + +signal.signal(signal.SIGINT, cleanup) +signal.signal(signal.SIGTERM, cleanup) + +while True: + time.sleep(1) + print("tick") + if die: + break + diff --git a/src/tt_drone/test/__init__.py b/src/tt_drone/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/tt_drone/test/test_worker.py b/src/tt_drone/test/test_worker.py new file mode 100644 index 0000000..a31d39b --- /dev/null +++ b/src/tt_drone/test/test_worker.py @@ -0,0 +1,10 @@ +import unittest + + +class WorkerTestCase(unittest.TestCase): + + def setUp(self): + pass + + def test_true(self): + self.assertTrue(True) diff --git a/worker.py b/src/tt_drone/worker.py similarity index 87% rename from worker.py rename to src/tt_drone/worker.py index 90b1e85..7b31067 100644 --- a/worker.py +++ b/src/tt_drone/worker.py @@ -1,11 +1,13 @@ import datetime import json import os +import random import shutil import subprocess +import time from subprocess import Popen -from api import Project, Worker, TaskTrackerApi, Task +from tt_drone.api import Project, Worker, TaskTrackerApi, Task class WorkerContext: @@ -86,3 +88,19 @@ class WorkerContext: print("SUBMIT: %s <%d>" % (task, r.status_code)) +api = TaskTrackerApi("https://tt.simon987.net/api") +w1 = Worker.from_file(api) +ctx = WorkerContext(w1, "main") + +while True: + try: + t = w1.fetch_task() + ctx.execute_task(t) + + time.sleep(random.randint(5, 45)) + except KeyboardInterrupt: + print("Cancel current task...") + try: + w1.release_task(t.id, 2, 0) + except NameError: + pass