实战:Docker+Jenkins+Gitee构建CICD流水线

文章目录

    • 前言
    • Jenkins部署
      • 创建Jenkins docker-compose
      • 配置maven源
      • 启动Jenkins容器安装插件
      • Gitee ssh公匙配置与测试项目提交
    • Jenkins创建流水线
    • 写在最后

前言

持续集成和持续交付一直是当下流行的开发运维方式,CICD省去了大量的运维时间,也能够提高开发者代码集成规范。开发者在开发完需求功能后可以直接提交到gitee,然后jenkins直接进行代码编译和一体化流水线部署。通过流水线部署可以极大的提高devops效率,也是企业信息自动化的一种体现。

Jenkins部署

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。
Jenkins部署可以直接物理部署和容器部署,本次我们直接用docker容器化部署。

创建Jenkins docker-compose

由于高版本一些插件不能完全下载,今天我们使用较低的版本进行演示,一般情况下还是够用了。
[root@localhost app]# pwd
/app
[root@localhost app]# vim docker-compose-jenkins.yaml

version: '3'
services:jenkins:image: registry.cn-hangzhou.aliyuncs.com/senfel/jenkins:2.346.1container_name: jenkinsrestart: unless-stopped  #指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器volumes:- "/usr/bin/docker:/usr/bin/docker"- "/var/run/docker.sock:/var/run/docker.sock"- "/usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7"- "./jenkins/jenkins_home:/var/jenkins_home"- "./jenkins/jenkins_config:/var/jenkins_config"environment:TZ: Asia/ShanghaiLANG: en_US.UTF-8JAVA_OPTS: '-Xmx2048M -Xms2048M -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:MaxNewSize=128m -Djava.util.logging.config.file=/var/jenkins_home/log.properties -Duser.timezone=Asia/Shanghai'user: rootports:- "10000:8080"

配置maven源

创建maven配置文件目录
[root@localhost app]# mkdir -p jenkins/jenkins_home/appconfig/maven
新增settings.xml
[root@localhost app]# vim jenkins/jenkins_home/appconfig/maven/settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><pluginGroups></pluginGroups><proxies></proxies><servers></servers><mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror></mirrors><localRepository>/root/.m2</localRepository><profiles><profile><id>jdk-1.8</id><activation><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile></profiles>
</settings>

启动Jenkins容器安装插件

[root@localhost app]# docker-compose -f docker-compose-jenkins.yaml up -d
在这里插入图片描述

浏览器http://10.10.22.91:10000
在这里插入图片描述

等待初始化完成解锁Jenkins
在这里插入图片描述

获取初始密码
[root@localhost app]# cat jenkins/jenkins_home/secrets/initialAdminPassword
安装推荐插件
在这里插入图片描述

创建用户并配置实例
在这里插入图片描述

安装Docker Pipleline插件
在这里插入图片描述

在 系统设置->Configure Global Security”,不验证ssh可用性
在这里插入图片描述

Gitee ssh公匙配置与测试项目提交

1、进入docker容器创建rsa
[root@localhost app]# docker exec -it jenkins bash
root@c781568bbe98:/# ssh-keygen -t rsa -C “senfel@sina.cn”
后续步骤全部enter
在这里插入图片描述

查看公匙并配置在gitee ssh
root@c781568bbe98:/# cat /root/.ssh/id_rsa.pub
在这里插入图片描述

查看私匙并记住后面jenkins创建流水线配置凭证
root@c781568bbe98:/# cat /root/.ssh/id_rsa

2、准备一个项目, 在根目录下创建两个文件Dockerfile、 Jenkinsfile
在这里插入图片描述

Dockerfile

FROM openjdk:8-jre-alpine
# 将当前目录下的jar包复制到docker容器的/目录下
COPY target/*.jar /app.jar
# 运行过程中创建一个xx.jar文件
RUN touch /app.jar;ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
ENV PARAMS=""# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /app.jar $PARAMS" ]

Jenkinsfile

pipeline{agent anyenvironment {WS = "${WORKSPACE}"IMAGE_NAME = "demo"}//定义流水线的加工流程stages {//流水线的所有阶段stage('step1:env check'){steps {sh 'pwd && ls -alh'sh 'printenv'sh 'docker version'sh 'java -version'sh 'git --version'}}stage('step2:compile'){agent {docker {image 'maven:3-alpine'args '-v maven-repository:/root/.m2'}}steps {sh 'pwd && ls -alh'sh 'mvn -v'sh 'cd ${WS} && mvn clean package -s "/var/jenkins_home/appconfig/maven/settings.xml" -Dmaven.test.skip=true'}}stage('step3:package'){steps {sh 'pwd && ls -alh'sh 'docker build -t ${IMAGE_NAME} .'}}stage('step4:arrange'){// 删除容器和虚悬镜像steps {sh 'pwd && ls -alh'sh 'docker rm -f ${IMAGE_NAME} || true && docker rmi $(docker images -q -f dangling=true) || true'sh 'docker run -d -p 8888:8088 --name ${IMAGE_NAME} -v /app/logs/${IMAGE_NAME}:/logs/${IMAGE_NAME} ${IMAGE_NAME}'}}}
}

3、提交到Gitee
在这里插入图片描述

Jenkins创建流水线

1、控制台-新建item
在这里插入图片描述

2、直接进入流水线选项进行git配置
2.1 添加凭证
在这里插入图片描述
在这里插入图片描述

2.2 填入gitee 代码仓库和选择喜欢的分支
在这里插入图片描述

3、流水线进行构建演示
3.1 进入我们自建流水线demo,点击立即构建
在这里插入图片描述

3.2 查看构建视图
在这里插入图片描述

如图所示:构建成功

3.3 工作台查看流水线
在这里插入图片描述

如图所示:流水线demo上次构建成功

3.4 验证demo项目部署功能
GET 10.10.22.91:8888/hello
在这里插入图片描述

经测试,功能正常,流水线部署成功。

写在最后

实战:Docker+Jenkins+Gitee构建CICD流水线还是较为简单,本次我们引入了Docker Pipleline进行我们项目从gitee直接流水线话构建部署。当然我们也可以按照Generic Webhook Trigger插件进行自动触发构建,也是比较简单。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/13214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch基本使用--ElasticSearch文章一

文章目录 官网学习必要性elasticsearch/kibana安装版本数据结构说明7.x版本说明ElasticSearch kibana工具测试后续我们会一起分析 官网 https://www.elastic.co/cn/ 学习必要性 1、在当前软件行业中&#xff0c;搜索是一个软件系统或平台的基本功能&#xff0c; 学习Elastic…

Git克隆文件不显示绿色勾、红色感叹号等图标

1、问题 Git和TorToiseGit安装后&#xff0c;Git克隆的文件不会显示绿色勾、红色感叹号等图标。 2、检查注册表 2.1、打开注册表 (1)WinR打开运行窗口&#xff0c;输入regedit&#xff0c;点击确定&#xff0c;打开注册表编辑器。 2.2、找如下路径 (1)找到路径 计算机\HKEY_…

VBA技术资料MF34:检查Excel自动筛选是否打开

【分享成果&#xff0c;随喜正能量】聪明人&#xff0c;抬人不抬杠&#xff1b;傻子&#xff0c;抬杠不抬人。聪明人&#xff0c;把别人抬得很高&#xff0c;别人高兴、舒服了&#xff0c;看你顺眼了&#xff0c;自然就愿意帮你&#xff01;而傻人呢&#xff1f;不分青红皂白&a…

Golang之路---01 Golang的安装与配置

Golang之路—01 Golang语言安装与配置 官网上下载Windows环境下的安装包 官网下载地址 双击下载后的文件进行安装&#xff0c;可根据需要自定义选择解压后的文件位置。 接着新创建一个文件夹&#xff0c;保存Golang语言项目。 在里面新建bin,pkg,src三个文件夹。 环境变量…

Verilog语法学习——LV4_移位运算与乘法

LV4_移位运算与乘法 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 题目描述&#xff1a; 已知d为一个8位数&#xff0c;请在每个时钟周期分别输出该数乘1/…

Linux:Linux的发展史和作用有哪些?

文章目录 Linux是什么&#xff1f;Linux的开源特征为什么要学习Linux&#xff1f;Linux的应用场景有哪些&#xff1f; Linux是什么&#xff1f; 简单来说&#xff0c;Linux就是操作系统&#xff0c;它和Windows等软件一样&#xff0c;都只是操作系统&#xff0c;并无区别 Linu…

电脑选睡眠、休眠还是关机?

关机 这是大家最熟悉的。关机时&#xff0c;系统首先关闭所有运行中的程序&#xff0c;然后关闭系统后台服务。随后&#xff0c;系统向主板请求关机&#xff0c;主板断开电源的供电使能&#xff0c;让电源切断对绝大多数设备的供电&#xff08;只剩一些内部零件仍会维持电源供应…

华为刷题:HJ3明明随机数

import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int N scan.nextInt();int[] arr new int[N];for (int i 0; i < N; i) {int n sca…

PostgreSQL 简洁、使用、正排索引与倒排索引、空间搜索、用户与角色

PostgreSQL使用 PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS)&#xff0c;在灵活的BSD许可证下发行。PostgreSQL 9.0 &#xff1a;支持64位windows系统&#xff0c;异步流数据复制、Hot Standby&#xff1b;生产环境主流的版本是PostgreSQL 12 BSD协议 与 GPL协议 …

SQL server 文件占用硬盘过大 日志 读写分离同步文件过大清理 DBCC收缩数据库 分发数据库distribution收缩

一顿操作猛如虎 又省出好几十G硬盘空间 小破站又能蹦跶了 目标&#xff1a;实例库日志压缩清理,分发数据库压缩清理 采用SQL 脚本收缩数据库 截断事务日志 backup log [数据库名] with no_log收缩数据库 dbcc shrinkdatabase ([数据库名]) 4.以上操作都不行的话&#xff0…

物联网场景中的边缘计算解决方案有哪些?

在物联网场景中&#xff0c;边缘计算是一种重要的解决方案&#xff0c;用于在物联网设备和云端之间进行实时数据处理、分析和决策。HiWoo Box作为工业边缘网关设备&#xff0c;具备边缘计算能力&#xff0c;包括单点公式计算、Python脚本编程以及规则引擎&#xff0c;它为物联网…

华为云NFS使用API删除大文件目录

最近在使用华为云SFS时&#xff0c;如果一个目录存储文件数超过100W&#xff0c;执行 “rm -rf path”时&#xff0c;存在删不动的情况&#xff0c;可以使用华为云API接口&#xff0c;执行异步删除。 华为官网&#xff1a; 删除文件系统目录_弹性文件服务 SFS_API参考_SFS Tu…

高效率,38V最大输入单电感同步升/降稳压器SYV939C

SYV939是一种高压同步降压-升压转换器。该器件工作在4V至28V的宽输入电压范围内&#xff0c;具有10max平均电感电流能力。四个集成的低RDS(ON)开关最大限度地减少了传导损耗。 SYV939c包括完整的保护功能&#xff0c;如输出过流/短路保护&#xff0c;过压保护和热停机&#xff…

Eclipse memory analyzer 分析GC dump日志定位代码问题

1、问题描述&#xff1a; 使用命令 jstat -gcutil [pid] 查看JVM GC日志&#xff0c;发现生产系统频繁FullGC&#xff0c;大概几分钟一次&#xff0c;而且系统响应速度变慢很多 再使用 free -g 查看服务器内存全部占用&#xff0c;猜测是内存溢出了 2、导出dump日志 jmap -du…

【C++ 程序设计】实战:C++ 变量实践练习题

目录 01. 变量&#xff1a;定义 02. 变量&#xff1a;初始化 03. 变量&#xff1a;参数传递 04. 变量&#xff1a;格式说明符 ① 占位符 “%d” 改为格式说明符 “%llu” ② 占位符 “%d” 改为格式说明符 “%f” 或 “%e” 05. 变量&#xff1a;字节数统计 06. 变量&a…

【Javalin 】Javalin Kotlin/Java 轻量级 REST API 库

Javalin 旨在为 Kotlin 和 Java 提供一个易用的轻量级 REST API 库。这个 REST API 易于使用&#xff0c;API 也非常的流畅。 Javalin 主要有以下的特点&#xff1a; 易用&#xff1a;不用提前学习任何概念就可以开始使用 一致的 API&#xff1a;所有的处理程序和映射器在 Co…

Redis学习

1.数据类型 Redis支持五种数据类型&#xff0c;分别是String&#xff08;字符串&#xff09;、hash&#xff08;哈希&#xff09;、list&#xff08;列表&#xff09;、set&#xff08;集合&#xff09;、zset&#xff08;有序集合&#xff09;。 1.1 String&#xff08;字符…

Android性能优化之Thread native层源码分析(InternalError/Out of memory)

近期处理Bugly上OOM问题&#xff0c;很多发生在Thread创建启动过程&#xff0c;虽然最后分析出是32位4G虚拟内存不足导致&#xff0c;但还是分析下Java层Thread 源码过程&#xff0c;可能会抛出的异常InternalError/Out of memory。 Thread报错堆栈&#xff1a; Java线程创建…

无涯教程-jQuery - serialize( )方法函数

serialize()方法将一组输入元素序列化为数据字符串。 serialize( ) - 语法 $.serialize( ) serialize( ) - 示例 假设无涯教程在serialize.php文件中具有以下PHP内容- <?php if( $_REQUEST["name"] ) {$name$_REQUEST[name];echo "Welcome ". $na…

递归:一个图教学会递归原理

递归的特点 实际上&#xff0c;递归有两个显著的特征,终止条件和自身调用: 自身调用&#xff1a;原问题可以分解为子问题&#xff0c;子问题和原问题的求解方法是一致的&#xff0c;即都是调用自身的同一个函数。终止条件&#xff1a;递归必须有一个终止的条件&#xff0c;即不…