9
votes

Comment corriger l'erreur "processus apparemment jamais démarré en ..." dans le pipeline Jenkins?

Je reçois l'étrange erreur ci-dessous dans mon pipeline Jenkins

    stage("Build docker containers & coreupdate packages") {
        agent {
            docker {
                image "quay.io/arubadevops/acp-build:ut-build"
                label "acp-ci-ubuntu"
                args "-u ubuntu --net=host -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/.docker:/home/ubuntu/.docker"
              }
          }
          steps {
              script {
                 try {
                    sh "export CI_BUILD_NUMBER=${currentBuild.number}; cd docker; ./build.sh; cd ../test; ./build.sh;"
                    ciBuildStatus="PASSED"
                 } catch (err) {
                    ciBuildStatus="FAILED"
                 }
              }
          }
      }

L'étape correspondante dans le pipeline Jenkins est

[Pipeline] withDockerContainer
acp-ci-ubuntu-test does not seem to be running inside a container
$ docker run -t -d -u 1002:1006 -u ubuntu --net=host -v /var/run/docker.sock:/var/run/docker.sock -v /home/ubuntu/.docker:/home/ubuntu/.docker -w /home/ubuntu/workspace/CD-acp-cassandra -v /home/ubuntu/workspace/CD-acp-cassandra:/home/ubuntu/workspace/CD-acp-cassandra:rw,z -v /home/ubuntu/workspace/CD-acp-cassandra@tmp:/home/ubuntu/workspace/CD-acp-cassandra@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** quay.io/arubadevops/acp-build:ut-build cat
$ docker top 83d04d0a3a3f9785bdde3932f55dee36c079147eb655c1ee9d14f5b542f8fb44 -eo pid,comm
[Pipeline] {
[Pipeline] sh
process apparently never started in /home/ubuntu/workspace/CD-acp-cassandra@tmp/durable-70b242d1
(running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true might make the problem clearer)
[Pipeline] }
$ docker stop --time=1 83d04d0a3a3f9785bdde3932f55dee36c079147eb655c1ee9d14f5b542f8fb44
$ docker rm -f 83d04d0a3a3f9785bdde3932f55dee36c079147eb655c1ee9d14f5b542f8fb44
[Pipeline] // withDockerContainer

Quelles pourraient être les raisons pour lesquelles le processus ne démarre pas dans le conteneur Docker? Tous les pointeurs sur la façon de déboguer davantage sont également utiles.


3 commentaires

Avait été confronté au même problème avec l'option Injecter les clés SSH configurée pour se connecter aux conteneurs sous Gérer Jenkins> Configurer le système. Jenkins pouvait se connecter à l'hôte Docker et générer un conteneur, mais ne pouvait pas se connecter au conteneur. Étonnamment, cela fonctionne dans une autre instance Jenkins plus ancienne. Nous avons mis à jour le Dockerfile pour créer un utilisateur avec le même nom d'utilisateur que l'hôte Docker et copier les clés SSH dans le répertoire ~/.ssh du conteneur. Puis basculé vers l'autre option qui dit Se connecter avec SSH ou quelque chose de similaire pour le faire fonctionner.


Je n'utilise pas le transfert de clé. Il fonctionne sur un esclave, mais sur un autre esclave, il échoue toujours avec cette erreur.


Cela ressemble à support.cloudbees.com/hc/en-us/articles/...


6 Réponses :


4
votes

Le problème est causé par des changements de rupture introduits dans le plugin Jenkins durable-task v1.31.

La source:

https://issues.jenkins-ci.org/browse/JENKINS-59907 et https://github.com/jenkinsci/durable-task-plugin/blob/master/CHANGELOG.md

Solution: la mise à niveau du plug-in de tâches durables Jenkins vers la v1.33 a résolu le problème pour nous.


0 commentaires

2
votes

Si vous avez mis à niveau le plugin durable-task vers la version 1.33 ou une version ultérieure et que cela ne fonctionne toujours pas, vérifiez s'il existe une variable d'environnement vide configurée dans votre pipeline ou stockée dans la configuration Jenkins (en pointillé) et supprimez-la:

Capture d'écran de la page de configuration Jenkins, section Propriétés globales, montrant une variable d'environnement vide


0 commentaires

4
votes

Cette erreur signifie que le processus Jenkins est bloqué sur une commande.

Quelques suggestions:

  • Mettez à niveau tous vos plugins et réessayez.
  • Assurez-vous que vous avez le bon nombre d'exécuteurs et que les travaux ne sont pas bloqués dans la file d'attente.
  • Si vous tirez l'image (pas votre image locale), essayez d'ajouter alwaysPull true (ligne suivante de l' image ).
  • Lors de l'utilisation de l' agent intérieur de la stage , retirez l'agent externe. Voir: JENKINS-63449 .
  • Exécutez org.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true dans la console de script de Jenkins pour déboguer.
  • Lorsque le processus est bloqué, connectez-vous en SSH à la VM Jenkins et exécutez docker ps pour voir quelle commande est en cours d'exécution.
  • Exécutez docker ps -a pour voir les dernières exécutions ayant échoué. Dans mon cas, il a essayé d'exécuter cat côté de la commande CMD personnalisée définie par le conteneur (par exemple, ansible-playbook cat ), qui était la commande invalide. La commande cat est utilisée par conception . Pour changer le point d'entrée, veuillez lire JENKINS-51307 .
  • Si votre conteneur est toujours en cours d'exécution, vous pouvez vous connecter à votre conteneur Docker par docker exec -it -u0 $(docker ps -ql) bash et exécuter ps wuax pour voir ce qui se passe.
  • Essayez de supprimer certaines variables globales (cela peut être un bogue), voir: les travaux parallèles ne démarrent pas avec le workflow docker .

0 commentaires

2
votes

En plus de la réponse de kenorb:

  • Vérifiez les autorisations dans le conteneur dans lequel vous exécutez et le répertoire Jenkins sur l'hôte de compilation.

J'exécute des conteneurs docker personnalisés et après plusieurs heures de débogage, j'ai trouvé qu'après avoir essayé d'exécuter ce que Jenkins essayait d'exécuter à l'intérieur du conteneur en cours d'exécution (en exécutant dans le conteneur, en exécutant echo "$(ps waux)" et en les exécutant sh -c commande une par une). J'ai trouvé que Jenkins ne pouvait pas créer le fichier journal à l'intérieur du conteneur en raison d'une incompatibilité entre l'UID et le GID.


1 commentaires

Idem .. aussi des heures de débogage. L'activation des diagnostics de lancement comme suggéré dans la réponse de kenorb m'a conduit au problème du fichier journal. Comment l'avez-vous réparé?



0
votes

Si vous exécutez Jenkins à l'intérieur de Docker et que vous utilisez un conteneur DinD pour Jenkins exécutant des tâches Docker, assurez-vous de monter votre volume de données Jenkins sur / var / jenkins_home dans le service fournissant le démon Docker. La création du journal est en fait tentée par le démon, ce qui signifie que le conteneur du démon a besoin d'accéder au volume avec l'espace de travail en cours d'exploitation.

Exemple d'extrait de code pour docker-compose.yml:

services:
  dind:
    container_name: dind-for-jenkins
    privileged: true
    image: docker:stable-dind
    volumes:
      - 'jenkins-data:/var/jenkins_home'


0 commentaires

0
votes

J'ai eu ce même problème et dans mon cas, il était lié à l'argument -u <user passé à l'agent. En fin de compte, changer mon pipeline pour utiliser -u root résolu le problème.


Dans le message d'origine, je remarque qu'un -u ubuntu été utilisé pour exécuter le conteneur:

agent {
  docker {
    image "app:latest"
    args "-u root"      # <=-----------
    alwaysPull false
    reuseNode true
  }
}

J'utilisais également un utilisateur personnalisé, celui que j'ai ajouté lors de la création de l'image Docker.

$ docker run -t -d -u 1000:1000 -u someuser app:image cat
$ docker top <hash> -eo pid,comm
[Pipeline] {
[Pipeline] unstash
[Pipeline] sh
process apparently never started in /home/jenkins/agent/workspace/branch@tmp/durable-f5dfbb1c

Le démarrage du conteneur localement à l'aide des mêmes commandes Jenkins fonctionne bien:

docker run -t -d -u 1000:1000 -u someuser app:image cat
docker top <hash> -eo pid,comm
docker exec -it <hash> ls  # DO STUFF

Mais dans Jenkins, il échoue avec la même erreur "processus jamais démarré ..":

agent {
  docker {
    image "app:latest"
    args "-u someuser"
    alwaysPull false
    reuseNode true
  }
}
steps {
  sh '''
    # DO STUFF
  '''
}

Pour une raison quelconque, le changer en -u root fonctionné.

docker run -t -d -u 1002:1006 -u ubuntu ... -e ******** quay.io/arubadevops/acp-build:ut-build cat


0 commentaires