Docker+Jenkins+Gitee实现maven项目CI或CD

一、前提

环境

  1. OS:centos8
  2. 云服务器:阿里云
  3. JDK:1.8
  4. Docker:20.10.7
  5. Jenkins容器:jenkinsci/blueocean:latest
  6. Maven:3.8.2
  7. Maven项目:springboot
  8. Git: 2.32.0.windows.2

前提知识

1. shell
  1. 推荐文章: JavaGuide的Shell篇
  2. 强调:理解linux挂载
2. docker
  1. 推荐文章: 奇客谷

  2. 强调:理解Dockerfile中命令

3. Jenkins
  1. 推荐文章: 奇客谷
4. Git
  1. 推荐文章:廖雪峰

二、安装软件

1. centos8下载Docker
  1. 官方安装文档
2. 在Docker下载Jenkins
  1. 官方安装文档

三、在Docker中运行Jenkins

1. 在centos8输入命令
docker run \
  -d \
  --rm \
  -u root \
  -p 8080:8080 \
  -v jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean

四、Maven项目

1. 用idea创建一个springboot项目,端口号设置为12001
2. 目录

Docker+Jenkins+Gitee实现maven项目CI或CD_第1张图片

3. 控制器
@RestController
@RequestMapping("/jenkins.docker")
public class JenkinDockerController {
    @GetMapping("/auto")
    public String getAuto(){
        return "lin";
    }
}
4. Dockerfile
FROM java:8-jre-alpine
VOLUME /data
RUN mkdir /app
ADD ./target/all_student-0.0.1-SNAPSHOT.jar /app/all_student.jar
ENV TZ Asia/Shanghai
EXPOSE 12001
ENTRYPOINT java -Xms128m -Xmx256m -jar /app/all_student.jar
5. 上传到Gitee
1. 创建一个all_student仓库(注意:仓库要是开源的,不能是私人的)
2. 然后把本地maven项目上传到Gitee中all_student仓库

Jenkins项目

安装插件

1. 找到插件管理

Docker+Jenkins+Gitee实现maven项目CI或CD_第2张图片

2. 安装Gitee Plugin,Maven Integration Plugin和Docker Plugin
  1. 搜索这个三个插件,然后打勾,最后点击Install without restart安装并重启
  2. 安装完成后点击重启Jenkins

配置Jenkins

1. 登录Jenkins可视化界面: http://IP地址:8080/ 具体过程看奇客谷教程
2. 配置JDK
  1. 点击系统管理
    Docker+Jenkins+Gitee实现maven项目CI或CD_第3张图片

  2. 选择全局工具配置Docker+Jenkins+Gitee实现maven项目CI或CD_第4张图片
    3. 点击新增JDK
    Docker+Jenkins+Gitee实现maven项目CI或CD_第5张图片

  3. 别名随便写

  4. JAVA_HOME

    1. 登录Jenkins容器:在centos8服务器输入docker exec -it 容器ID /bin/bash
    2. 在命令行中输入echo $JAVA_HOME,centos8回显的值赋值给上图的JAVA_HOME
      Docker+Jenkins+Gitee实现maven项目CI或CD_第6张图片
3. 配置maven
  1. 在centos8安装maven 参考文章:linux(centos8)下安装maven - 简书 (jianshu.com)

  2. 把下载的maven项目送到Jenkins容器中

    1. 在maven容器创建/usr/local/maven3目录

    2. docker cp 要拷贝的文件路径 容器ID:要拷贝到容器里面对应的路径(例子:docker cp /usr/local/maven3 12dd1df5df09:/usr/local/maven3)

    3. 验证是否成功
      cpMaven
      4. 在Jenkins可视化中全局工具配置(和查找JDK配置时一样)修改Maven配置Docker+Jenkins+Gitee实现maven项目CI或CD_第7张图片

      1. 新增MavenDocker+Jenkins+Gitee实现maven项目CI或CD_第8张图片

      2. 注意:关于Maven的路径根据自己放在Jenkins容器中的路径

      3. 配置Maven为环境变量

        1. 查看Jenkins环境变量 Jenkins容器中输入命令:env

        2. vi /etc/profile,在PATH添加maven路径(如下图)
          Docker+Jenkins+Gitee实现maven项目CI或CD_第9张图片

        3. source /etc/profile

        4. mvn -version验证是否成功

        5. 防止重新打开终端,maven环境变量无,在命令行输入以下指令
          1. vi ~/.bashrc
          2. 在该文件添加 source /etc/profile,然后退出
          3. source ~/.bashrc

        6. 记得保存该容器为镜像,不然重新运行运行该容器,则maven的配置由于没有保存则maven要重新设置。

4. 配置Docker
  1. 进入系统配置Docker+Jenkins+Gitee实现maven项目CI或CD_第10张图片

  2. 下滑到最后,点击cloud下的链接Docker+Jenkins+Gitee实现maven项目CI或CD_第11张图片

  3. 添加docker并点击Test Connection(会显示失败,接着往下操作)Docker+Jenkins+Gitee实现maven项目CI或CD_第12张图片

  4. 开放centos8的docker供Jenkins调用

    1. 在centos8命令行输入
      vi /lib/systemd/system/docker.service
    2. 找到ExecStart,修改该值
      ExecStart=/usr/bin/docker daemon -H fd://   
      改为
      ExecStart=/usr/bin/docker daemon -H fd://                -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock

opendocker

  1. 然后 输入systemctl daemon-reload和sudo service docker restart

  2. 再测试一次

编写Jenkins项目

1. 创建Jenkins项目

Docker+Jenkins+Gitee实现maven项目CI或CD_第13张图片

2. 添加源码管理

Docker+Jenkins+Gitee实现maven项目CI或CD_第14张图片

3. 编写shell脚本
#!/bin/sh 
cd /var/jenkins_home/workspace/all_student
mvn clean install -Dmaven.test.skip=true
echo 'build all_student success'

cd /var/jenkins_home/workspace/all_student
docker build -f ./jenkins/Dockerfile -t all_student:uat .
echo 'build docker success'

docker stop all_studentt && docker rm all_student
docker run -d --network=host all_student:uat

Docker+Jenkins+Gitee实现maven项目CI或CD_第15张图片

4. 点击保存

结果

1. 进入创建的Jenkins项目

Docker+Jenkins+Gitee实现maven项目CI或CD_第16张图片

2. 点击立即构建并在立即构建下面查看运行结果

Docker+Jenkins+Gitee实现maven项目CI或CD_第17张图片

3. 访问http://IP地址:12001/jenkins.docker/auto查看结果

result

遇到的问题

  1. Jenkins账号密码忘记:

    解决方案

  2. 查看端口号所在进程号

    1. netstat -nap | grep 端口号
  3. Jenkins项目执行步骤:先拉取gitee代码,再执行shell

  4. 注意要开放云服务器的端口,不然会被防火墙阻挡

  5. 挂载时,容器的目录要存在

  6. 出现mvn找不到的原因

    1. 由于shell版本没有加#!/bin/sh 故jenkins执行shell采用非登录方式
    2. 参考资料 jenkins无法执行命令

还需改进地方

  1. gitee可以用私人的
  2. maven项目的容器可以发送到docker hub

你可能感兴趣的:(部署,docker,java,maven,jenkins,git)