Jenkins CI setup

This commit is contained in:
simon987 2019-02-23 18:00:32 -05:00
parent 6bc2483968
commit d17113726e
9 changed files with 298 additions and 424 deletions

View File

@ -1,5 +1,5 @@
server:
address: "0.0.0.0:42901"
address: "localhost:3010"
database:
conn_str: "user=task_tracker password=task_tracker dbname=task_tracker sslmode=disable"

73
jenkins/Jenkinsfile vendored
View File

@ -1,22 +1,79 @@
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 none
environment {
GOOS='linux'
CGO_ENABLED='0'
HOME='.'
}
stages {
stage('Parallel build & test') {
failFast true
parallel {
stage('Build - web') {
agent {
docker {
image 'node:10-alpine'
}
}
environment {
CI = 'true'
}
stages {
stage('Build') {
steps {
sh 'cd web/angular && ng build --prod --optimization'
sh 'cd web/angular/ && npm install'
sh 'cd web/angular/ && ./node_modules/\\@angular/cli/bin/ng build --prod --optimization --output-path "${WORKSPACE}/webroot"'
stash includes: 'webroot/', name: 'webdist'
}
}
stage('Build - api') {
agent {
docker {
image 'golang:latest'
}
}
stage('Deliver') {
steps {
sh './jenkins/deploy.sh'
sh 'mkdir -p /go/src/github.com/task_tracker'
sh 'cp -r api config main storage config.yml schema.sql "/go/src/github.com/task_tracker"'
sh 'cd /go/src/github.com/task_tracker/main && go get ./...'
sh 'cd /go/src/github.com/task_tracker/main && go build -a -installsuffix cgo -o "${WORKSPACE}/tt_api" .'
stash includes: 'tt_api', name: 'apidist'
}
}
stage('Test - api') {
agent {
docker {
image 'golang:latest'
args '--network "host"'
}
}
steps {
sh 'mkdir -p /go/src/github.com/task_tracker'
sh 'cp -r api config main storage test config.yml schema.sql "/go/src/github.com/task_tracker"'
sh 'cd /go/src/github.com/task_tracker/ && go get -t ./test/...'
sh 'cd /go/src/github.com/task_tracker/test && go test .'
}
}
}
}
stage('Deploy') {
agent none
steps {
node('master') {
unstash 'webdist'
unstash 'apidist'
sshPut remote: remote, from: 'tt_api', into: 'task_tracker/'
sshPut remote: remote, from: 'config.yml', into: 'task_tracker/'
sshPut remote: remote, from: 'schema.sql', into: 'task_tracker/'
sshPut remote: remote, from: 'webroot/', into: 'task_tracker'
sshPut remote: remote, from: 'jenkins/deploy.sh', into: 'task_tracker/'
sshCommand remote: remote, command: 'chmod +x task_tracker/deploy.sh && ./task_tracker/deploy.sh'
}
}
}
}
}

13
jenkins/deploy.sh Normal file → Executable file
View File

@ -1,4 +1,11 @@
#!/usr/bin/env bash
#!/bin/bash
cp web/angular/dist/ /home/drone/task_tracker/webroot/
echo "test"
export TTROOT="task_tracker"
chmod 755 -R "${TTROOT}/webroot"
screen -S tt_api -X quit
echo "starting client"
screen -S tt_api -d -m bash -c "cd ${TTROOT} && ./tt_api"
sleep 1
screen -list

View File

@ -21,9 +21,22 @@ func New() *Database {
d := Database{}
d.workerCache = make(map[int64]*Worker)
d.init()
return &d
}
func (database *Database) init() {
db := database.getDB()
_, err := db.Exec(`SELECT * FROM project`)
if err != nil {
logrus.Info("Database first time setup")
database.Reset()
}
}
func (database *Database) Reset() {
file, err := os.Open("./schema.sql")

View File

@ -209,7 +209,6 @@ func (database *Database) GetSecret(pid int64, workerId int64) (secret string, e
}
err = row.Scan(&secret)
handleErr(err)
return
}

View File

@ -2,7 +2,7 @@ server:
address: "127.0.0.1:5001"
database:
conn_str: "user=task_tracker password=task_tracker dbname=task_tracker sslmode=disable"
conn_str: "user=task_tracker password=task_tracker dbname=task_tracker_test sslmode=disable"
log_levels: ["debug", "error", "trace", "info", "warn"]
git:

File diff suppressed because it is too large Load Diff

View File

@ -33,8 +33,8 @@
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.12.0",
"@angular/cli": "~7.2.2",
"@angular/compiler-cli": "~7.2.0",
"@angular/cli": "^7.2.4",
"@angular/compiler-cli": "^7.2.6",
"@angular/language-service": "~7.2.0",
"@types/chart.js": "^2.7.42",
"@types/jasmine": "~2.8.8",

View File

@ -6,7 +6,7 @@ import {Credentials} from "./models/credentials";
@Injectable()
export class ApiService {
public url: string = "http://localhost/api";
public url: string = "https://tt.simon987.net/api";
private options: {
withCredentials: true,
responseType: "json"