VPN ಹಿಂದೆ ಇರುವ Jenkins ವಿರುದ್ಧ GitHub webhook ಗಳು ಏಕೆ ಸಮಯ ಮೀರುತ್ತವೆ
GitHub webhook ಗಳನ್ನು ಒಳಮುಖವಾಗಿ ಕಳುಹಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ Jenkins ಅನ್ನು ರಕ್ಷಿಸುವ VPN ಅವುಗಳನ್ನು ನಿರಾಕರಿಸುತ್ತದೆ. ವಿತರಣೆಯನ್ನು relay ಮೂಲಕ ಹೊರಕ್ಕೆ ಕಳುಹಿಸಿ, ಅಥವಾ webhook ಅನ್ನು ಪೋಲಿಂಗ್ ಮಾಡುವ agent ನಿಂದ ಬದಲಾಯಿಸಿ.
ವಿತರಣಾ ಪುಟವು ಸಮಯ ಮೀರುವಿಕೆಯನ್ನು ತೋರಿಸುತ್ತದೆ ಮತ್ತು Jenkins ಏನನ್ನೂ ದಾಖಲಿಸುವುದಿಲ್ಲ, ಇದು ಎಂದಿಗೂ ತಲುಪದ ಸಂಪರ್ಕದ ಚಿಹ್ನೆ. GitHub ತನ್ನದೇ ಮೂಲಸೌಕರ್ಯದಿಂದ ನೀವು ಸಂರಚಿಸಿದ payload URL ಗೆ ಹೊರಹೋಗುವ HTTP POST ಆಗಿ webhook ಕಳುಹಿಸುತ್ತದೆ. VPN ನಿಖರವಾಗಿ ಆ ರೀತಿಯ ಸಂಪರ್ಕವನ್ನು ನಿರಾಕರಿಸುವ ಮೂಲಕ Jenkins ಅನ್ನು ರಕ್ಷಿಸುತ್ತದೆ. ಎರಡೂ ಬದಿಗಳಲ್ಲಿ ಏನೂ ಮುರಿದಿಲ್ಲ. ಸಮಸ್ಯೆ ವಿನಂತಿಯ ದಿಕ್ಕಿನಲ್ಲಿದೆ.
ವಿತರಣೆ ನಿಜವಾಗಿ ಏನನ್ನು ಪ್ರಯತ್ನಿಸುತ್ತದೆ
GitHub payload URL ನಲ್ಲಿನ ಹೋಸ್ಟ್ ಹೆಸರನ್ನು ಪರಿಹರಿಸಿ ಸಾರ್ವಜನಿಕ ಇಂಟರ್ನೆಟ್ನಿಂದ ಅದಕ್ಕೆ ಸಂಪರ್ಕಿಸುತ್ತದೆ. ಆ URL ಖಾಸಗಿ ವಿಳಾಸಕ್ಕೆ, ಅಥವಾ ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ಒಳಗೆ ಮಾತ್ರ ಪರಿಹರಿಸುವ ಹೆಸರಿಗೆ ತೋರಿಸಿದರೆ, ಯಾವುದೇ ವಿನಂತಿ ಕಳುಹಿಸುವ ಮೊದಲೇ ಪ್ರಯತ್ನ ವಿಫಲವಾಗುತ್ತದೆ. ಅದು ನಿಮ್ಮ ಎಡ್ಜ್ ಬಿಸಾಡುವ ಸಾರ್ವಜನಿಕ ಹೆಸರಿಗೆ ತೋರಿಸಿದರೆ, ಪ್ರಯತ್ನ ಬದಲಿಗೆ ಸಮಯ ಮೀರುತ್ತದೆ.
ರೋಗನಿರ್ಣಯಕ್ಕೆ ಈ ವ್ಯತ್ಯಾಸ ಮುಖ್ಯ. DNS ವೈಫಲ್ಯ ಮತ್ತು ಫಿಲ್ಟರ್ ಮಾಡಿದ ಪೋರ್ಟ್ ಎರಡೂ Jenkins ಕಡೆ ಏನೂ ಆಗಿಲ್ಲ ಎಂಬಂತೆ ಕಾಣುತ್ತವೆ, ಮತ್ತು ಎರಡೂ GitHub ನಲ್ಲಿ ಬೇರೆ ಕಾರಣ ಸೇರಿಸಿದ ವಿಫಲ ವಿತರಣೆಯಾಗಿ ಕಾಣುತ್ತವೆ. URL ಬದಲಿಸುವ ಮೊದಲು ಆ ಕಾರಣವನ್ನು ಓದಿ.
ಹೊರಮುಖವಾಗಿ ಡಯಲ್ ಮಾಡುವ ಸುರಂಗವು ಶ್ರೋತೃವನ್ನು ಸೃಷ್ಟಿಸುವುದಿಲ್ಲ. ಜನರು ಬೇರೆ ರೀತಿಯಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಎಂದು ನಿರೀಕ್ಷಿಸುವ ಭಾಗ ಅದೇ.
ಸಂಪರ್ಕದ ದಿಕ್ಕನ್ನು ಸರಿಪಡಿಸುವ ಮೂರು ಮಾರ್ಗಗಳು
ಪ್ರತಿ ಪರಿಹಾರವೂ ಸಂಪರ್ಕವನ್ನು ಯಾರು ಪ್ರಾರಂಭಿಸುತ್ತಾರೆ ಎಂಬುದನ್ನು ಬದಲಾಯಿಸುತ್ತದೆ, ಮತ್ತು ಮೂರು ಆಕಾರಗಳಷ್ಟೇ ಇವೆ.
| Approach | Who initiates | What you give up |
|---|---|---|
| Relay service | An outbound client inside the network | A third party sees every payload |
| Reverse tunnel or ingress | The public edge, into a controlled listener | An inbound surface you must secure |
| Runner or polling | The agent, outbound to GitHub | Instant delivery, replaced by a schedule |
ಪೋಲಿಂಗ್ ಅತ್ಯಂತ ಕಡಿಮೆ ಸೊಗಸಾದ ಮತ್ತು ನಿರ್ವಹಿಸಲು ಸುಲಭವಾದದ್ದು. relay ಪೋರ್ಟ್ ತೆರೆಯದೆ ಬಹುತೇಕ ತಕ್ಷಣದ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಇಟ್ಟುಕೊಳ್ಳುತ್ತದೆ. payload ದ ಗೌಪ್ಯತೆ ಮೂರನೇ ಪಕ್ಷವನ್ನು ಹೊರಗಿಡುವಾಗ runner ಸಾಮಾನ್ಯವಾಗಿ ಸರಿಯಾದ ಉತ್ತರ, ಏಕೆಂದರೆ ಕೆಲಸವು ಈಗಾಗಲೇ ನೆಟ್ವರ್ಕ್ ಒಳಗಿರುವ ಯಂತ್ರದಲ್ಲಿ ಚಲಿಸಬಹುದು.
ನೀವು ನಿರ್ವಹಿಸಬಹುದಾದದ್ದನ್ನು ಆಧರಿಸಿ ಆಯ್ಕೆಮಾಡಿ, ಆಧುನಿಕ ಕೇಳಿಸುವುದನ್ನು ಆಧರಿಸಿ ಅಲ್ಲ.
smee ಬಳಸಿ ವಿತರಣೆಯನ್ನು ಹೊರಕ್ಕೆ ಕಳುಹಿಸಿ
relay ಸೇವೆಯಲ್ಲಿ ಚಾನಲ್ ರಚಿಸಿ ಅದರ URL ಇಟ್ಟುಕೊಳ್ಳಿ. ನೆಟ್ವರ್ಕ್ ಒಳಗೆ, ಕ್ಲೈಂಟ್ ಸ್ಥಾಪಿಸಿ ಮತ್ತು Jenkins ನಿರೀಕ್ಷಿಸುವ ಮಾರ್ಗಕ್ಕೆ ವಿತರಣೆಗಳನ್ನು ರವಾನಿಸಿ. ರಿಪೊಸಿಟರಿ ಸೆಟ್ಟಿಂಗ್ಸ್ನಲ್ಲಿನ payload URL ಚಾನಲ್ನ URL ಆಗುತ್ತದೆ, ವಿಷಯ ಪ್ರಕಾರ application/json ಎಂದು ಸೆಟ್ ಆಗಿರುತ್ತದೆ.
sudo npm install --global smee-client
smee -u CHANNEL_URL --path /github-webhook/ --port 8080ಮೂರು ವಿವರಗಳು ಅದು ಕೆಲಸ ಮಾಡುತ್ತದೆಯೇ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸುತ್ತವೆ. ಮಾರ್ಗವು GitHub ಈವೆಂಟ್ಗಳಿಗಾಗಿ Jenkins ನಿರೀಕ್ಷಿಸುವದಕ್ಕೆ ಹೊಂದಿಕೆಯಾಗಬೇಕು, ಅದು ಡೀಫಾಲ್ಟ್ ಆಗಿ /github-webhook/. Jenkins ನೀವು ಕ್ಲೈಂಟ್ಗೆ ಕೊಟ್ಟ ಪೋರ್ಟ್ನಲ್ಲಿ ಕೇಳಬೇಕು. ಮತ್ತು ಜಾಬ್ನಲ್ಲಿ ಸಂರಚಿಸಿದ Jenkins URL ಆ ಮಾರ್ಗಕ್ಕೆ ಒಪ್ಪಬೇಕು, ಇಲ್ಲದಿದ್ದರೆ ಈವೆಂಟ್ ತಲುಪಿ ನಂತರ ಎಸೆಯಲ್ಪಡುತ್ತದೆ.
ಕೊನೆಯ ಸ್ಲ್ಯಾಶ್ ಹೊಂದಿಕೆಯಾಗದಿದ್ದರೆ 404 ಉಂಟಾಗುತ್ತದೆ, ಅದು ವಿತರಣಾ ವೈಫಲ್ಯದಂತೆ ಓದಲ್ಪಡುತ್ತದೆ ಮತ್ತು ಹಾಗಲ್ಲ.
ವಾರವನ್ನು ದಾಟುವಂತೆ ಅದನ್ನು ಚಲಾಯಿಸುವುದು
ಮುಂಭಾಗದ ಕ್ಲೈಂಟ್ ಟರ್ಮಿನಲ್ನೊಂದಿಗೆ ಸಾಯುತ್ತದೆ, ಮತ್ತು webhook ಗಳು ಒಂದು ದಿನ ಕೆಲಸ ಮಾಡಿ ನಂತರ ನಿಲ್ಲುತ್ತವೆ. ಅದಕ್ಕೆ Restart=always ಇರುವ unit ಕೊಡಿ, Jenkins ಬಳಕೆದಾರರಾಗಿ ಚಲಾಯಿಸಿ, ಮತ್ತು ಮೊದಲ ನಿಜವಾದ ವಿತರಣೆಯ ನಂತರ journal ಓದಿ. ಆ ಕೊನೆಯ ಹೆಜ್ಜೆಯೇ ಕೆಲಸ ಮಾಡುವ relay ಅನ್ನು ಸಂರಚಿಸಿದ relay ದಿಂದ ಬೇರ್ಪಡಿಸುತ್ತದೆ.
[Unit]
Description=smee webhook relay
After=network.target
[Service]
Type=simple
Restart=always
RestartSec=2
User=jenkins
ExecStart=/usr/bin/smee -u CHANNEL_URL --path /github-webhook/ --port 8080
[Install]
WantedBy=multi-user.targetಮರುಪ್ಲೇ ಬಟನ್ ಬದಲು ನಿಜವಾದ push ನಿಂದ ಪರೀಕ್ಷಿಸಿ. ಮರುಪ್ಲೇ relay ದ ಸಂಗ್ರಹಿತ payload ಅನ್ನು ಅಭ್ಯಾಸ ಮಾಡುತ್ತದೆ, GitHub ನಿಂದ ನಿಮ್ಮ ಚಾನಲ್ಗೆ ಇರುವ ಮಾರ್ಗವನ್ನಲ್ಲ, ಆದ್ದರಿಂದ ಲೈವ್ ವಿತರಣೆ ಇನ್ನೂ ವಿಫಲವಾಗುತ್ತಿರುವಾಗಲೂ ಅದು ಪಾಸ್ ಆಗಬಹುದು.
unit ನಿಂತಾಗ ಎಚ್ಚರಿಕೆ ನೀಡಿ. ಕೆಳಗಿರುವ relay ರಚನೆಯಿಂದಲೇ ಮೌನವಾಗಿರುತ್ತದೆ, ಮತ್ತು ಮೌನವೇ ನೀವು ಈಗಾಗಲೇ ಡೀಬಗ್ ಮಾಡುತ್ತಿರುವುದು.
relay ಏನನ್ನು ನೋಡಬಹುದು, ಮತ್ತು ಯಾವಾಗ ಅದನ್ನು ಬಳಸಬಾರದು
relay payload ಅನ್ನು ಕೊನೆಗೊಳಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಅದು ರಿಪೊಸಿಟರಿ ಹೆಸರುಗಳು, commit ಡೇಟಾ ಮತ್ತು ಈವೆಂಟ್ ಒಯ್ಯುವ ಎಲ್ಲವನ್ನೂ ನೋಡುತ್ತದೆ. ಚಾನಲ್ನ URL ಅನ್ನು ಸಾರ್ವಜನಿಕ ಅಂತಿಮ ಬಿಂದುವಾಗಿ ಪರಿಗಣಿಸಿ. ನಕಲಿ ವಿತರಣೆಗಳು ನಿರಾಕರಿಸಲ್ಪಡುವಂತೆ Jenkins ನ secret token ಸಂರಚಿತವಾಗಿರಿಸಿ, ಮತ್ತು Jenkins ಬಳಸುವ token ಅನ್ನು ಅಗತ್ಯ ಕನಿಷ್ಠಕ್ಕೆ ಸೀಮಿತಗೊಳಿಸಿ.
payload ದ ಗೌಪ್ಯತೆ ಅದನ್ನು ಹೊರಗಿಟ್ಟರೆ, ಸ್ವಯಂ-ಹೋಸ್ಟ್ ಮಾಡಿದ runner ಅಥವಾ ದೃಢೀಕೃತ ರಿವರ್ಸ್ ಸುರಂಗ ಉತ್ತರ.
relay ಈಗ ಮೂಲಸೌಕರ್ಯ, ಮತ್ತು ಅದು ಪ್ರಚೋದಿಸುವ build ಗೆ ಸಮಾನವಾದ ಪರಿಶೀಲನೆಗೆ ಅರ್ಹವಾಗಿದೆ. ಚಾನಲ್ ಸೋರಿಕೆಯಾದರೆ ಅದನ್ನು ರೊಟೇಟ್ ಮಾಡಿ, ಮತ್ತು ನೀವು ಕೊನೆಯದಾಗಿ ಲೈವ್ ವಿತರಣೆಯನ್ನು ಪರಿಶೀಲಿಸಿದ ದಿನಾಂಕವನ್ನು ಬರೆಯಿರಿ. ಆ ದಿನಾಂಕವನ್ನು ಚಾನಲ್ನ URL ಪಕ್ಕದಲ್ಲಿ runbook ನಲ್ಲಿ ಇಡಿ. ಒಂದು ವರ್ಷ ಯಾರೂ ಪರಿಶೀಲಿಸದ relay ಸಾರ್ವಜನಿಕ ಅಂತಿಮ ಬಿಂದುವಾಗಿದ್ದು ಯಾರಿಗೂ ಸೇರಿಲ್ಲ.