Jenkins+gitlab搭建与使用(三)

文章引导

Jenkins配置自动化发布-Docker
Jenkins集群/并发构建
Jenkins流水线pipeline
Jenkins声明式/脚本式

Jenkins配置自动化发布-Docker

总共有三种方式
1. 文件映射方式(通过docker的目录映射,把容器里面的程序包映射出来,然后通过shell脚本更换程序包后执行docker重启容器命令) 最简单(省空间)
2. 打包为镜像,然后直接运行(适用于云原生环境)
3. 生成新镜像推送到Docker私服(适用于大型云原生环境,Harbor环境)用K8s集群拉取镜像(配合流水线,把打包制作镜像命令全部放在流水线中,然后k8s直接推送镜像,测试环境可以配置k8s提供的CI/CD的curl请求,来实现镜像的切换和镜像的重启)

第一种方式:和最开始的方式差不多,只多了一个重启程序容器的步骤,这里就不过多描述了

第二种方式

1. 在有docker的主机上,创建Dockerfile文件

#指定基础镜像
FROM java:8
#设置工作目录,没有目录会自己创建
workdir /app
#copy不能复制目录上下以外的东西
COPY ./* /app/
#开启容器80端口,但是可以被run时候 -p命令覆盖
EXPOSE 80
#需要在shell环境中运行,那么这样做
ENTRYPOINT ["sh","-c","java -jar /app/ruoyi-admin.jar"]

2. 在Jenkins上配置
构建前先删除,以前的包,服务器改为有docker环境的。
在这里插入图片描述
配置构建操作,进入目标文件夹,停止、删除容器。删除镜像。打包镜像,运行镜像
在这里插入图片描述
开始构建,查看结果
在这里插入图片描述
目标服务器使用docker命令查看是否启动

[root@k8s-node1 ruoyi-master]# docker ps -a | grep ry
fe8f739f2032        ry:v1                  "sh -c 'java -jar /a…"   2 minutes ago       Up 2 minutes                  0.0.0.0:18080->80/tcp   ry

Jenkins集群/并发构建

1. 下载连接Jenkins插件
在这里插入图片描述

2. 先准备另外的两台正常构建的Jenkins,然后在主Jenkins中配置node-Jenkins。
在这里插入图片描述
3. 填写参数
在这里插入图片描述

标签(重要):如果指定用哪一台Jenkins的话,就需要用到标签,再写脚本的时候也会用到此标签。

用法:
Use this node as much as possible意思是:尽可能的使用这台机器(再执行多任务构建的时候,Jenkins会尽力协调构建任务在这台Jenkins上执行)
Only build jobs with label expressions matching this node意思是:匹配到标签后才会用这台机器(指定构建任务在此台Jenkins上执行,用于Jenkins构建的不同环境的Jenkins)

	用法一是包含用法二的,如果Jenkins没有构建环境也不会指派的没有构建环境的Jenkins上

4. 配置代理启动方式(高级可以配置端口等等),其他的不需要配置,然后保存
在这里插入图片描述
添加全局账号
在这里插入图片描述
5. 查看状态(稍等),在循环添加其他的。
在这里插入图片描述
在这里插入图片描述

6. 配置的节点,会在刚才配置的工作目录中生成一个remoting的目录和jar包,jar包已经被启动。
在这里插入图片描述

7. 项目配置并发构建,然后保存
在这里插入图片描述
开始构建(多点几次,发现并发构建,如果不勾选会一个一个的构建和等待构建)
在这里插入图片描述
8. 项目指定构建,配置标签,然后保存
在这里插入图片描述
在指定的节点上构建,因并发数为2,第三个任务的时候就会等待着
在这里插入图片描述

Jenkins流水线pipeline

简介:
流水线既能作为任务的本身,也能作为Jenkinsfile
使用流水线可以让我们的任务从界面(UI)上手动操作,转换为代码化,就像是dockerfile一样,从shell命令到配置文件,更适合大型项目和大型复杂项目,可以让团队其他开发者同时参与进来,同时也可以编辑开发Jenkinswebui不能完成的更复杂的构建逻辑,作为开发者可读性也更好。

常用五个语法:

pipeline: 整条流水线
agent: 指定执行器
stages: 所有阶段
stage:某一阶段,可能多个
steps:阶段内的每一步,可执行命令

示例:

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

解释:
pipeline 所有的pipeline定义在pipeline里 ,常量的定义在此外。
agent表示执行流水线任务的时候指定在哪台节点上执行,any表示所有交给jenkins去自己分配
stages表示具体的操作
stage表示具体的操作中的一步,如拉取代码这一步 stage('拉取代码'),括号里面只是定义一个名字而已
steps就是具体代码/命令操作了

示例一:测试流水线运行流程

1. 安装Pipeline插件,并启用
在这里插入图片描述
2. 建立Pipeline项目
在这里插入图片描述

3. 写一个简单的脚本,然后保存
在这里插入图片描述
Groovy是一门编程语言,运行在JVM虚拟机中的,可以和java完美结合,使得Jenkins的流水线更加强大,写一些复杂的业务逻辑的时候,可以类似与,写一些业务代码一样的(如java代码、写一些if else来实现循环操作)

  1. 开始构建流水线,构建完成,插件流水线步骤和用时
    在这里插入图片描述

如果觉得视图不好看的话,可以使用阶段视图 stage View的插件。
插件名为blue ocean(可视化界面):全新的流水线控制ui,可重复执行某阶段代码插件中心搜索blue ocean安装即可

post
流水线完成后可执行的任务
	always 无论流水线或者阶段的完成状态。
	changed 只有当流水线或者阶段完成状态与之前不同时
	failure 只有当流水线或者阶段状态为"failure”运行
	success 只有当流水线或者阶段状态为"success"运行。
	unstable 只有当流水线或者阶段状态为"unstable"运行。例如:测试失败
	aborted 只有当流水线或者阶段状态为"aborted“运行。例如:手动取消

示例二:构建一个完整的拉取代码、构建、运行的自动化流程
示例结束有语法,供于理解。
创建一个简易的流水线语法模板。

pipeline {
    // agent可以指定执行节点,就是配置label节点标签
    // any参数代表不指定,由enkins分配
    // agent docker 代表在有docker的label节点标签上的节点执行
    agent any
    
    stages {
        stage('拉取代码') {
            steps {
                
             echo '拉取代码成功'
            } 
        }
        stage('执行构建') {
            steps {
                
             echo '执行构建成功'
            }
        }
        stage('发布') {
            steps {
                
                echo '执行发布成功'
            }
        }

    }
}

1. 因拉取Gitlab的流水线语法不会写,那么就需要去找生成器来帮助。在项目里面选择流水线语法。
在这里插入图片描述
2. 选取Git,就可以生成一段拉取Git上的代码示范了
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

生成流水线脚本中的gitlab就是刚才配置账号中的ID。

3. 粘贴到流水线中
在这里插入图片描述
4. 构建,需要配置Maven

因Maven的特殊,首先把Maven使用tools引用进来申明一下,tools中的maven363为配置的maven的Name参数,如第二个图片中。
在这里插入图片描述
Maven所在的位置,然后使用Name框里面的参数
在这里插入图片描述

5. 编写构建命令,使用Maven的mvn命令来构建。

	 // 申明引用maven,mavne363是配置的maven的name,下图是配置maven的参数
    tools {
        
        maven "mavne363"
    }
    
    stages {
        stage('拉取代码') {
            steps {
                git branch: 'main', credentialsId: 'gitlab', url: 'http://10.64.95.111/team1/ruoyi-master.git'
                echo '拉取代码成功'
            } 
        }
        stage('执行构建') {
            steps {
                // 双引号代表执行这一行命令,sh执行命令的时候在工作目录下,就是在此项目的路径下," "
                // 三个双引号代表执行多个命令,如果使用双引号一条一条命令去执行,那么在第一条cd到其他目录的时候
                // 第二条命令不会依赖第一条命令的结果,导致构建时候找pom文件失败。
                // 使用三个双引号会把命令看着整体执行,就不会出现依赖上一条命令失败的结果了
                // 第一个"""表示开始,第二个"""表示结束
                // cd ruoyi-master 表示到需要构建的项目目录,当前目录在默认/root/.jenkins/workspace/下
                // workspace就是工作目录,这个目录下就各个项目文件了。
                // mvn clean package然后执行构建命令。
                // -B 交互式  -f 执行pom文件
                sh """
                
                mvn  -B -f ./pom.xml  clean install
                
                """
                echo '执行构建成功'
            }
        }

6. 配置发布,用到ssh插件,生成语法
在这里插入图片描述
放入语法
在这里插入图片描述
6. 验证
在这里插入图片描述
本示例完整语法:

pipeline {
    agent any
    // 申明引用maven,mavne363是配置的maven的name,下图是配置maven的参数
    tools {
        
        maven "mavne363"
    }
    
    stages {
        stage('拉取代码') {
            steps {
                git branch: 'main', credentialsId: 'gitlab', url: 'http://10.64.95.111/team1/ruoyi-master.git'
                echo '拉取代码成功'
            } 
        }
        stage('执行构建') {
            steps {
                // 双引号代表执行这一行命令,sh执行命令的时候在工作目录下,就是在此项目的路径下," "
                // 三个双引号代表执行多个命令,如果使用双引号一条一条命令去执行,那么在第一条cd到其他目录的时候
                // 第二条命令不会依赖第一条命令的结果,导致构建时候找pom文件失败。
                // 使用三个双引号会把命令看着整体执行,就不会出现依赖上一条命令失败的结果了
                // 第一个"""表示开始,第二个"""表示结束
                // cd ruoyi-master 表示到需要构建的项目目录,当前目录在默认/root/.jenkins/workspace/下
                // workspace就是工作目录,这个目录下就各个项目文件了。
                // mvn clean package然后执行构建命令。
                sh """
                
                mvn  -B -f ./pom.xml  clean install
                
                """
                echo '执行构建成功'
            }
        }
        stage('发布') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'docker', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /root/ruoyi-master
docker  stop ry
docker rm -f ry
docker rmi ry:v1
docker build -t ry:v1 .
docker run -itd --name ry  -p 18080:80 ry:v1''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/ruoyi-master', remoteDirectorySDF: false, removePrefix: 'ruoyi-admin/target/', sourceFiles: '**/ruoyi-admin.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                echo '执行发布成功'
            }
        }

    }
}

Jenkins多分支流水线pipeline

声明式流水线
好处:
1. 更像是在Jenkins web ui中的操作
2. 可读性比较高
3. 可以使用blue ocean自动生成
4. 支持语法检查
坏处:
1.代码逻辑能力比脚本式弱,不能完成特别复杂的任务

脚本式流水线
好处:
1. 更少的代码和弱规范要求
2. 更灵活的自定义代码操作
3.不受约束,可以构建特别复杂的工作流和流水线
坏处:
1. 普遍要求更高的编程水平。 语法检查受限于Groovy语言及环境。
2. 和传统Jenkins模型有很大差异。 与声明式流水线的实现相比, 同一工作流会更复杂

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是从0到1使用 Docker + Jenkins + Git + Pytest + Allure 搭建项目自动化框架的步骤: 1. 安装 Docker 和 Docker Compose 首先,需要在服务器上安装 Docker 和 Docker Compose。Docker是一个虚拟化平台,可以通过容器化技术快速部署应用程序。Docker Compose是一个工具,可以定义和运行多个 Docker 容器的应用。 2. 创建 Git 仓库 创建一个 Git 仓库来管理应用程序的源代码。可以使用 GitLab、GitHub 或 Bitbucket 等 Git 托管服务。 3. 编写 Pytest 测试 编写 Pytest 测试来测试应用程序的功能。Pytest 是一个 Python 测试框架,可以用于测试 Python 应用程序的各个方面,包括单元测试、集成测试和端到端测试。 4. 安装 Jenkins 安装 Jenkins 作为持续集成和持续交付的工具。Jenkins 是一个开源 CI/CD 工具,可以自动化构建、测试和部署应用程序。 5. 配置 Jenkins 配置 Jenkins 以连接 Git 仓库和 Docker 守护进程。在 Jenkins 中,需要设置 Git 仓库的地址和凭据,以便 Jenkins 可以拉取代码并构建 Docker 镜像。 6. 构建 Docker 镜像 使用 Dockerfile 构建 Docker 镜像。Dockerfile 是一个包含构建 Docker 镜像所需指令的文本文件。 7. 运行 Pytest 测试 使用 Docker Compose 运行 Pytest 测试。Docker Compose 可以定义和运行多个 Docker 容器的应用。在这里,需要定义一个包含测试和应用程序容器的 Docker Compose 文件。 8. 生成 Allure 报告 使用 Allure 生成测试报告。Allure 是一个测试报告框架,可以生成漂亮且易于阅读的测试报告。 以上就是使用 Docker + Jenkins + Git + Pytest + Allure 搭建项目自动化框架的基本步骤。当然,具体实现还需要根据你的应用程序进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值