Nous utilisons Jenkins 1.504 sur Windows .
Nous avons besoin de maître et d’esclave dans différents sous-réseaux avec un pare-feu entre les deux.
Nous ne pouvons avoir AUCUNE règle de pare-feu de port, nous devons spécifier des numéros de port exacts .
Je sais que le port principal écoute.
Je vois aussi que Slave ouvre la connexion au maître à partir du port arbitraire attribué dynamiquement à chaque exécution, et que le port côté maître est également arbitraire.
Je peux réparer le port du maître en le spécifiant dans Gérer Jenkins> Configurer la sécurité globale> TCP pour les agents esclaves JNLP).
Comment réparer le port esclave?
[~ # ~] mise à jour [~ # ~]: Mécanisme de connexion détecté décrit ici: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI#JenkinsCLI-Connectionmechanism
Je pense que cela pourrait fonctionner pour nous, mais qu'il serait toujours préférable d'avoir une connexion ports fixes-2 fixes.
Nous avons eu une situation similaire, mais dans notre cas, Infosec a accepté d'autoriser n'importe quelle valeur à 1, nous n'avons donc pas dû réparer le port esclave, mais plutôt le port maître sur le port JNLP de haut niveau 49187 fonctionnait ("Configure Global Security" -> "port TCP pour les agents esclaves JNLP ").
TCP
49187 - Fixed jnlp port
8080 - jenkins http port
Autres ports nécessaires pour lancer esclave en tant que service Windows
TCP
135
139
445
UDP
137
138
Un esclave n'est pas un serveur, c'est une application de type client. Les clients du réseau n'utilisent (presque) jamais un port spécifique. Au lieu de cela, ils demandent à l'OS un port libre aléatoire. Cela fonctionne beaucoup mieux car vous exécutez généralement des clients sur de nombreux ordinateurs où la configuration actuelle n'est pas connue à l'avance. Cela évite que des milliers de "clients ne démarrent pas car le port est déjà utilisé" des rapports de bogues tous les jours.
Vous devez dire au service de sécurité que l'esclave n'est pas un serveur mais un client qui se connecte au serveur et vous devez absolument avoir une règle qui dit client: TOUT -> serveur: FIXE. Le numéro de port du client doit être> = 1024 ( les ports 1 à 1023 nécessitent des autorisations spéciales ), mais je ne sais pas si vous gagnerez réellement quelque chose en ajoutant une règle à cela - si un attaquant peut ouvrir des ports privilégiés En gros, ils possèdent déjà la machine.
S'ils se disputent, demandez-leur pourquoi ils n'exigent pas la même règle pour tous les navigateurs Web utilisés par les utilisateurs de votre entreprise.
J'ai un scénario similaire et je n'ai rencontré aucun problème pour me connecter après avoir défini le port JNLP que vous décrivez et ajouté une seule règle de pare-feu permettant une connexion sur le serveur utilisant ce port. Accordé est un port client sélectionné de manière aléatoire allant à un port de serveur connu (une règle hôte: ANY -> serveur: 1 règle est nécessaire).
D'après ma lecture du code source, je ne vois pas de moyen de définir le port local à utiliser lors de la demande de l'esclave. C'est dommage, ce serait une fonctionnalité intéressante à avoir.
Alternatives:
Utilisez un proxy simple sur votre client qui écoute sur le port N, puis transfère toutes les données au serveur Jenkins actuel sur l'hôte distant à l'aide d'un port local constant. Connectez votre esclave à ce proxy local au lieu du vrai serveur Jenkins.
Créez une construction d'esclave Jenkins personnalisée permettant à une option de spécifier le port local à utiliser.
N'oubliez pas également que si vous utilisez HTTPS via un certificat auto-signé, vous devez modifier le fichier de configuration jenkins-slave.xml sur l'esclave pour spécifier l'option - noCertificateCheck sur la ligne de commande.