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/ .idea/
work/ work/
env/
worker.json worker.json
__pycache__/ __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 datetime
import json import json
import os import os
import random
import shutil import shutil
import subprocess import subprocess
import time
from subprocess import Popen from subprocess import Popen
from api import Project, Worker, TaskTrackerApi, Task from tt_drone.api import Project, Worker, TaskTrackerApi, Task
class WorkerContext: class WorkerContext:
@ -86,3 +88,19 @@ class WorkerContext:
print("SUBMIT: %s <%d>" % (task, r.status_code)) 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