jenkins 流水线拉取 Gitee项目 打包 微服务 制作 Docker 镜像 并 push 到 harbor(踩坑集锦)

本文详细介绍了如何在CentOS7上安装Jenkins,并通过Jenkins自动化构建Java项目,配置环境变量,安装插件,创建流水线,制作Docker镜像并推送到Harbor镜像库。过程中解决了登录Harbor报错的问题,实现了完整的持续集成与持续部署流程。
摘要由CSDN通过智能技术生成

集锦One 安装Jenkins(jdk和maven 这里就不演示了)

https://pkg.jenkins.io/redhat-stable/
在这里插入图片描述
第一条命令:

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

在这里插入图片描述
第二条命令:

rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

注意:这条命令是没有反应的
第三条命令:

 yum install -y jenkins

在这里插入图片描述
这里是执行成功的
假如执行之后提示如下:
在这里插入图片描述
这种情况需要升级下

yum upgrade


在这里插入图片描述
等待完成重新执行上面的三个命令就可以了

修改配置文件 启动端口和主机地址

vi /etc/sysconfig/jenkins

第一步修改启动用户为 root
在这里插入图片描述
第二步 端口修改(看个人我这里修改为 8099)
在这里插入图片描述
下面直接启动jenkins

systemctl start jenkins

注意:这里修改的端口记得去防火墙放开

sudo firewall-cmd --zone=public --add-port=8099/tcp --permanent

刷新生效

sudo  firewall-cmd --reload

在这里插入图片描述
复制上面的命令 查看密码:

cat /var/lib/jenkins/secrets/initialAdminPassword

在这里插入图片描述
进来之后我们先创建一个用户
在这里插入图片描述

安装插件
先替换插件地址
在这里插入图片描述

在这里插入图片描述
替换地址

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

然后在 地址后面输入一个 restart 进行重启
在这里插入图片描述

下面安装第一个插件 (汉化插件 Chinese)

在这里插入图片描述
安装完成后重启

第二插件 凭证管理 (Credentials Binding)

在这里插入图片描述
安装完成就会出现下面这个(方便我们存储一些账号密码)
在这里插入图片描述
进来先创建一个 gitee上拉取代码的凭证
在这里插入图片描述

安装第三个插件 Git
在这里插入图片描述

配置 jdk 和 maven 地址 以及全局配置(maven 的安装和 jdk的安装就不多少了主要说下配置)
系统是CentOs7 的所以配置环境变量

vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_131
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

在这里插入图片描述
然后保存退出 (注意这里的地址是你的安装地址)
测试:
在这里插入图片描述
环境变量配置成功!!

去jenkins里 全局配置 jdk 和 maven

在这里插入图片描述
这里输入jdk的安装目录也就是刚才配置的环境变量,把下面的自动安装去掉

继续配置maven

在这里插入图片描述
下面去 系统配置
添加环境变量

在这里插入图片描述

最好就是这样配置 这里是自己的地址
JAVA_HOME /usr/java/jdk1.8.0_131
M2_HOME	/opt/maven
PATH+EXTRA	$M2_HOME/bin

第三个插件 Pipeline(未付基于流水线项目)
在这里插入图片描述

添加两个参数化构建的插件 (第一个 Git Parameter直接在gitee获取分支用的。
第二个 复选框插件因为是微服务架构 Extended Choice Parameter )

在这里插入图片描述

创建一个 流水线项目
在这里插入图片描述

第一步 选择参数化构建 Git Parameter(这个插件装了之后)构建时动态获取分支
在这里插入图片描述

在这里插入图片描述

第二步设置 继续添加参数化构建 Extended Choice Parameter 多模块同时构建
在这里插入图片描述
在这里插入图片描述

第三步 去构建脚本 (点进去生成脚本)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
往下来直接生成
在这里插入图片描述

将生成的脚本复制出来
在这里插入图片描述
这里我们需要改一个地方 上面我们参数化构建了一个 branch 分支 这样我们就能构建自己需要构建的分支。

在这里插入图片描述

在这里插入图片描述

选择需要的分支进行构建

在这里插入图片描述
这边成功拉取代码

因为我这边有一个公共模块 需要提前打包 下面是我的项目结构
在这里插入图片描述

我们继续 执行下一个步骤 (打包公共模块)

在这里插入图片描述

执行构建 公共模块打包成功

在这里插入图片描述

构建微服务 使用我们上面添加的 project_name

在这里插入图片描述

第一个坑来了 一直提示找不到 复工程 以及公共模块

在这里插入图片描述

原因是因为本地仓库没有复工程的包
在这里插入图片描述

需要在本地maven中找到这个文件夹放到服务器的maven com包下
这个是我们需要上传的文件夹结构
在这里插入图片描述
上传到目录下
在这里插入图片描述

再次打包构建
在这里插入图片描述
这个服务是打包成功了 其他的微服务就不一一演示了

下面我们来制作docker插件来制作镜像
在各个启动服务的模块添加打包插件的依赖

在这里插入图片描述

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- 构建docker的镜像-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.7</version>
                <configuration>
                    <repository>${project.artifactId}</repository>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>

同时在每个模块中创建Dockerfile
在这里插入图片描述
在这里插入图片描述

FROM openjdk:8-jdk-alpine //构建java的环境
ARG JAR_FILE //插件指定大jar地址
COPY ${JAR_FILE} app.jar //把我们 打包的jar 复制到app.jar
EXPOSE 8080 //启动端口
ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=prod"]
注意:这里每个微服务都可以不用改 因为每个容器是独立的 所以是可以直接给每个微服务复制(手动偷懒)

好了我们改下脚本 在打包命令后加上

 sh "mvn -f ${projectInfo} clean package -Dmaven.test.skip=true dockerfile:build"

在这里插入图片描述
在这里插入图片描述

镜像制作成功

docker images 就能看到我们制作的镜像

在这里插入图片描述

下面我们就往 harbor 镜像库推送 镜像

安装habor的记录我整理在了另一片中 :https://blog.csdn.net/weixin_44695125/article/details/123141266?spm=1001.2014.3001.5501

首先我们去 凭证里面添加 harbor凭证 在流水线语法中
在这里插入图片描述
在这里插入图片描述

//这样的好处是不用暴露 密码账号
withCredentials([usernamePassword(credentialsId: 'b7894006-e02d-4777-972b-df0d1d338d6a', passwordVariable: 'password', usernameVariable: 'username')]) {
    // some block
}

我们整个脚本




node{
      stage('clone'){
            checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: '318f9f3a-7aea-4304-81a1-2a70c65d12c0', url: 'https://gitee.com/xkmayun/bugvip.git']]])      }
      stage("打包公共模块"){
            sh "mvn -f bugvip-common clean install -Dmaven.test.skip=true"
      }
       def selectedProjectNames="${project_name}".split(",")
       def tag= "latest"
       //harbor地址
       def harbor_url="101.34.81.9:85"
       //镜像库的名称
       def harbor_project="bugvip"
       //harbor凭证
       def harbor_auth="42d57c52-0e29-4a76-b6ea-d9d36dc2de9b"
       stage('编译微服务'){
       			for(int i =0;i<selectedProjectNames.length;i++){
                       def projectInfo=selectedProjectNames[i];
                       //获取项目名称
                       sh "mvn -f ${projectInfo} clean package -Dmaven.test.skip=true dockerfile:build"
                        //定义镜像名称
                        def imageName="${projectInfo}:${tag}"
                        //对镜像打上标签
                        sh "docker tag ${imageName} ${harbor_url}/${harbor_project}/${imageName}"
                        //把镜像推送到 harbor
                           withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
                        // //     //登录harbor
                              sh "docker login -u ${username} -p ${password} ${harbor_url}"
                        //     //镜像上传
                             sh "docker push ${harbor_url}/${harbor_project}/${imageName}"

                             sh "echo 镜像上传成功"
                          }
                   }

       	}
}


第一个坑来了 登录 报错

在这里插入图片描述
在jenkins 所在的服务器目录 vim /etc/docker/daemon.json 下
添加
{“insecure-registries”:[“填你的harbor服务器地址”]}
在这里插入图片描述

systemctl restart docker 重启docker 重新构建打包

在这里插入图片描述
上传成功
在这里插入图片描述

下面我们在其他的地方拉取下镜像
在这里插入图片描述

执行拉取命令 docker pull 101.34.81.9:85/bugvip/bugvip_third_part:latest

在这里插入图片描述
成功拉取。。。。。。。。。。。。。
关于脚本远程 目标服务器拉取镜像并创建docker (可以看我下面这篇文章)https://blog.csdn.net/weixin_44695125/article/details/123240642
😁😁😁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值