[CI/CD笔记]Jenkins分布式Agent搭建

1,030 阅读1分钟

Jenkins单机架构

Jenkins分布式架构

参考

简介

1.png

来源:www.edureka.co/blog/jenkin…

  • Controller-Agent连接方式有多种

参考:

  1. The SSH connector

2.png

  1. The inbound connector(原JNLP-TCP)

3.png

  1. The JNLP-WebSocket connector

4.png

a) JNLP-WebSocket方式最大的优势在于方便统一配置Controller所在服务的Proxy和Load Balence:docs.cloudbees.com/docs/cloudb…

b) Jenkins默认开启WebSocket方式,可以通过CLI工具测试:www.jenkins.io/blog/2020/0…

java -jar jenkins-cli.jar -s YOUR_JENKINS_WEB_URL -webSocket -auth YOUR_USER_ID:YOUR_API_TOKEN help

c) Jenkins独立运行时能WebSocket能访问,在Tomcat/GlassFish中访问需要注意开启容器的WebSocket接口

macOSAgent

参考:medium.com/@caseyg1204…

  • 在Jenkins的System配置页面,调整Jenkins URL为相应URL

1.png

  • 在Jenkins的Agent管理页面中添加Agent配置
    • 选择Launchagent byconnectingittothemaster
    • 勾选Use WebSocket

2.png

  • 在Agent状态页面中,下载agent.jar到本地,复制JNLP配置地址
java -jar agent.jar -jnlpUrl YOUR_JNLP_URL -secret YOUR_AGENT_SECRET -workDir YOUR_AGENT_WORK_DIR

3.png

  • 如下创建com.jenkins.ci.plist文件(请自行替换以下变量)
    • YOUR_USER_NAME
    • YOUR_AGENT_JAR_PATH
    • YOUR_JNLP_URL
    • YOUR_AGENT_SECRET
    • YOUR_AGENT_WORK_DIR
    • (可选)YOUR_AGENT_LOG_CONFIG
    • YOUR_AGENT_STD_OUT
    • YOUR_AGENT_STD_ERR
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>com.jenkins.ci</string>
	<key>UserName</key>
	<string>YOUR_USER_NAME</string>
	<key>SessionCreate</key>
	<true/>
	<key>ProgramArguments</key>
	<array>
		<string>java</string>
		<string>-Djava.awt.headless=true</string>
		<string>-jar</string>
		<string>YOUR_AGENT_JAR_PATH</string>
		<string>-jnlpUrl</string>
		<string>YOUR_JNLP_URL</string>
		<string>-secret</string>
		<string>YOUR_AGENT_SECRET</string>
		<string>-workDir</string>
		<string>YOUR_AGENT_WORK_DIR</string>
		<string>-loggingConfig</string>
		<string>YOUR_AGENT_LOG_CONFIG</string>
	</array>
	<key>KeepAlive</key>
	<true/>
	<key>StandardOutPath</key>
	<string>YOUR_AGENT_STD_OUT</string>
	<key>StandardErrorPath</key>
	<string>YOUR_AGENT_STD_ERR</string>
</dict>
</plist>
  • (可选)依照YOUR_AGENT_LOG_CONFIG创建文件(如logging.properties),调整日志等级

参考:support.cloudbees.com/hc/en-us/ar…

# -Djava.util.logging.config.file=logging.properties
.level = ALL
handlers= java.util.logging.FileHandler
java.util.logging.FileHandler.level=ALL
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.FileHandler.pattern=support/jenkins-agent-%u.log
java.util.logging.FileHandler.limit=10000000
java.util.logging.FileHandler.count=10
javax.jms.connection.level=INFO
hudson.level=INFO
hudson.remoting.Channel.level=FINE
hudson.remoting.FileSystemJarCache.level=INFO
hudson.remoting.jnlp.level=FINE
hudson.remoting.RemoteClassLoader.level=INFO
jenkins.slaves.level=FINE
hudson.slaves.level=FINE
org.jenkinsci.remoting.engine.level=FINE
jenkins.AgentProtocol.level=FINE
  • 配置plist文件,加载plist并启动JenkisnAgent服务
mv com.jenkins.ci.plist /Library/LaunchDaemons/com.jenkins.ci.plist
sudo chownroot/Library/LaunchDaemons/com.jenkins.ci.plist
sudochmod 664 /Library/LaunchDaemons/com.jenkins.ci.plist
sudo launchctl load /Library/LaunchDaemons/com.jenkins.ci.plist
sudo launchctl startcom.jenkins.ci
  • 确认Jenkisn Agent服务情况
ps-ef | grepjenkins

WindowsAgent

参考:wiki.jenkins.io/display/JEN…

TODO

注意事项

The service will be launched as a LaunchAgent. By using LaunchAgents, the builds will be able to perform UI interactions, making it possible to run and test in the iOS simulator.

This is the most convenient set up on Windows, but does not allow you to run programs that require display interaction (such as GUI tests).

参考