diff --git a/jenkins/Jenkinsfile b/jenkins/Jenkinsfile new file mode 100644 index 0000000..cad146b --- /dev/null +++ b/jenkins/Jenkinsfile @@ -0,0 +1,47 @@ +def remote = [:] +remote.name = 'remote' +remote.host = env.DEPLOY_HOST +remote.user = env.DEPLOY_USER +remote.identityFile = '/var/lib/jenkins/.ssh/id_rsa' +remote.knownHosts = '/var/lib/jenkins/.ssh/known_hosts' +remote.allowAnyHosts = true +remote.retryCount = 3 +remote.retryWaitSec = 3 +logLevel = 'FINER' + +pipeline { + agent none + environment { + GOOS='linux' + CGO_ENABLED='0' + HOME='.' + } + stages { + stage('Build') { + agent { + docker { + image 'golang:latest' + } + } + steps { + sh 'mkdir -p /go/src/github.com/terorie/od-database-crawler' + sh 'cp -r *.go fasturl ds jenkins/build.sh "/go/src/github.com/terorie/od-database-crawler"' + sh 'cd /go/src/github.com/terorie/od-database-crawler && go get ./...' + sh './jenkins/build.sh' + stash includes: 'dist/', name: 'dist' + } + } + stage('Deploy') { + agent none + steps { + node('master') { + unstash 'dist' + sshCommand remote: remote, command: "ls od-database-crawler/" + sshPut remote: remote, from: 'dist/', into: 'od-database-crawler' + } + } + } + } +} + + diff --git a/jenkins/build.sh b/jenkins/build.sh new file mode 100755 index 0000000..56d4a9c --- /dev/null +++ b/jenkins/build.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +appname="od-database-crawler" +outdir="dist/" +tag="${BUILD_ID}_$(date +%Y-%m-%d)" + +rm -rf "./${outdir}" +mkdir build 2> /dev/null + +name=${outdir}${appname}-${tag}-linux +GOOS="linux" GOARCH="amd64" go build -ldflags="-s -w" -o ${name} +gzip -f ${name} +echo ${name} + +name=${outdir}${appname}-${tag}-mac +GOOS="darwin" GOARCH="amd64" go build -ldflags="-s -w" -o ${name} +gzip -f ${name} +echo ${name} + +name=${outdir}${appname}-${tag}-freebsd +GOOS="freebsd" GOARCH="amd64" go build -ldflags="-s -w" -o ${name} +gzip -f ${name} +echo ${name} diff --git a/server.go b/server.go index a9ce324..a1c030a 100644 --- a/server.go +++ b/server.go @@ -2,9 +2,7 @@ package main import ( "bytes" - "crypto" - "crypto/hmac" - "encoding/hex" + "encoding/base64" "encoding/json" "fmt" "github.com/fasthttp/websocket" @@ -17,7 +15,6 @@ import ( "net/url" "os" "strconv" - "time" ) var serverWorker *TrackerWorker @@ -215,39 +212,14 @@ type ServerTripper struct{} func (t *ServerTripper) RoundTrip(req *http.Request) (res *http.Response, err error) { req.Header.Set("User-Agent", serverUserAgent) - //TODO: Move this whole block elsewhere + //TODO: Use task_tracker/client ? if serverWorker != nil { - var content []byte - if req.Method == "GET" { - content = []byte("/task/get/" + strconv.Itoa(config.TrackerProject)) - } else { - //todo: this is retarded and should be moved elsewhere - buf, _ := ioutil.ReadAll(req.Body) - rdr1 := ioutil.NopCloser(bytes.NewBuffer(buf)) - rdr2 := ioutil.NopCloser(bytes.NewBuffer(buf)) - - content, _ = ioutil.ReadAll(rdr1) - - req.Body = rdr2 - } - - ts := time.Now().Format(time.RFC1123) - - mac := hmac.New(crypto.SHA256.New, serverWorker.Secret) - mac.Write(content) - mac.Write([]byte(ts)) - sig := hex.EncodeToString(mac.Sum(nil)) - req.Header.Add("X-Worker-Id", strconv.Itoa(serverWorker.Id)) - req.Header.Add("Timestamp", time.Now().Format(time.RFC1123)) - req.Header.Add("X-Signature", sig) - + req.Header.Add("X-Secret", base64.StdEncoding.EncodeToString(serverWorker.Secret)) } return http.DefaultTransport.RoundTrip(req) } -const mimeJSON = "application/json" - // https://github.com/simon987/task_tracker/blob/master/api/models.go type releaseTaskRequest struct {