一、安装 java
将jdk压缩包上传到linux服务器,放哪里都可以,建议建一个专门放软件的文件夹/usr/local/java,解压:
# 解压
tar -zxvf jdk-8u181-linux-x64.tar.gz
# 配置环境变量,进到/etc/profile里修改
vim /etc/profile
在文件末尾追加如下内容(注意jdk安装目录换成你的实际情况,查看你当前所在的目录可以用pwd命令):
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
# 保存文件并使其生效
source /etc/profile
# 检查版本已确认安装成功
java -version
二、安装 maven
需要用到wget文件,现在基本很多云服务器都有帮你装好,如果没有安装的话使用这个命令安装:
yum install -y wget
1.下载
# 下载到当前目录
wget https://mirrors.cnnic.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz --no-check-certificate
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ToV6xlur-1691659953506)(file:///E:\备份\自动化运维\ksohtml18428\wps1.jpg)]
# 解压
tar -zxvf apache-maven-3.6.3-bin.tar.gz
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dqxoVCdT-1691659953508)(file:///E:\备份\自动化运维\ksohtml18428\wps2.jpg)]
# 编辑配置文件
vim /etc/profile
在文件末尾追加如下内容(同样注意目录换成你的实际情况):
export M2_HOME=/usr/local/maven/apache-maven-3.6.3
export PATH=$PATH:$M2_HOME/bin
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gmolc8rM-1691659953509)(file:///E:\备份\自动化运维\ksohtml18428\wps3.jpg)]
# 保存文件并使其生效
source /etc/profile
# 检查版本已确认安装成功
mvn -v
2.配置
创建一个本地文件夹当作maven仓库,后面maven下载的依赖会放在这个文件夹中,我这里叫maven_repo;路径为:/usr/local/maven/maven_repo
mkdir /MavenRepository
在解压的maven文件夹中,有个conf/settings.xml文件,需要编辑里面的内容:
# 找到该文件所在目录
cd apache-maven-3.6.3/
cd conf
ls
# 编辑该文件
vim settings.xml
将该配置在下图所在位置填入:
<localRepository>/usr/local/maven/maven_repo </localRepository>
接下来还在这个文件中配置阿里云镜像,因为maven很多依赖在国外,配置阿里云的话可以提高下载速度,如果你觉得没必要,可以不配。
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
三、安装 jenkins
1、本地安装
上一步操作完了之后是在maven的文件夹下的,所以接下来的操作记得回到安装软件的目录。
# 下载(yum方式安装)
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
#(rpm方式安装)
wget -O jenkins-2.319.3-1.1.noarch.rpm https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.319.3-1.1.noarch.rpm --no-check-certificate
# 安装
#Yum安装:
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install -y jenkins
#rpm安装:
rpm -ivh jenkins-2.346.1-1.1.noarch.rpm
# 修改配置
vim /etc/sysconfig/jenkins
***把用户修改为root即可***
***JENKINS_USER="root"***
***其实对应端口默认是8080,我这里改为了8779***
***JENKINS_PORT="8779"***
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hzOleyhL-1691659953510)(file:///E:\备份\自动化运维\ksohtml18428\wps4.jpg)]
# 建立软连接
ln -s /software/jdk1.8.0_333/bin/java /usr/bin/java
# 启动Jenkins
systemctl start Jenkins
####设置开机自启
systemctl enable jenkins.service
这里顺带记录两个命令:
# 查看jenkins状态
systemctl status jenkins.service
# 查看jenkins日志
journalctl -xe
初始化jenkins 访问http://ip:8779/,出现如下画面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Ovs7vep-1691659953510)(file:///E:\备份\自动化运维\ksohtml18428\wps5.jpg)]
查看初始化密码,输入,点击继续
cat /var/lib/jenkins/secrets/initialAdminPassword
使用rpm安装时报错:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HjiVKygE-1691659953511)(file:///E:\备份\自动化运维\ksohtml18428\wps6.jpg)]
修改/var/lib/jenkin/hudson.model.UpdateCenter.xml(镜像源修改为清华大学的)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RMt3SfwW-1691659953512)(file:///E:\备份\自动化运维\ksohtml18428\wps7.jpg)]
点击安装推荐的插件
全局工具配置
前面装的环境,这个时候要配置到jenkins来了。
点击系统管理 —> 全局工具配置
2、配置maven配置文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-StvoF0MS-1691659953513)(file:///E:\备份\自动化运维\ksohtml18428\wps8.jpg)]
3、配置jdk
使用如下命令获取java程序位置:
echo $JAVA_HOME
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vvabTWUw-1691659953513)(file:///E:\备份\自动化运维\ksohtml18428\wps9.jpg)]
4、配置git
5、配置maven程序
使用如下命令获取maven程序位置:
echo $M2_HOME
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-scvk0p3C-1691659953514)(file:///E:\备份\自动化运维\ksohtml18428\wps10.jpg)]
6、配置Ansible程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zpZYBP7N-1691659953515)(file:///E:\备份\自动化运维\ksohtml18428\wps11.jpg)]
7、安装部署用的插件
-
(1)Publish Over SSH
-
(2)Deploy to container
-
(3)gitea
-
(4)Maven Integration
-
(5)Pipeline Maven Integration
-
(6)Generic Webhook Trigger Plugin
-
(7)Ansible
四、安装Nexus
1、本地安装
(1) 上传nexus3的压缩包至以下目录 /usr/local/nexus
(2) 解压缩
tar -zvxf nexus-3.2.0-01-unix.tar.gz
(3) 进入安装目录
cd /usr/local/nexus
(4) 执行如下目录:
/bin/nexus start
当出现下面的提示的时候表示安装成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dGMLh7wP-1691659953516)(file:///E:\备份\自动化运维\ksohtml18428\wps12.jpg)]
(5) 修改防火墙策略 打开8081端口
vim /etc/sysconfig/iptables
(6) 添加以下命令:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT
2、docker安装
(1) 安装Nexus
docker run -d --name nexus3 --restart=always -p 8081:8081 -p 5000:5000 --mount src=nexus-data,target=/nexus-data sonatype/nexus3
注:8081端口是开放给后台使用的,5000端口是开放给仓库使用的,换成别的端口也可以,只要配置docker仓库时填写开放的端口就可以了
看到如下,说明安装成功:
Unable to find image 'sonatype/nexus3:latest' locally
latest: Pulling from sonatype/nexus3
c65691897a4d: Pull complete
641d7cc5cbc4: Pull complete
c508b13320cd: Pull complete
79e3bf9d3132: Pull complete
Digest: sha256:2c33632ccd8f8c5f9023a3d7f5f541e271833e402219f8c5a83a29d1721457ca
Status: Downloaded newer image for sonatype/nexus3:latest
8b2d1ab8e59710d1aaf78c84ce2defca21b837092943266f5a55f1106b875fc6
(2) 查看密码
docker exec nexus3 cat /nexus-data/admin.password
看到如下,记录此密码,待会登录后台需要:f6dd0215-0445-46a1-8e90-e062dd04b3e0
3、重启防火墙:
service iptables restart
#(这里防火墙也有可能是firewalld,不是iptable)
4、访问nexus
访问nexus即http://ip:8081(如果出现404,就访问http://ip:8081/nexus)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ETygpgkg-1691659953516)(file:///E:\备份\自动化运维\ksohtml18428\wps13.jpg)]
上述页面就代表访问成功,然后使用账号密码登录;账号:admin 密码:admin123
5、创建仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VESLUt1O-1691659953517)(file:///E:\备份\自动化运维\ksohtml18428\wps14.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zDCgwYkq-1691659953518)(file:///E:\备份\自动化运维\ksohtml18428\wps15.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HHo2P0LX-1691659953518)(file:///E:\备份\自动化运维\ksohtml18428\wps16.jpg)]
至此,创建仓库完成
6、修改配置文件
vi /etc/docker/daemon.json
#添加
"insecure-registries":["ip:5000"]
7、重启docker
systemctl restart docker
8、修改防火墙策略
#修改防火墙策略开放5000端口
vim /etc/sysconfig/iptables
#添加
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT
9、重启防火墙
service iptables restart
10、现在可以正常登录私服
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lpBmhaMO-1691659953519)(file:///E:\备份\自动化运维\ksohtml18428\wps17.jpg)]
11、进行push和pull操作
五、配置docker的TSL和ca认证
制作证书及秘钥,我们需要使用OpenSSL制作CA机构证书、服务端证书和客户端证书,以下操作均在安装Docker的Linux服务器上进行。
1、生成的证书和秘钥
创建一个目录用于存储生成的证书和秘钥
mkdir /docker-ca && cd /docker-ca
2、生成文件为ca-key.pem
创建CA证书私钥,期间需要输入两次密码,生成文件为ca-key.pem
openssl genrsa -aes256 -out ca-key.pem 4096
3、生成文件为ca.pem
根据私钥创建CA证书,期间需要输入上一步设置的私钥密码,然后依次输入国家是 CN,省例如是Guangdong、市Shenzhen、组织名称、组织单位、姓名或服务器名、邮件地址,都可以随意填写,生成文件为ca.pem
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
4、生成文件为 server-key.pem
创建服务端私钥,生成文件为 server-key.pem
openssl genrsa -out server-key.pem 4096
5、生成文件server.csr
创建服务端证书签名请求文件,用于********CA证书给服务端证书签名。IP需要换成自己服务器的IP地址,或者域名都可以。生成文件server.csr
openssl req -subj "/CN=117.157.113.139" -sha256 -new -key server-key.pem -out server.csr
6、配置白名单
用多个用逗号隔开例如:**** ****IP:192.168.3.171,IP:0.0.0.0,这里需要注意,虽然0.0.0.0可以匹配任意,但是仍然需要配置你的服务器IP,如果省略会造成错误
echo subjectAltName = IP:192.168.3.171,IP:0.0.0.0 >> extfile.cnf
7、设置服务器身份验证
将Docker守护程序密钥的扩展使用属性设置为仅用于服务器身份验证
echo extendedKeyUsage = serverAuth >> extfile.cnf
8、生成文件为server-cert.pem
创建****CA证书签名好的服务端证书,期间需要输入CA证书私钥密码,生成文件为server-cert.pem
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out server-cert.pem -extfile extfile.cnf
9、生成文件为key.pem
创建客户端私钥,生成文件为key.pem
openssl genrsa -out key.pem 4096
10、生成文件client.csr
创建客户端证书签名请求文件,用于****CA证书给客户证书签名,生成文件client.csr
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
11、要使密钥适合客户端身份验证,请创建扩展配置文件
echo extendedKeyUsage = clientAuth >> extfile.cnf
12、生成文件client.csr
创建CA证书签名好的客户端证书,期间需要输入CA证书私钥密码,生成文件为cert.pem
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out cert.pem -extfile extfile.cnf
13、删除不需要的文件,两个证书签名请求
rm -v client.csr server.csr
14、修改证书为只读权限保证证书安全
chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem
15、归集服务器证书
cp server-*.pem /etc/docker/ && cp ca.pem /etc/docker/
16、最终文件
最终生产文件如下,有了它们我们就可以进行基于TLS的安全访问了
- - ca.pem CA证书
- - ca-key.pem CA证书私钥
- - server-cert.pem 服务端证书
- - server-key.pem 服务端证书私钥
- - cert.pem 客户端证书
- - key.pem 客户端证书私钥
17、配置Docker支持TLS
#修改docker.service文件
vi /usr/lib/systemd/system/docker.service
18、修改ExecStart开头的配置
开启TLS认证,并配置好CA证书、服务端证书和服务端私钥
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
19、重新加载daemon
systemctl daemon-reload && systemctl restart docker
20、重启docker
service docker restart
21、155排错
开启TSL安全认证是在如图所示文件修改
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LgHBQd0N-1691659953519)(file:///E:\备份\自动化运维\ksohtml18428\wps18.jpg)]
端口号也是一样,在如下图所示路径中修改
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N15ifZ8h-1691659953520)(file:///E:\备份\自动化运维\ksohtml18428\wps19.jpg)]
六、设置SSH免密跳转
1、为远程连接主机生成公/私钥
在主服务器下执行命令:
[root@jyj-app1 ~]# cd /home & mkdir key & ssh-keygen -t dsa -f /root/.ssh/id_dsa -P ""
2、查看公/私钥是否生成成功
[root@jyj-app1 ~]# cd /root/.ssh/
[root@jyj-app1 .ssh]# ll
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vNdKauE2-1691659953520)(file:///E:\备份\自动化运维\ksohtml18428\wps20.jpg)]
3、分发公钥
分发公钥给被控制的服务器,请输入一下yes和密码授权一下就可以了
[root@ jyj-app1 .ssh]# ssh-copy-id -i ~/.ssh/id_dsa.pub [root@120.46.134.75](mailto:root@120.46.134.75)
4、测试
测试一下是否成功(ssh + 服务器ip)
在主服务器中执行命令:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wPJosnCw-1691659953520)(file:///E:\备份\自动化运维\ksohtml18428\wps21.jpg)]
七、安装ansible
1.ansible安装:
[root@test ~]# yum -y install ansible
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7jWXhNgY-1691659953521)(file:///E:\备份\自动化运维\ksohtml18428\wps22.jpg)]
2.是否安装成功,出现下面的就算了安装成功了:
#执行
ansible --version
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O7SPahYX-1691659953521)(file:///E:\备份\自动化运维\ksohtml18428\wps23.jpg)]
3.离线安装
-
服务器yum安装报错或者访问不了ansible的网址,可以采用离线安装。
-
https://releases.ansible.com/ansible/ (ansible 官网下载地址)
-
https://pypi.org/ (模块包下载地址)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GOcTBJY4-1691659953522)(file:///E:\备份\自动化运维\ksohtml18428\wps24.jpg)]
将上面图片中的模块包都下载下来,上传到服务器上,然后按顺序安装ansible所需模块包:
- 安装 setuptools
- 安装pycrypto
- 安装 PyYAML
- 安装MarkupSafe
- 安装Jinja2
- 安装ecdsa
- 安装simplejson
- 安装pycparser
- 安装cffi
- 安装ipaddress
- 安装six
- 安装asn1crypto
- 安装pyasn1
- 安装PyNaCl
- 安装cryptography
- 安装paramiko
- 安装ansible
以一个举例子说明:安装三步走
- 解压文件:tar -xzf ansible-latest.tar.gz
- 进入目录:cd ansible-2.7.10/
- 执行相同安装命令:python setup.py install
4.ansible主机组配置
(1)编辑文件:hosts
[root@jyj-app1 ~]# vim /etc/ansible/hosts
添加一个主机组(rj-bai)
[rj-bai]
120.46.134.75
[ans-server2]
120.46.134.75
[ans-server1]
120.46.148.133
[ans-common]
120.46.134.75
120.46.148.133
加到文件最底部就可以,然后保存退出,注意:rj-bai 为模块名,下面是要管理的主机 ip 地址,模块名随便写
(2)测试一下是否成功
执行命令:[root@jyj-app1 ~]# ansible rj-bai -m command -a pwd
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pFGwf7CT-1691659953522)(file:///E:\备份\自动化运维\ksohtml18428\wps66.jpg)]
出现如图所示,就算是主机组配置成功了
八、Nexus启动与配置
1、安装Nexus
Ps:在执行docker命令之前先查看端口是否被占用,如图所示5000未被占用,8081已经被占用,所以把外部端口我们换一个未被占用的8001;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HauSEYmj-1691659953523)(file:///E:\备份\自动化运维\ksohtml18428\wps25.jpg)]
docker run -d --name nexus3 --restart=always
-p 8001:8081
-p 5000:5000
--mount src=nexus-data,target=/nexus-data
sonatype/nexus3
注:8081端口是开放给后台使用的,5000端口是开放给仓库使用的,换成别的端口也可以,只要配置docker仓库时填写开放的端口就可以了
看到如下,说明安装成功:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fIP0mjEh-1691659953523)(file:///E:\备份\自动化运维\ksohtml18428\wps26.jpg)]
2、查看密码
docker exec nexus3 cat /nexus-data/admin.password
看到如下,记录此密码,待会登录后台需要:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rs2qotdy-1691659953524)(file:///E:\备份\自动化运维\ksohtml18428\wps27.jpg)]
f6dd0215-0445-46a1-8e90-e062dd04b3e0
3、登录后台
地址是IP:8001,例如我的是:http://125.75.8.155:8001
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-taz7KcvB-1691659953524)(file:///E:\备份\自动化运维\ksohtml18428\wps28.jpg)]
账号是admin,密码是刚才查看的一串字符;登录成功后会提示你修改密码,点next去修改密码即可;
4、创建一个docker仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TYc8Jyn3-1691659953525)(file:///E:\备份\自动化运维\ksohtml18428\wps29.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gpULDxpb-1691659953525)(file:///E:\备份\自动化运维\ksohtml18428\wps30.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eBmBYNG9-1691659953525)(file:///E:\备份\自动化运维\ksohtml18428\wps31.jpg)]
5、创建一个docker 角色
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mawxz6H2-1691659953526)(file:///E:\备份\自动化运维\ksohtml18428\wps32.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cFL1Km4W-1691659953526)(file:///E:\备份\自动化运维\ksohtml18428\wps33.jpg)]
6、创建一个docker用户
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vCXDmXrg-1691659953527)(file:///E:\备份\自动化运维\ksohtml18428\wps34.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QXI6nHH4-1691659953528)(file:///E:\备份\自动化运维\ksohtml18428\wps35.jpg)]
*注:记住上面的id和密码,待会命令行登录需要用到*
7、配置 Realms,把 Docker Realm 激活
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lzjUP9WH-1691659953528)(file:///E:\备份\自动化运维\ksohtml18428\wps36.jpg)]
8、修改仓库配置
打开/etc/docker/daemon.json文件,增加
"insecure-registries": [
"125.75.8.155:5000"
]
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
],
"insecure-registries": [
"125.75.8.155:5000"
]
}
重新载入配置和重启docker
systemctl daemon-reload
systemctl restart docker
9、命令行登录********仓库
docker login 125.75.8.155:5000
#输入username和password
看到如下,表示登陆成功(username使用新建的docker)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BDNZiNVc-1691659953529)(file:///E:\备份\自动化运维\ksohtml18428\wps37.jpg)]
九、jenkins新建后端任务图解
1.新建任务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BNZhYwNB-1691659953529)(file:///E:\备份\自动化运维\ksohtml18428\wps38.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4GuDDvuZ-1691659953530)(file:///E:\备份\自动化运维\ksohtml18428\wps39.jpg)]
2.配置gitea代码仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WLLQIr30-1691659953530)(file:///E:\备份\自动化运维\ksohtml18428\wps40.jpg)]
3.构建触发器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qv0zIv2N-1691659953531)(file:///E:\备份\自动化运维\ksohtml18428\wps41.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FLOmYet9-1691659953532)(file:///E:\备份\自动化运维\ksohtml18428\wps42.jpg)]
4.设置钩子
打开自己的代码仓库设置勾子(token是上一步设置的,前面的路径是token下面有标注的,改成你自己的jenkins地址就好)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7mSSnaol-1691659953532)(file:///E:\备份\自动化运维\ksohtml18428\wps43.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vg5u9Y2B-1691659953533)(file:///E:\备份\自动化运维\ksohtml18428\wps44.jpg)]
5.配置构建步骤
(Ps:此处配置的是你的打包命令以及maven的基础配置)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZqgH3pax-1691659953533)(file:///E:\备份\自动化运维\ksohtml18428\wps45.jpg)]
6.配置发布步骤
# 打包后在jenkins的目录
source_path='/var/lib/jenkins/workspace/spider'
# 复制jar包
cp ${source_path}/target/webmagic-spider.jar ${source_path}/webmagic-spider.jar
# 复制ansible文件和脚本
cp ${source_path}/deploy-jarweb.yml /etc/ansible/roles/jarweb/deploy-jarweb.yml
cp ${source_path}/jarweb-script.sh /etc/ansible/roles/jarweb/jarweb-script.sh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NEGUuK5p-1691659953534)(file:///E:\备份\自动化运维\ksohtml18428\wps46.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Di83fsl-1691659953534)(file:///E:\备份\自动化运维\ksohtml18428\wps47.jpg)]
#重新打标签
docker tag spider:v$BUILD_NUMBER 125.75.8.155:5000/spider:v$BUILD_NUMBER
docker tag spider:v$BUILD_NUMBER 125.75.8.155:5000/spider
#推镜像到nexus
docker push 125.75.8.155:5000/spider:v$BUILD_NUMBER
docker push 125.75.8.155:5000/spider
#重新拉取该镜像
docker pull 125.75.8.155:5000/spider:v$BUILD_NUMBER
#删除本地镜像
docker rmi spider:v$BUILD_NUMBER
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nP8x0XtP-1691659953535)(file:///E:\备份\自动化运维\ksohtml18428\wps48.jpg)]
Ansible的相关文件是放在我们的项目根目录下,最后提交到gitea了,这里需要注意的是
/etc/ansible/roles/jarweb目录是需要自己创建的,不创建会报错;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RpoREBk7-1691659953535)(file:///E:\备份\自动化运维\ksohtml18428\wps49.jpg)]
7.完成配置点击立即构建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LHp0ShQQ-1691659953536)(file:///E:\备份\自动化运维\ksohtml18428\wps50.jpg)]
8.查看构建日志
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BYOaEJ0F-1691659953536)(file:///E:\备份\自动化运维\ksohtml18428\wps51.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hLSbiDQX-1691659953537)(file:///E:\备份\自动化运维\ksohtml18428\wps52.jpg)]
十、jenkins新建前端任务图解
1.安装插件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I6jdjs8p-1691659953538)(file:///E:\备份\自动化运维\ksohtml18428\wps53.jpg)]
2.全局工具配置
Ps:这里可以选择新增多个node版本;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GJsovXeP-1691659953538)(file:///E:\备份\自动化运维\ksohtml18428\wps54.jpg)]
3.新建任务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MJLBHShs-1691659953538)(file:///E:\备份\自动化运维\ksohtml18428\wps55.jpg)]
4.配置gitea仓库
配置仓库,添加仓库凭证,选择分支
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FvXHeouC-1691659953539)(file:///E:\备份\自动化运维\ksohtml18428\wps56.jpg)]
5.构建环境
选择node环境打包,选择node版本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XEFcxheQ-1691659953539)(file:///E:\备份\自动化运维\ksohtml18428\wps57.jpg)]
6.构建
编写shell脚本,包括项目安装依赖,配置国内镜像,打包,以及将打包生成的文件打成压缩包,并将压缩包和ansible文件及脚本拷贝到指定目录;
Ps:这里的deploy-jarweb.yml和jarweb-script.sh是需要你放在项目的根目录下;如图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KPokPFBg-1691659953540)(file:///E:\备份\自动化运维\ksohtml18428\wps58.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IJC9tu3b-1691659953540)(file:///E:\备份\自动化运维\ksohtml18428\wps59.jpg)]
命令如下:
#!/bin/bash
# 打包后在jenkins的目录
source_path='/var/lib/jenkins/workspace/check_nginx'
cd ${source_path}
pwd
# 安装依赖
npm install
# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npm.taobao.org
npm install crypto-js
npm install vue-awesome
npm install --save @jiaminghi/data-view
#项目打包
npm run build:prod
#压缩dist目录
cd ${source_path}
zip -r dist.zip dist/*
cp -f ${source_path}/dist.zip /etc/ansible/roles/nginx/gov_check/dist.zip
# 复制ansible文件
cp -f ${source_path}/deploy-jarweb.yml /etc/ansible/roles/nginx/gov_check/deploy-jarweb.yml
cp -f ${source_path}/jarweb-script.sh /etc/ansible/roles/nginx/gov_check/jarweb-script.sh
pwd
- ps:需要注意的是,需确定你本机有安装zip打包及解压相关命令
- 执行yum install unzip zip即可安装
7.配置ansible_playbook
这里选择执行ansible_playbook,脚本路径选择你上面copy的最终路径。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-drS9z0Of-1691659953541)(file:///E:\备份\自动化运维\ksohtml18428\wps60.jpg)]
8.立即构建
十一、ansible的配置文件及脚本注解
1.前端
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u3L2pFuy-1691659953541)(file:///E:\备份\自动化运维\ksohtml18428\wps61.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jBRQMjN3-1691659953542)(file:///E:\备份\自动化运维\ksohtml18428\wps62.jpg)]
2.后端
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RKomRPw0-1691659953542)(file:///E:\备份\自动化运维\ksohtml18428\wps63.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fQbZoJKH-1691659953543)(file:///E:\备份\自动化运维\ksohtml18428\wps64.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qK6JY108-1691659953543)(file:///E:\备份\自动化运维\ksohtml18428\wps65.jpg)]
十二、pipeline流水线部署发布
1.jenkins安装pipeline插件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vLHzfVKb-1691659953543)(file:///E:\备份\自动化运维\ksohtml18428\wps67.jpg)]
2.新建任务选择pipeline流水线
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5hToJAv8-1691659953544)(E:\备份\自动化运维\ksohtml18428\wps68.jpg)]
3.配置流水线
在General选项卡中选择参数化构建过程,并添加Git参数(名称随意,参数类型选择分支,默认值master,分支过滤origin/master,即添加origin/master到白名单)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fIRXAmH4-1691659953544)(E:\备份\自动化运维\ksohtml18428\wps69.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xfuBVEjP-1691659953545)(C:\Users\x_wb\AppData\Roaming\Typora\typora-user-images\image-20220914111204258.png)]
在流水线选项卡中,定义选择Pipeline script from SCM,SCM选择git,然后配置git仓库及身份认证账号;指定分支为*/master,源码库浏览器为自动,脚本路径为Jenkinsfile(这里的Jenkinsfile一般为根目录下的,如果是在根目录下还有其他文件路径,需要加上);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-arB578VK-1691659953545)(E:\备份\自动化运维\ksohtml18428\wps70.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AnQdQJiL-1691659953545)(E:\备份\自动化运维\ksohtml18428\71.jpg)]
4.项目结构配置
deploy文件夹下面有两个文件夹prod是存放正式环境ansible相关配置文件的,test文件夹下面存放的是测试环境的ansible脚本文件;Dockerfile文件是用来将jar包打包成镜像的;而Jenkinsfile文件就是整个pipeline流水线的相关配置;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4RH5IUrN-1691659953546)(E:\备份\自动化运维\ksohtml18428\wps71.jpg)]
5.前端Jenkinsfile文件;
pipeline {
agent any
tools {
nodejs 'Node14.15.0'
}
environment {
//正式环境ansible脚本路径
ANSIBLE_PATH="lzqy"
//测试环境ansible脚本路径
ANSIBLE_TEST_PATH="lzqy/test"
//jenkins下的目录
JENKINS_HOME= "/var/lib/jenkins/workspace/lzqy_qt_nginx_pipeline"
}
stages {
stage('检出') {
steps {
git credentialsId: '77ad40ab-5b79-435d-80f4-48460dc32e71', url: 'https://gitea.onstream-cloud.com/front_dev/qygw_shouye.git'
}
}
stage('构建') {
steps {
sh '''#!/bin/bash
cd ${JENKINS_HOME}
node -v
npm install --registry=https://registry.npm.taobao.org
npm install
#项目打包
npm run build:prod
pwd
#压缩dist目录
cd ${JENKINS_HOME}
zip -r dist.zip dist/*
cp -f ${JENKINS_HOME}/dist.zip /etc/ansible/roles/nginx/${ANSIBLE_PATH}/shouye/dist.zip
# 复制ansible文件
cp -f ${JENKINS_HOME}/deploy-jarweb.yml /etc/ansible/roles/nginx/${ANSIBLE_PATH}/shouye/deploy-jarweb.yml
cp -f ${JENKINS_HOME}/jarweb-script.sh /etc/ansible/roles/nginx/${ANSIBLE_PATH}/shouye/jarweb-script.sh
'''
echo '构建完成'
}
}
stage('部署') {
steps {
step([$class: 'AnsiblePlaybookBuilder', additionalParameters: '', ansibleName: 'ansible-playbook', becomeUser: '', credentialsId: '', forks: 5, inventory: [$class: 'InventoryPath', path: '/etc/ansible/hosts'], limit: '', playbook: '/etc/ansible/roles/nginx/lzqy/shouye/deploy-jarweb.yml', skippedTags: '', startAtTask: '', sudoUser: '', tags: '', vaultCredentialsId: ''])
}
}
}
}
6.后端Jenkinsfile文件;
pipeline {
agent any
tools {
maven 'apache-maven-3.6.3'
jdk 'jdk1.8'
}
environment{
//服务名称
SERVER_NAME="yshj_springboot"
//源jar名称,mvn打包之后,target目录下的jar包名称
JAR_NAME= "ruoyi.jar"
//正式环境ansible脚本路径
ANSIBLE_PATH="yshj"
//正式环境ansible脚本路径
ANSIBLE_TEST_PATH="yshj/test"
//jenkins下的目录
JENKINS_HOME= "/var/lib/jenkins/workspace/yshj_pipeline"
//测试环境jenkins的目录
JENKINS_HOME_TEST= "/var/lib/jenkins/jobs/yshj_pipeline/workspace"
}
stages {
stage('拉取代码') {
steps {
git credentialsId: '77ad40ab-5b79-435d-80f4-48460dc32e71', url: 'https://gitea.onstream-cloud.com/back-dev/beoes_back.git'
echo '拉取成功'
}
}
stage('执行构建') {
steps {
sh '''#!/bin/bash
mvn --version
java -version
echo ${branch}
#判断是正式还是测试
if [ ${branch} = "origin/master" ];then
mvn clean package -P prod -f pom.xml
echo '正式环境'
else
mvn clean package -P test -f pom.xml
echo '测试环境'
fi
'''
echo '构建完成'
}
}
stage('把jar包构建为docker镜像并上传至仓库') {
steps {
sh '''#!/bin/bash
#判断是正式还是测试
if [ ${branch} = "origin/master" ];then
# JENKINS_HOME
cd ${JENKINS_HOME}
# JENKINS_HOME
cp ${JENKINS_HOME}/target/${JAR_NAME} ${JENKINS_HOME}
echo "打包镜像"
# 打包镜像
docker build -t ${SERVER_NAME}:v$BUILD_NUMBER -f Dockerfile .
# 复制ansible文件和脚本
cp -f ${JENKINS_HOME}/deploy/prod/deploy-jarweb.yml /etc/ansible/roles/jarweb/${ANSIBLE_PATH}/deploy-jarweb.yml
cp -f ${JENKINS_HOME}/deploy/prod/jarweb-script.sh /etc/ansible/roles/jarweb/${ANSIBLE_PATH}/jarweb-script.sh
#重新打标签
docker tag ${SERVER_NAME}:v$BUILD_NUMBER 125.75.8.155:5000/${SERVER_NAME}:v$BUILD_NUMBER
docker tag ${SERVER_NAME}:v$BUILD_NUMBER 125.75.8.155:5000/${SERVER_NAME}
#推镜像到nexus
docker push 125.75.8.155:5000/${SERVER_NAME}:v$BUILD_NUMBER
docker push 125.75.8.155:5000/${SERVER_NAME}
#删除本地镜像
docker rmi ${SERVER_NAME}:v$BUILD_NUMBER
docker rmi 125.75.8.155:5000/${SERVER_NAME}:v$BUILD_NUMBER
docker rmi 125.75.8.155:5000/${SERVER_NAME}
else
# JENKINS_HOME
cd ${JENKINS_HOME_TEST}
# JENKINS_HOME
cp ${JENKINS_HOME_TEST}/target/${JAR_NAME} ${JENKINS_HOME_TEST}
echo "打包镜像"
# 打包镜像
docker build -t ${SERVER_NAME}:v$BUILD_NUMBER -f Dockerfile .
cp -f ${JENKINS_HOME_TEST}/deploy/test/jarweb-script.sh /etc/ansible/roles/jarweb/${ANSIBLE_TEST_PATH}/jarweb-script.sh
#删除原本latest镜像
docker rmi ${SERVER_NAME}
docker tag ${SERVER_NAME}:v$BUILD_NUMBER ${SERVER_NAME}
fi
'''
echo '打包成功'
}
}
stage("发布镜像"){
steps{
script {
if ( branch == 'origin/master' ) {
step([$class: 'AnsiblePlaybookBuilder', additionalParameters: '', ansibleName: 'ansible-playbook', becomeUser: '', credentialsId: '', forks: 5, inventory: [$class: 'InventoryPath', path: '/etc/ansible/hosts'], limit: '', playbook: '/etc/ansible/roles/jarweb/yshj/deploy-jarweb.yml', skippedTags: '', startAtTask: '', sudoUser: '', tags: '', vaultCredentialsId: ''])
}
if ( branch != 'origin/master' ) {
sh "sh /etc/ansible/roles/jarweb/${ANSIBLE_TEST_PATH}/jarweb-script.sh"
}
}
}
}
}
}
7.流水线语法-片段生成器的使用;
进入项目配置,在最底部点击流水线语法进入片段生成器;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uWtJ0aoE-1691659953547)(E:\备份\自动化运维\ksohtml18428\wps72.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W5PFcH4V-1691659953547)(E:\备份\自动化运维\ksohtml18428\wps73.jpg)]
比如使用git拉取代码,使用片段生成器生成pipeline的语法结构;
步骤选择git,配置自己的仓库地址,分支,凭证,然后点击生成流水线脚本,然后将生成的流水线脚本放到我们自己的Jenkinsfile文件中的steps下就可以,如图所示;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YNZHQaZR-1691659953548)(E:\备份\自动化运维\ksohtml18428\74.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eC0cfA7Q-1691659953548)(E:\备份\自动化运维\ksohtml18428\wps74.jpg)]
再比如我们使用pipeline调用ansible_playbook;
同理将生成的脚本,放到对应steps下就可;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HKuTpv6P-1691659953549)(E:\备份\自动化运维\ksohtml18428\wps75.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OwLTogPU-1691659953549)(E:\备份\自动化运维\ksohtml18428\wps76.jpg)]
step([$class: 'AnsiblePlaybookBuilder', additionalParameters: '', ansibleName: 'ansible-playbook', becomeUser: '', credentialsId: '', forks: 5, inventory: [$class: 'InventoryPath', path: '/etc/ansible/hosts'], limit: '', playbook: '/etc/ansible/roles/jarweb/yshj/deploy-jarweb.yml', skippedTags: '', startAtTask: '', sudoUser: '', tags: '', vaultCredentialsId: ''])
}
if ( branch != 'origin/master' ) {
sh "sh /etc/ansible/roles/jarweb/${ANSIBLE_TEST_PATH}/jarweb-script.sh"
}
}
}
}
}
}
#### 7.流水线语法-片段生成器的使用;
进入项目配置,在最底部点击流水线语法进入片段生成器;
[外链图片转存中...(img-uWtJ0aoE-1691659953547)]
[外链图片转存中...(img-W5PFcH4V-1691659953547)]
比如使用git拉取代码,使用片段生成器生成pipeline的语法结构;
步骤选择git,配置自己的仓库地址,分支,凭证,然后点击生成流水线脚本,然后将生成的流水线脚本放到我们自己的Jenkinsfile文件中的steps下就可以,如图所示;
[外链图片转存中...(img-YNZHQaZR-1691659953548)]
[外链图片转存中...(img-eC0cfA7Q-1691659953548)]
再比如我们使用pipeline调用ansible_playbook;
同理将生成的脚本,放到对应steps下就可;
[外链图片转存中...(img-HKuTpv6P-1691659953549)]
[外链图片转存中...(img-OwLTogPU-1691659953549)]