通过 Jenkins Docker 实现应用自动部署

本文通过Jenkins+Docker+Git搭建了CI/DI环境,着重讲解Jenkins构建配置。

起因

2020年6月11日,突然被腾讯云通知,系统中存在木马文件,还好只是刚搭建的用于开发测试的服务器。打开腾讯云先尝试用官方提示的安全工具隔离文件,但是隔离了又冒出新的木马文件。综合考虑一下,因为是刚搭建的测试环境,只是用maven插件上传镜像到远程docker运行,为了避免造成更多的问题,先把服务器停机,对问题进行排查。

发现可能是开放docker端口导致病毒文件被上传到服务器中,考虑时间成本与安全性问题,决定重装服务器并搭建 CI/DI环境。

操作步骤

项目配置

1.Docker 远程连接,推送镜像到远程私库。

注:需要采用证书验证端口,否则会容易被黑。添加证书校验详见 Docker服务开放了这个端口,服务器分分钟变肉机!

Maven打包插件配置

<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>${docker.maven.plugin.version}</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <imageName>fatdown/${project.name}:${project.version}</imageName> <!--远程 docker 地址--> <dockerHost>${docker.host}</dockerHost> <baseImage>java:8</baseImage> <entryPoint>['java', '-jar','-Dspring.profiles.active=prod','/${project.build.finalName}.jar'] </entryPoint> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration></plugin>

安装软件

·Jenkins :CI/DI 软件。·docker :容器软件。·docker register :私有镜像库。

这里讲一下如何安装Jenkins,其他软件安装详见 mall在Linux环境下的部署(基于Docker容器)

Win10环境

通过如下链接下载并安装,默认启动地址为 localhost:8080 。

https://mirrors.ustc.edu.cn/jenkins/windows-stable/

Linux环境

先安装docker,在下载 Jenkins 镜像并运行,默认启动地址也是 localhost:8080 。

yum install docker-ce

systemctl start docker

docker pull jenkins/jenkins:lts

docker run -p 8080:8080 -p 50000:5000 --name jenkins \-u root \-v /mydata/jenkins_home:/var/jenkins_home \-d jenkins/jenkins:lts

启动登录后如图

密码可从启动日志中获取

新建Item,配置构建

以Win10环境为例,演示如何配置构建。

1.安装插件publish over ssh,用于连接其他服务器,执行构建脚本。2.安装Role-based Authorization Strategy,用于管理Jenkins用户。3.配置Git用户信息,用于获取远程代码。4.执行脚本,在Docker运行项目。

其中运行脚本fatdown-admin.sh,如下

#!/usr/bin/env bashapp_name='fatdown-admin'docker stop ${app_name}echo'----stop container----'docker rm ${app_name}echo'----rm container----'docker run -p 8088:8088 --name ${app_name} \--link mysql:db \-v /etc/localtime:/etc/localtime \-v /mydata/app/${app_name}/logs:/var/logs \-d fatdown/${app_name}:0.0.1-SNAPSHOTecho'----start container----'

脚本 rmUselessImages.sh用于清除无名镜像,如下:

docker rmi -f  `docker images | grep '<none>' | awk '{print $3}'`echo '----rm useless images----'
配置项目 Git 仓库地址,并指定分支
执行 maven 构建,并将应用上传到 docker 私服
执行远程服务器脚本,部署应用到 docker 容器

至此,我们点击构建即可自动部署应用到服务器并运行。后续配置触发器后可以做到PR合并自动触发自动部署,极大的减轻了应用部署的工作量。

Tips

1.若ssh连接远程服务器失败:检查是否已安装publish over ssh插件,安装后重启。

总结

对本次被黑进行简单总结,搜索总结了,网上常用提高安全性措施。

1.取消远程用户账号密码登录方式;ssh远程登录端口修改为不常用端口;密码设置复杂,降低暴力破解成功率。2.谨慎开放端口,建议只对特定ip地址开放。3.端口开放需要ssl证书验证。

(0)

相关推荐