Jenkins setup

This commit is contained in:
simon987 2019-02-23 19:49:00 -05:00
parent d65b166ed7
commit 64032a22ea
12 changed files with 108 additions and 1 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
.idea/
work/
env/
worker.json
__pycache__/

6
README.md Normal file
View File

@ -0,0 +1,6 @@
### Running tests
```bash
python -m unittest discover
```

33
jenkins/Jenkinsfile vendored Normal file
View File

@ -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'
}
}
}
}

9
jenkins/build.sh Executable file
View File

@ -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

9
jenkins/deploy.sh Executable file
View File

@ -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

1
requirements.txt Normal file
View File

@ -0,0 +1 @@
requests

0
src/tt_drone/__init__.py Normal file
View File

20
src/tt_drone/drone.py Normal file
View File

@ -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

View File

View File

@ -0,0 +1,10 @@
import unittest
class WorkerTestCase(unittest.TestCase):
def setUp(self):
pass
def test_true(self):
self.assertTrue(True)

View File

@ -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