安装环境
- 组件使用:jenkins+nexus+docker+openjdk+maven+git
- 单阿里云服务器配置如下
CPU&内存:2核8 GiB
操作系统:Alibaba Cloud Linux 2.1903 LTS 64位
安装Docker
在了解了 Docker 的作用后,我们来开始安装 Docker。在开始安装之前,需要安装 device-mapper-persistent-data 和 lvm2 两个依赖。
device-mapper-persistent-data 是 Linux 下的一个存储驱动, Linux 上的高级存储技术。 Lvm 的作用则是创建逻辑磁盘分区。这里我们使用 CentOS 的 Yum 包管理器安装两个依赖:
yum install -y yum-utils device-mapper-persistent-data lvm2
依赖安装完毕后,我们将阿里云的 Docker 镜像源添加进去。可以加速 Docker 的安装。
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce -y
安装完毕,我们可以先查看一下docker版本
docker -v
systemctl start docker
systemctl enable docker
配置阿里云镜像加速器
在使用 systemctl 启动来启动 Docker 了。systemctl 是 Linux 的进程管理服务命令,他可以帮助我们启动 docker
systemctl start docker
systemctl enable docker
安装OpenJDK
因为jenkins与nexus运行都依赖于java虚拟机所以先安装openjdk环境,这里要强调一下不仅仅java语言编写的项目运行在jdk虚拟机上,只要项目所开发使用的语言满足java虚拟机规范,就可以在其上面运行
yum install -y java
安装git
yum install -y git
安装Jenkins
由于 Yum 源不自带 Jenkins 的安装源,于是我们需要自己导入一份 Jenkins 安装源进行安装。导入后,使用 Yum 命令安装即可
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins
我们直接调用 service jenkins start 启动 Jenkins 即可
service jenkins start
# service jenkins restart restart 重启 Jenkins
# service jenkins restart stop 停止 Jenkins
查看安装目录已经运行状态
[root@master ~]# whereis jenkins
jenkins: /usr/bin/jenkins /usr/share/jenkins
[root@master ~]# systemctl status jenkins
● jenkins.service - Jenkins Continuous Integration Server
Loaded: loaded (/usr/lib/systemd/system/jenkins.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2022-03-19 14:10:46 CST; 5s ago
Main PID: 7878 (java)
CGroup: /system.slice/jenkins.service
└─7878 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=%C/jenkins/war --httpPort=8080
Mar 19 14:10:45 master jenkins[6878]: 2022-03-19 06:10:45.064+0000 [id=26] INFO jenkins.InitReactorRunner$1#onAttained: Augmented all extensions
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.545+0000 [id=29] INFO jenkins.InitReactorRunner$1#onAttained: System config loaded
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.546+0000 [id=29] INFO jenkins.InitReactorRunner$1#onAttained: System config adapted
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.633+0000 [id=29] INFO jenkins.InitReactorRunner$1#onAttained: Loaded all jobs
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.654+0000 [id=30] INFO jenkins.InitReactorRunner$1#onAttained: Configuratio...s updated
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.718+0000 [id=44] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$1: Start... metadata
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.723+0000 [id=44] INFO hudson.util.Retrier#start: Attempt #1 to do the acti...es server
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.839+0000 [id=29] INFO jenkins.InitReactorRunner$1#onAttained: Completed initialization
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.865+0000 [id=20] INFO hudson.lifecycle.Lifecycle#onReady: Jenkins is fully...d running
Mar 19 14:10:46 master systemd[1]: Started Jenkins Continuous Integration Server.
Hint: Some lines were ellipsized, use -l to show in full.
配置Jenkins 启动端口
vim /usr/lib/systemd/system/jenkins.service
jenkins启动端口8080,默认用户为jenkins 用户组为jenkins
配置阿里云安全组,将28080端口暴露出去
# 修改完配置,重启jenkins
[root@master ~]# systemctl restart jenkins
# 再次
[root@master ~]# systemctl status jenkins
● jenkins.service - Jenkins Continuous Integration Server
Loaded: loaded (/usr/lib/systemd/system/jenkins.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2022-03-19 14:10:46 CST; 5s ago
Main PID: 6878 (java)
CGroup: /system.slice/jenkins.service
└─6878 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=%C/jenkins/war --httpPort=28080
# 可以看到,程序启动参数中 httpPort=28080
Mar 19 14:10:45 master jenkins[6878]: 2022-03-19 06:10:45.064+0000 [id=26] INFO jenkins.InitReactorRunner$1#onAttained: Augmented all extensions
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.545+0000 [id=29] INFO jenkins.InitReactorRunner$1#onAttained: System config loaded
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.546+0000 [id=29] INFO jenkins.InitReactorRunner$1#onAttained: System config adapted
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.633+0000 [id=29] INFO jenkins.InitReactorRunner$1#onAttained: Loaded all jobs
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.654+0000 [id=30] INFO jenkins.InitReactorRunner$1#onAttained: Configuratio...s updated
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.718+0000 [id=44] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$1: Start... metadata
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.723+0000 [id=44] INFO hudson.util.Retrier#start: Attempt #1 to do the acti...es server
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.839+0000 [id=29] INFO jenkins.InitReactorRunner$1#onAttained: Completed initialization
Mar 19 14:10:46 master jenkins[6878]: 2022-03-19 06:10:46.865+0000 [id=20] INFO hudson.lifecycle.Lifecycle#onReady: Jenkins is fully...d running
Mar 19 14:10:46 master systemd[1]: Started Jenkins Continuous Integration Server.
Hint: Some lines were ellipsized, use -l to show in full.
# 查看28080端口是否被jenkins占用
[root@master ~]# lsof -i:28080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 6878 root 126u IPv6 4957350 0t0 TCP *:28080 (LISTEN)
[root@master ~]#
根据服务器的公网ip:28080即可访问
若是不生效 ,关掉jenkins:systemctl stop jenkins
单独执行: /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=%C/jenkins/war --httpPort=28080
然后重启jenkins:systemctl restart jenkins
访问成功后,界面提示获取登录密码方式,将密码复制进输入框即可
cat /var/lib/jenkins/secrets/initialAdminPassword
安装插件,因为 Jenkins 插件服务器在国外,所以速度不太理想。我们需要更换为清华大学的 Jenkins 插件源后,再安装插件,所以先不要点安装插件。
更换方法很简单。进入服务器,将 /var/lib/jenkins/updates/default.json 内的插件源地址替换成清华大学的源地址,将 google 替换为 baidu 即可
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /var/lib/jenkins/updates/default.json
接着点击 安装推荐的插件 即可。安装完毕后出现主页面
安装Maven
安装Nexus
下载nexus
链接: pan.baidu.com/s/1Kb__4UoU… 提取码: 6cbr
开始安装
# 创建软件安装文件夹
[root@master ~]# mkdir /usr/local/soft
[root@master ~]# cd /usr/local/soft/
# 将nexus-3.29.0-02-unix.tar.gz 放入 /usr/local/soft/路径下,并解压
[root@master soft]# tar -zxvf nexus-3.29.0-02-unix.tar.gz
# 解压完成
[root@master soft]# ls -ll
total 160004
drwxr-xr-x 9 root root 4096 Mar 12 18:34 nexus-3.29.0-02
-rw-r--r-- 1 root root 163835797 Dec 13 2020 nexus-3.29.0-02-unix.tar.gz
drwxr-xr-x 3 root root 4096 Mar 12 18:34 sonatype-work
# 配置nexus启动端口
[root@master etc]# cd /usr/local/soft/nexus-3.29.0-02/etc/
[root@master etc]# ls -ll
total 24
drwxr-xr-x 2 root root 4096 Mar 12 18:34 fabric
drwxr-xr-x 2 root root 4096 Mar 12 18:34 jetty
drwxr-xr-x 3 root root 4096 Mar 12 18:34 karaf
drwxr-xr-x 2 root root 4096 Mar 12 18:34 logback
-rw-r--r-- 1 root root 384 Mar 12 18:35 nexus-default.properties
drwxr-xr-x 2 root root 4096 Mar 12 18:34 ssl
[root@master etc]# vim nexus-default.properties
如果你的操作系统内存吃紧,nexus可以配置虚拟机参数启动如下:
[root@master bin]# pwd
/usr/local/soft/nexus-3.29.0-02/bin
[root@master bin]# cat nexus.vmoptions
-Xms2703m # 这里启动时候要求给虚拟机提供2g的空间,改成1024
-Xmx2703m # 这里启动时候要求给虚拟机提供2g的空间,改成1024
-XX:MaxDirectMemorySize=2703m
-XX:+UnlockDiagnosticVMOptions
-XX:+LogVMOutput
-XX:LogFile=../sonatype-work/nexus3/log/jvm.log
-XX:-OmitStackTraceInFastThrow
-Djava.net.preferIPv4Stack=true
-Dkaraf.home=.
-Dkaraf.base=.
-Dkaraf.etc=etc/karaf
-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties
-Dkaraf.data=../sonatype-work/nexus3
-Dkaraf.log=../sonatype-work/nexus3/log
-Djava.io.tmpdir=../sonatype-work/nexus3/tmp
-Dkaraf.startLocalConsole=false
#
# additional vmoptions needed for Java9+
#
# --add-reads=java.xml=java.logging
# --add-exports=java.base/org.apache.karaf.specs.locator=java.xml,ALL-UNNAMED
# --patch-module=java.base=lib/endorsed/org.apache.karaf.specs.locator-4.2.9.jar
# --patch-module=java.xml=lib/endorsed/org.apache.karaf.specs.java.xml-4.2.9.jar
# --add-opens=java.base/java.security=ALL-UNNAMED
# --add-opens=java.base/java.net=ALL-UNNAMED
# --add-opens=java.base/java.lang=ALL-UNNAMED
# --add-opens=java.base/java.util=ALL-UNNAMED
# --add-opens=java.naming/javax.naming.spi=ALL-UNNAMED
# --add-opens=java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED
# --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED
# --add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED
# --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED
# --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED
# --add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED
#
# comment out this vmoption when using Java9+
#
-Djava.endorsed.dirs=lib/endorsed
# 启动nexus
[root@master bin]# cd /usr/local/soft/nexus-3.29.0-02/bin/
[root@master bin]# ./nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Starting nexus
[root@master bin]# lsof -i:28081
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 7368 root 756u IPv4 4990435 0t0 TCP *:28081 (LISTEN)
[root@master bin]#
nexus运行成功,配置阿里云安全组,将28081端口暴露出去(同上配置步骤),根据服务器的公网ip:28081即可访问
将文件中获取到的密码输入进去,登录用户名是 admin
cat /opt/nexus/sonatype-work/nexus3/admin.password
登录成功
构建项目
jenkins
创建任务
配置凭证你的gitee账号密码,这凭证账号用于去你的gitee仓库拉取项目代码使用
配置任务操作如下:
- 选择参数化构建
- 将当前任务与gitee仓库中的项目进行关联,通过项目https地址与登录gitee的账号密码
- 并且指定执行项目内的Jenkinsfile脚本
nexus
创建docker私有仓库,其中做用就是jenkins在执行Jenkinsfile脚本的时候,会将拉取gitee项目执行项目中的Jenkinsfile脚本,将项目打成jar并且构建成docker镜像发送到nexus的docker私有仓库
docker私有仓库完成后,如果私服对外访问地址为HTTP的话,还需要在服务器配置一下才可以使用(HTTPS不需要配置)。
找到 daemon.json 文件,该文件描述了当前 docker 配置的镜像加速地址,和配置过的私服地址。
vi /etc/docker/daemon.json
找到 insecure-registries 字段,如果不存在就自己添加一个。值是数组类型,将你的制品库地址填写上去。例如:
[root@master bin]# cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://xxxxxx.mirror.aliyuncs.com"
],
"insecure-registries": [
"121.55.129.213:28082"
],
"exec-opts": [
"native.cgroupdriver=systemd"
]
}
[root@master bin]# docker login 121.55.129.213:28082
# 输入你的nexus登录账号密码即可
springboot
创建springboot项目,并且将其推送到gitee仓库
执行任务
查看构建日志