Как запустить двоичный файл go как последний этап конвейера Jenkins локально? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть простой gin goni c microservice Golang project , который я использую, чтобы научиться создавать конвейер Jenkins. Каждый этап успешно выполняется, но двоичный файл не запускается после завершения конвейеров. Можно также сказать, что процесс не запущен, используя curl для достижения конечной точки:

curl http://localhost: 9191 / users

Это рассматриваемый конвейер:

pipeline {
   agent any

   stages {
      stage('git') {
         steps {
            echo "git"
            git 'https://github.com/eduFDiaz/golang-microservices.git'
         }
      }
      stage('clean') {
         steps {
            echo "clean"
            sh "make clean"
         }
      }
      stage('test') {
         steps {
            echo "test"
            sh "make test"
         }
      }
      stage('build') {
         steps {
            echo "build"
            sh "make build"
         }
      }
      stage('run') {
         steps {
            echo "run"
            sh "make run"
         }
      }
   }
}

Makefile:

executableName=testApi
clean:
    echo "stoping if running and cleaning"
    rm -rf ./bin
    killall $(executableName) || true
test:
    echo "Testing..."
    go test -coverprofile cp.out ./mvc/...
    go tool cover -html=cp.out
build:
    echo "Building..."
    go build -o bin/$(executableName) mvc/main.go
run:
    echo "Running..."
    ./bin/$(executableName) &
all: test build run

Все работает отлично, когда я делаю это вручную. Что мне здесь не хватает?

Вывод на консоль:

Started by user Eduardo fernandez
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /root/.jenkins/workspace/golang pipeline test
[Pipeline] {
[Pipeline] stage
[Pipeline] { (git)
[Pipeline] echo
git
[Pipeline] git
No credentials specified
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://github.com/eduFDiaz/golang-microservices.git # timeout=10
Fetching upstream changes from https://github.com/eduFDiaz/golang-microservices.git
 > git --version # timeout=10
 > git fetch --tags --force --progress -- https://github.com/eduFDiaz/golang-microservices.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision bfa434ff2aca9ea748182aa2b29094e1b9f442c6 (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f bfa434ff2aca9ea748182aa2b29094e1b9f442c6 # timeout=10
 > git branch -a -v --no-abbrev # timeout=10
 > git branch -D master # timeout=10
 > git checkout -b master bfa434ff2aca9ea748182aa2b29094e1b9f442c6 # timeout=10
Commit message: "run reverted to previous state in Makefile"
 > git rev-list --no-walk bfa434ff2aca9ea748182aa2b29094e1b9f442c6 # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (clean)
[Pipeline] echo
clean
[Pipeline] sh
+ make clean
echo "stoping if running and cleaning"
stoping if running and cleaning
rm -rf ./bin
killall testApi || true
testApi: no process found
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (test)
[Pipeline] echo
test
[Pipeline] sh
+ make test
echo "Testing..."
Testing...
go test -coverprofile cp.out ./mvc/...
?       github.com/golang-microservices/mvc [no test files]
?       github.com/golang-microservices/mvc/app [no test files]
?       github.com/golang-microservices/mvc/controllers [no test files]
ok      github.com/golang-microservices/mvc/domain  0.004s  coverage: 0.0% of statements
ok      github.com/golang-microservices/mvc/services    0.003s  coverage: 0.0% of statements [no tests to run]
?       github.com/golang-microservices/mvc/utils   [no test files]
go tool cover -html=cp.out
HTML output written to /tmp/cover914928629/coverage.html
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (build)
[Pipeline] echo
build
[Pipeline] sh
+ make build
echo "Building..."
Building...
go build -o bin/testApi mvc/main.go
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (run)
[Pipeline] echo
run
[Pipeline] sh (hide)
+ make run
echo "Running..."
Running...
./bin/testApi &
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

1 Ответ

1 голос
/ 23 апреля 2020

Эта проблема возникает из-за того, что Jenkins очищает весь дочерний процесс, запущенный во время сборки. То есть, make run вызывает приложение, но Jenkins завершает процесс как часть очистки (для получения более подробной информации найдите «ProcessTreeKiller»).

Для разрешения обновите свою линию, как показано ниже

stage('run') {
steps {
echo "run"
sh "export JENKINS_NODE_COOKIE=dontKillMe; make run "
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...