hugo-teek is loading...

实战-Docker方式安装Jenkins-20230319-测试成功-荐

最后更新于:

Day2-实战:Docker方式安装Jenkins-2023.3.19(测试成功)-荐

image-20230319112028407

目录

[toc]

实验环境

1win10笔记本
21台虚机 centos7.6 1810 vmworkstation 
3jenkins/jenkins:2.346.3-2-lts-jdk11
4docker 20.10.21
5
61台linux虚机(Jenkins用docker启动,agent直接跑在宿主机上。)

实验软件(无)

前置条件

  • docker环境已安装(本次版本:20.10.21)

  • 安装好jdk11

Jenkins是由Java语言开发的,运行需要提前安装好JDK。注意最新版本之后不在兼容JDK8而是需要JDK11+版本

Jenkins Server和Agent的运行都需要依赖JDK;(Jenkins是docker安装的,其环境里自带了java,但是jenkins agent环境也是需要安装jdk的,因此这里的测试虚机就需要安装jdk11了。)

image-20230319112001050

1、安装Jenkins Server

0.安装jdk环境

⚠️ 我的测试环境,是在一台虚机上跑了一个jenkins容器。但后面添加一个jenkins agent时,是将这个虚机作为其agent使用,因此这个虚机也要安装java环境的!!!

不管你是jenkins master节点,还是agent节点,都是需要jdk环境的!

 1#安装
 2[root@Devops6 ~]#yum install -y java-11-openjdk.x86_64
 3……
 4Installed:
 5  java-11-openjdk.x86_64 1:11.0.18.0.10-1.el7_9                                                                                                                                                   
 6
 7Dependency Installed:
 8  copy-jdk-configs.noarch 0:3.3-11.el7_9      cups-libs.x86_64 1:1.6.3-51.el7                             dejavu-fonts-common.noarch 0:2.33-6.el7       dejavu-sans-fonts.noarch 0:2.33-6.el7     
 9  fontconfig.x86_64 0:2.13.0-4.3.el7          fontpackages-filesystem.noarch 0:1.44-8.el7                 giflib.x86_64 0:4.1.6-9.el7                   graphite2.x86_64 0:1.3.10-1.el7_3         
10  harfbuzz.x86_64 0:1.7.5-2.el7               java-11-openjdk-headless.x86_64 1:11.0.18.0.10-1.el7_9      javapackages-tools.noarch 0:3.4.1-11.el7      libICE.x86_64 0:1.0.9-9.el7               
11  libSM.x86_64 0:1.2.2-2.el7                  libX11.x86_64 0:1.6.7-4.el7_9                               libX11-common.noarch 0:1.6.7-4.el7_9          libXau.x86_64 0:1.0.8-2.1.el7             
12  libXext.x86_64 0:1.3.3-3.el7                libXi.x86_64 0:1.7.9-1.el7                                  libXrender.x86_64 0:0.9.10-1.el7              libXtst.x86_64 0:1.2.3-1.el7              
13  libfontenc.x86_64 0:1.1.3-3.el7             libjpeg-turbo.x86_64 0:1.2.90-8.el7                         libxcb.x86_64 0:1.13-1.el7                    lksctp-tools.x86_64 0:1.0.17-2.el7        
14  pcsc-lite-libs.x86_64 0:1.8.8-8.el7         python-javapackages.noarch 0:3.4.1-11.el7                   python-lxml.x86_64 0:3.2.1-4.el7              ttmkfdir.x86_64 0:3.0.9-42.el7            
15  tzdata-java.noarch 0:2022g-1.el7            xorg-x11-font-utils.x86_64 1:7.5-21.el7                     xorg-x11-fonts-Type1.noarch 0:7.5-9.el7      
16
17Complete!
18
19#验证
20[root@Devops6 ~]#java --version
21openjdk 11.0.18 2023-01-17 LTS
22OpenJDK Runtime Environment (Red_Hat-11.0.18.0.10-1.el7_9) (build 11.0.18+10-LTS)
23OpenJDK 64-Bit Server VM (Red_Hat-11.0.18.0.10-1.el7_9) (build 11.0.18+10-LTS, mixed mode, sharing)

1.docker拉取jenkins镜像并启动容器

  • 下载jenkins镜像

安装Jenkins的Server节点,Server节点作为主控节点负责调度任务。

进入hub.docker.com官方的镜像仓库,下载Jenkins的镜像。

在dockerhub里搜索jenkins/jenkins,点击tag,搜索jdk11,然后选择jenkins:2.346.3-2-lts-jdk11即可:

https://hub.docker.com/

image-20230319180807179

1#这里先拿到安装命令,后面将开始安装
2docker pull jenkins/jenkins:2.346.3-2-lts-jdk11

DockerHUB上面有很多版本的镜像,大家根据镜像的更新时间,别找错了🌝🌝好多是4年前的…

我们使用最新LTS版本的Jenkins 2.346.3

1、宿主机上创建Jenkins数据目录

准备一个用于存储Jenkins数据的目录。因为我们用Docker安装的,容器的数据如果没有进行持久化当容器被删除了会出现数据丢失。

我们需要把Jenkins数据目录持久化,先去创建一个本地的目录并赋予权限。

1[root@Devops6 ~]#mkdir -p /data/devops6/jenkins_home
2[root@Devops6 ~]#chmod 777 -R  /data/devops6/jenkins_home

2、启动Jenkins容器

1docker run -itd --name jenkins \
2-p 8080:8080 \
3-p 50000:50000 \
4-e JAVA_OPTS="-Dorg.apache.commons.jelly.tags.fmt.timeZone='Asia/Shanghai" \
5--privileged=true  \
6--restart=always \
7-v /data/devops6/jenkins_home:/var/jenkins_home jenkins/jenkins:2.346.3-2-lts-jdk11

说明:

容器运行后需要开放端口。

8080默认Jenkins web页面使用的端口。

50000是Agent连接Server用到的通信端口。(后面安装JenkinsAgent的时候要注意网络连通性)

时区配置,定义默认的时区。(JAVA_OPTS环境变量为修改时间配置,否则可能jenkins的时间显示有问题!)

持久化数据目录,挂载本地的数据目录。

3、验证

启动Jenkins容器后。然后docker logs 看下日志。在日志中可以获取到激活Jenkins需要用到的密钥字符串。保存下来。

 1#查看jenkins容器运行状态
 2[root@Devops6 ~]#docker ps
 3CONTAINER ID   IMAGE                                 COMMAND                  CREATED         STATUS         PORTS                                                                                      NAMES
 4d6139736ef4c   jenkins/jenkins:2.346.3-2-lts-jdk11   "/usr/bin/tini -- /u…"   5 seconds ago   Up 3 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   jenkins
 5
 6#查看jenkins容器log
 7[root@Devops6 ~]#docker logs jenkins
 8……
 9Jenkins initial setup is required. An admin user has been created and a password generated.
10Please use the following password to proceed to installation:
11
12315798fcf926460fb1da173032767596
13
14This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
15……

2.访问web界面并输入密码

访问http://172.29.9.101:8080/开始配置Jenkins。

填写解锁密钥

image-20220412200907398

  • 可通过如下2种方式来获取密码:
 1(1)查看docker里的日志文件
 2[root@Devops6 ~]#docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
 3315798fcf926460fb1da173032767596
 4
 5(2)查看jenkins容器日志
 6[root@Devops6 ~]#docker logs jenkins
 7……
 8Jenkins initial setup is required. An admin user has been created and a password generated.
 9Please use the following password to proceed to installation:
10
11315798fcf926460fb1da173032767596
12
13This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
14……
  • 输入密码后,这边的加载一会儿,耐心等一会儿:

image-20220414161955864

image-20220414162029581

加载完成后,出现如下界面:

image-20220414162050826

3.自定义安装插件

  • 点击选择插件来安装

image-20220414162245963

点击,我们先不安装插件,待后续根据需求再安装相应的插件即可:

image-20230319183253533

  • 插件安装完成后,出现如下界面:

image-20220414162714531

  • 自定义安装插件,这里取消安装推荐的插件。只选择语言插件进行安装(本次也不打算安装汉化插件,直接使用jenkins的英文界面了)。(此处不应安装太多的插件,可能会出现网络原因导致安装失败。我们先安装好Jenkins后面用到哪些插件的时候再选择性的安装好)

image-20230319183913142

安装进度也可以通过docker logs查询日志获取。

4.创建一个管理员用户

  • 账户:admin 密码:admin ,输入完成后,点击保存并完成

image-20230319183430336

  • 点击保存并完成

image-20230319183447996

  • 点击开始使用jenkins

image-20230319183502703

这里就进入到了jenkins的主界面:

image-20230319183517057

5、配置Jenkins插件源

1.本次新版本的插件源好像是不用变的

当前jenkins版本:jenkins/jenkins:2.346.3-2-lts-jdk11

  • Jenkins插件源配置地方

image-20230319184250699

image-20230319184312192

image-20230319184718598

https://updates.jenkins.io/update-center.json

  • 如何测试这个源是否可以正常使用

如果在自己浏览器里可以正常访问到这个url的话,那么就证明这个插件源是可以被正常使用的。

https://updates.jenkins.io/update-center.json

image-20230319184743534

可以看到,当前这个插件源是可以被正常使用的。

  • 另外,也可以在Available点击这里的check now,如果出现可用的插件的话,那么就说明这个插件源是可用的。

image-20230319185202814

2.如果是内网机器,可以考虑使用nexus3做一个代理

企业如果限制外网访问,需要通过Nexus代理仓库的方式缓存到内网;

如果是内网机器,可以考虑使用nexus3做一个代理,将这里的url换成代理nexus3的地址。

image-20230319184953016

3.手动上传插件

  • Jenkins上传插件位置

image-20230319184250699

image-20230319184312192

image-20230319184335772

  • Jenkins插件下载位置

https://plugins.jenkins.io/

image-20230319184531090

4.更改插件源的方法

这个测试的jenkins版本为:jenkins/jenkins:2.332.2-centos7-jdk8

可以使用aliyun、清华源中的插件源;

可以使用Jenkins中文社区中的插件源;

  • jenkins官方中文社区源当时测试在这个jenkins版本下用不了!

按老师提供的这个方法,貌似这个源地址对这个版本的jenkins是失效了:。。。(老师也是没测试出来。。。,最后直接更换清华源了!)

image-20220411204501950

image-20220414164509887

image-20220414164532649

image-20220414164454098

image-20220414164437545

image-20220414164803805

  • 因此这里进行更换清华源:

输入清华源链接地址:https://mirrors.tuna.tsinghua.edu.cn/

image-20220414165110791

点击updates

image-20220414165147663

看下自己当前jenkins版本:Jenkins 2.332.2)

image-20220414165332771

这里没有Jenkins 2.332.2,用相近的版本也行:

image-20220414165423917

点击update-center.json,然后复制其链接地址即可:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-stable-2.332.1/update-center.json

image-20220414165505933

  • 得到清清华源地址后,我们再次按上面方式进行配置

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-stable-2.332.1/update-center.json

image-20220414165713879

验证,点击立即获取

image-20220414165746977

可以看到,这个源地址是可以用的:

image-20220414165803264

2、安装配置Jenkins Agent

agent就是真正去执行任务的节点。

1.新建节点,并填写参数配置

  • 首先,我们需要在JenkinsServer上面添加节点。

点击Manege Jenkins-Manage Nodes and Clouds

image-20230319222550444

点击+ New Node

image-20230319222634026

填写Node name,Type选择Permanent Agent,点击Create

image-20230319222718246

配置执行器数量远程工作目录标签Usage内容,其余不变,填写完成后,点击保存:

image-20230319222913051

image-20230319222932190

image-20230319222950353

⚠️ Number of executors

你可以这样理解,我在jenkins上运行一个job,它就会占用一个执行器。它所运行作业的数量,作业的并发数。 所以你在调并发的时候,如果出现队列在排队的情况,那可能是因为这里的执行器数量设置不够!

点击Save后,就可以看到创建好的agent节点了:

image-20230319223345308

  • 另外:如果这里配置了自定义工作目录的话,那么这里的值就会替代上面我们指定的远程工作目录

image-20230319223238283

2.获取agent启动程序并运行agent

  • 在首页点击刚才新建的节点build01

image-20230319223424596

  • 这里agent有2种方式可以连接到jenkins master,我们使用第二种方式:

image-20230319223450720

1echo 0af95ad221aa67897c9cb50ebc57bee4c1cb49e7f8bb42fb65b835cabcae2303 > secret-file
2java -jar agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @secret-file -workDir "/opt/jenkinsagent"
  • 右键复制agent.jar包,稍后在我们的虚机里将其下载下来:

image-20230319223545189

1http://172.29.9.101:8080/jnlpJars/agent.jar
  • 创建agent目录并下载agent.jar包:
 1[root@Devops6 ~]#cd /data/devops6/
 2[root@Devops6 devops6]#ls
 3jenkins_home
 4[root@Devops6 devops6]#mkdir jenkins_agent
 5[root@Devops6 devops6]#cd jenkins_agent/
 6
 7[root@Devops6 jenkins_agent]#wget http://172.29.9.101:8080/jnlpJars/agent.jar
 8--2023-03-19 22:37:29--  http://172.29.9.101:8080/jnlpJars/agent.jar
 9Connecting to 172.29.9.101:8080... connected.
10HTTP request sent, awaiting response... 200 OK
11Length: 1522481 (1.5M) [application/java-archive]
12Saving to: ‘agent.jar’
13
14100%[================================================================================================================================================================>] 1,522,481   --.-K/s   in 0.04s   
15
162023-03-19 22:37:29 (38.6 MB/s) - ‘agent.jar’ saved [1522481/1522481]
17
18[root@Devops6 jenkins_agent]#ll
19total 1488
20-rw-r--r-- 1 root root 1522481 Mar 19 18:27 agent.jar
  • 编写启动脚本:
1[root@Devops6 jenkins_agent]#pwd
2/data/devops6/jenkins_agent
3
4[root@Devops6 jenkins_agent]#echo 0af95ad221aa67897c9cb50ebc57bee4c1cb49e7f8bb42fb65b835cabcae2303 > secret-file
5[root@Devops6 jenkins_agent]#vim start.sh #将刚才网页出现的第二种方式的代码拷贝进去
6#!/bin/bash
7java -jar agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @secret-file -workDir "/opt/jenkinsagent" 
  • 启动脚本并查看:
 1[root@Devops6 jenkins_agent]#pwd
 2/data/devops6/jenkins_agent
 3[root@Devops6 jenkins_agent]#ls
 4agent.jar  start.sh
 5[root@Devops6 jenkins_agent]#sh start.sh 
 6Mar 19, 2023 10:39:45 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
 7INFO: Using /opt/jenkinsagent/remoting as a remoting work directory
 8Mar 19, 2023 10:39:45 PM org.jenkinsci.remoting.engine.WorkDirManager setupLogging
 9INFO: Both error and output logs will be printed to /opt/jenkinsagent/remoting
10Mar 19, 2023 10:39:45 PM hudson.remoting.jnlp.Main createEngine
11INFO: Setting up agent: build01
12Mar 19, 2023 10:39:45 PM hudson.remoting.jnlp.Main$CuiListener <init>
13INFO: Jenkins agent is running in headless mode.
14Mar 19, 2023 10:39:45 PM hudson.remoting.Engine startEngine
15INFO: Using Remoting version: 4.13.3
16Mar 19, 2023 10:39:45 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
17INFO: Using /opt/jenkinsagent/remoting as a remoting work directory
18Mar 19, 2023 10:39:45 PM hudson.remoting.jnlp.Main$CuiListener status
19INFO: Locating server among [http://172.29.9.101:8080/]
20Mar 19, 2023 10:39:46 PM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
21INFO: Remoting server accepts the following protocols: [JNLP4-connect, Ping]
22Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
23INFO: Agent discovery successful
24  Agent address: 172.29.9.101
25  Agent port:    50000 #注意这里
26  Identity:      3a:67:65:d5:5b:d8:e5:f4:fa:4b:1a:9c:93:d9:36:0d
27Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
28INFO: Handshaking
29Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
30INFO: Connecting to 172.29.9.101:50000
31Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
32INFO: Trying protocol: JNLP4-connect
33Mar 19, 2023 10:39:46 PM org.jenkinsci.remoting.protocol.impl.BIONetworkLayer$Reader run
34INFO: Waiting for ProtocolStack to start.
35Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
36INFO: Remote identity confirmed: 3a:67:65:d5:5b:d8:e5:f4:fa:4b:1a:9c:93:d9:36:0d
37Mar 19, 2023 10:39:46 PM hudson.remoting.jnlp.Main$CuiListener status
38INFO: Connected #注意这里
  • 此时刷新下web页面,我么可以看到bulid01 agent节点状态正常了:

image-20230319224053860

  • 但是,现在有个问题,当我们把这个脚本退出后,这个agent程序就退出了:

image-20230319224115043

image-20230319224130682

  • 此时,该怎么办呢?可以在启动脚本里修改下配置,使其脚本在后台运行:
 1#改进脚本
 2[root@Devops6 jenkins_agent]#pwd
 3/data/devops6/jenkins_agent
 4[root@Devops6 jenkins_agent]#vim start.sh 
 5#!/bin/bash
 6nohup java -jar agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @secret-file -workDir "/opt/jenkinsagent" &
 7
 8#我们再次启动脚本,然后刷新网页观察现象
 9[root@Devops6 jenkins_agent]#sh start.sh 
10[root@Devops6 jenkins_agent]#nohup: appending output to ‘nohup.out’
11
12[root@Devops6 jenkins_agent]#
13[root@Devops6 jenkins_agent]#ps -aux|grep java
141000       7273 19.2 36.1 3063932 673612 pts/0  Sl+  22:50   0:44 java -Duser.home=/var/jenkins_home -Djenkins.model.Jenkins.slaveAgentPort=50000 -Dhudson.lifecycle=hudson.lifecycle.ExitLifecycle -jar /usr/share/jenkins/jenkins.war
15root      16841 15.1  6.2 3192696 115852 pts/0  Sl   22:53   0:03 java -jar agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @secret-file -workDir /opt/jenkinsagent
16root      16901  0.0  0.0 112708   976 pts/0    S+   22:54   0:00 grep --color=auto java

image-20230319225510805

  • 设置开机启动脚本

⚠️ 注意:如果使用rc.local和crontab设置开机启动的话,是没有效果的;这里采用systemd方法来设置服务开机启动。

 1[root@Devops6 ~]#vim /etc/systemd/system/jenkins-agent.service
 2[Unit]
 3Description=Jenkins Agent service
 4After=network.target
 5
 6[Service]
 7Type=simple
 8User=root
 9WorkingDirectory=/opt/jenkinsagent
10ExecStart=/usr/bin/java -jar /data/devops6/jenkins_agent/agent.jar -jnlpUrl http://172.29.9.101:8080/computer/build01/jenkins-agent.jnlp -secret @/data/devops6/jenkins_agent/secret-file
11Restart=on-failure
12
13[Install]
14WantedBy=multi-user.target
1systemctl daemon-reload
2systemctl enable jenkins-agent

image-20230320123958784

重启机器后测试:(符合预期)

image-20230320124059964

image-20230320124123814

也是可以通过sytemctl命令来启动/重启/关停这个服务的:

1systemctl start/restart jenkins-agent
2systemctl stop jenkins-agent

至此,jenkins server节点和agent节点已全部安装成功。

  • 此时,给虚机做一个快照哦。

image-20230320125004206

测试结束。😘

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码 x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号 《云原生架构师实战》

image-20230107215126971

🍀 语雀

https://www.yuque.com/xyy-onlyone

image-20230306221144511

🍀 csdn https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎 https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

image-20230320125545393

推荐使用微信支付
微信支付二维码
推荐使用支付宝
支付宝二维码
最新文章

文档导航