流程
主要的逻辑就是Docker上安装jenkins,然后拉取git上的代码,把git上的代码用Maven打包成jar包,然后在docker运行
这个流程上的难点
- 一个是聚合项目有可能Maven install的时候失败。
解决办法:在基础模块的pom文件上添加
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>```
* 一个是jenkins是在docker上运行的,那么如何git上的代码用Maven打包成jar包,然后在docker运行是个问题
解决办法:用远程shell脚本,直接在宿主机上执行命令,相当于jenkins去git拉代码打包成jar之后,然后把手动jar包变成容器运行的步骤写成脚本让jenkins去执行
#### Docker安装jenkins
* 下载Jenkins的Docker镜像:
`docker pull jenkins/jenkins:lts`
* 在Docker容器中运行Jenkins:
```bash
`docker run -p 8080:8080 -p 50000:5000 --name jenkins \ -u root \
-v /mydata/jenkins_home:/var/jenkins_home \
-d jenkins/jenkins:lts`
注意-v之后的“/mydata/jenkins_home”这个很关键,jenkins拉取下来的代码和install之后的代码都会在这个目录下,docker执行的时候也需要在这个目录下。
- 运行成功后访问该地址登录Jenkins,第一次登录需要输入管理员密码:http://192.168.6.132:8080/
使用管理员密码进行登录,可以使用以下命令从容器启动日志中获取管理密码:
docker logs jenkins
1
从日志中获取管理员密码:
选择安装插件方式,这里我们直接安装推荐的插件:
进入插件安装界面,联网等待插件安装:
安装完成后,创建管理员账号:
jenkins安装maven
- 有一个简单安装的方法,但是对于网络要求很高
通过系统管理->全局工具配置来进行全局工具的配置
但是这种方式对网络要求比较高,可能下载不下来。可以看下面的方案 - 利用挂载容器来安装maven
注意并不能在docker的jenkins容器里安装maven,这样在重启之后maven就没有了,可以在jenkins的宿主机里安装maven,把maven安装到上面启动jenkins是的/mydata/jenkins_home
路径下面,然后在jenkins里配置。
在系统管理->全局工具配置里,配置MAVEN_HOME,主要这个路径是jenkins容器里的路径,而不是/mydata/jenkins_home
路径。
在系统配置->系统配置里
jenkins连接远程ssh
因为需要执行docker命令,docker又不是在jenkins容器里,所以需要远程shell命令来执行,这块要注意,网上说的ssh plugs插件现在不能安装了,需要另外的办法。
- Jenkins安装Publish over SSH插件
- 配置服务器相关信息
- 要先在jenkins所在的机器上生成秘钥。生成方式为:
ssh-keygen -t rsa #产生公钥与私钥对
因为没加密码所以一路enter完成。此时在 用户名文件夹/root/.ssh/文件夹下生成两个文件:
is_rsa 为密钥文件
id_rsa.pub 为公钥文件
查看秘钥
vim /root/.ssh/is_rsa
- 打开 系统管理——>系统设置,下拉到底部的Publish over SSH区域。
Passphrase:根据网上的资料说这里是生成秘钥时的密码,如果生成秘钥没有加密码,直接enter到底生成的,则这里不用填写。(保存后会有些·········表示空密码)。
Path to key:网上说这里填的是私钥的路径,没尝试,因为在下面填写了私钥key。
Key:私钥的值。要将文件里的内容都带着。
点击SSH Servers的“增加”,新添目标服务器。
Name:你起的可以分辨服务器的名称。
Hostname:目标服务器的ip,一般服务器之间交互的话用内网ip就行。
Username:登录目标服务器的账号。
Remote Directory:将jenkins构建的文件发送到目标服务器的哪个文件夹下。
jenkins自动化流程部署
- 首先我们需要新建一个任务:
- 设置任务名称后选择构建一个maven风格的软件项目:
- 然后在源码管理中添加我们的git仓库地址:
- 此时需要添加一个凭据,也就是我们git仓库的账号密码:
- 填写完成后选择该凭据,就可以正常连接git仓库了;
- 之后我们需要添加一个构建,选择调用顶层maven目标,该构建主要用于把我们的源码打包成jar包
- 之后添加一个执行远程shell脚本的构建,用于在我们的jar打包完成后执行启动Docker容器的脚本:
脚本如下,都有注解只要有点docker基础的都能看懂,也可以先在服务器上执行一下试试
#!/bin/bash
# 等待三秒
echo sleep 3s
sleep 1
echo sleep 2s
sleep 1
echo sleep 1s
sleep 1
echo "结束进程完成"
cd /mydata/jenkins_home/workspace/ceres/ceres-api/target
cp /mydata/jenkins_home/workspace/ceres/Dockerfile /mydata/jenkins_home/workspace/ceres/ceres-api/target/
# 修改文件权限
chmod 755 $JAR_NAME
echo "看看docker能不能用"
docker -v
echo "停止容器"
# 停止容器
docker stop ceres
echo "删除容器"
# 删除容器
docker rm ceres
echo "删除镜像"
# 删除镜像
docker rmi ceres
echo "打包镜像"
# 打包镜像
docker build -t ceres .
echo "运行镜像"
# 运行镜像
docker run -d -p 9000:9000 --name ceres ceres
如果执行有问题可以把这个打开,看看是哪出错了
- 之后点击保存操作,我们的任务就创建完成了,在任务列表中我们可以点击运行来执行该任务;
- 我们可以通过控制台输出来查看整个任务的执行过程: