docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑

时间:2021-01-10 01:03:38

流程

主要的逻辑就是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+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑
    使用管理员密码进行登录,可以使用以下命令从容器启动日志中获取管理密码:
docker logs jenkins

1
从日志中获取管理员密码:
docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑

选择安装插件方式,这里我们直接安装推荐的插件:
docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑

进入插件安装界面,联网等待插件安装:
docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑

安装完成后,创建管理员账号:

docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑

jenkins安装maven

  • 有一个简单安装的方法,但是对于网络要求很高
    通过系统管理->全局工具配置来进行全局工具的配置
    docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑
    但是这种方式对网络要求比较高,可能下载不下来。可以看下面的方案
  • 利用挂载容器来安装maven
    注意并不能在docker的jenkins容器里安装maven,这样在重启之后maven就没有了,可以在jenkins的宿主机里安装maven,把maven安装到上面启动jenkins是的/mydata/jenkins_home路径下面,然后在jenkins里配置。
    在系统管理->全局工具配置里,配置MAVEN_HOME,主要这个路径是jenkins容器里的路径,而不是/mydata/jenkins_home路径。
    docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑
    在系统配置->系统配置里
    docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑

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区域。
    docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑
    Passphrase:根据网上的资料说这里是生成秘钥时的密码,如果生成秘钥没有加密码,直接enter到底生成的,则这里不用填写。(保存后会有些·········表示空密码)。

Path to key:网上说这里填的是私钥的路径,没尝试,因为在下面填写了私钥key。

Key:私钥的值。要将文件里的内容都带着。

点击SSH Servers的“增加”,新添目标服务器。

Name:你起的可以分辨服务器的名称。

Hostname:目标服务器的ip,一般服务器之间交互的话用内网ip就行。

Username:登录目标服务器的账号。

Remote Directory:将jenkins构建的文件发送到目标服务器的哪个文件夹下。
docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑

jenkins自动化流程部署

  • 首先我们需要新建一个任务:
  • 设置任务名称后选择构建一个maven风格的软件项目:
  • 然后在源码管理中添加我们的git仓库地址:
  • 此时需要添加一个凭据,也就是我们git仓库的账号密码:
  • 填写完成后选择该凭据,就可以正常连接git仓库了;
    docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑
  • 之后我们需要添加一个构建,选择调用顶层maven目标,该构建主要用于把我们的源码打包成jar包
    docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑
  • 之后添加一个执行远程shell脚本的构建,用于在我们的jar打包完成后执行启动Docker容器的脚本:
    docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑
    脚本如下,都有注解只要有点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

如果执行有问题可以把这个打开,看看是哪出错了
docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑

  • 之后点击保存操作,我们的任务就创建完成了,在任务列表中我们可以点击运行来执行该任务;

docker+jenkins+maven+git构建聚合项目,实现自动化部署,走了800个坑

  • 我们可以通过控制台输出来查看整个任务的执行过程: