docker jenkins nenux ansible自动发布

一、安装 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)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值