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

文章目录

前言

持续集成和持续交付一直是当下流行的开发运维方式,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.1 container_name: jenkins restart: 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/Shanghai LANG: en_US.UTF-8 JAVA_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: root ports: - "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 nexus-aliyun central Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public /root/.m2 jdk-1.8 1.8 1.8 1.8 1.8 ### 启动Jenkins容器安装插件 \[root@localhost app\]# docker-compose -f docker-compose-jenkins.yaml up -d ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/19719b6ac2714bfc9dfa5f54ae5cb748.png) 浏览器http://10.10.22.91:10000 ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/e866da215e45453ca7b9ee781bbee600.png) 等待初始化完成解锁Jenkins ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/1cbde345f50a4379b687a86e0f5ecc1a.png) 获取初始密码 \[root@localhost app\]# cat jenkins/jenkins_home/secrets/initialAdminPassword 安装推荐插件 ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/c6a85707c18345e8a8bc79ad8d8864bb.png) 创建用户并配置实例 ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/8467bff8483445bd9ceff16505355554.png) 安装Docker Pipleline插件 ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/c347bfadb0c14334b94d3f70e5c948cd.png) 在 系统设置-\>Configure Global Security",不验证ssh可用性 ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/0e1b508406914666a1298ff52ce0168d.png) ### Gitee ssh公匙配置与测试项目提交 1、进入docker容器创建rsa \[root@localhost app\]# docker exec -it jenkins bash root@c781568bbe98:/# ssh-keygen -t rsa -C "[email protected]" 后续步骤全部enter ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/29e00c774923474888a31a7cdaa0c580.png) 查看公匙并配置在gitee ssh root@c781568bbe98:/# cat /root/.ssh/id_rsa.pub ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/dc97b01779424274a91c3531a196ed8c.png) 查看私匙并记住后面jenkins创建流水线配置凭证 root@c781568bbe98:/# cat /root/.ssh/id_rsa 2、准备一个项目, 在根目录下创建两个文件Dockerfile、 Jenkinsfile ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/c294fbd65edd4b689d968053522a0bd1.png) 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 any environment { 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 ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/903114833c5e4a85a294dc4e6b913826.png) ## Jenkins创建流水线 1、控制台-新建item ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/aea4633c069546daa3b8b77955bb4e3d.png) 2、直接进入流水线选项进行git配置 2.1 添加凭证 ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/081ca05bf19b451f8b34c2752c157d21.png) ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/84f7429d464b48e0afeaa2b876dde4d9.png) 2.2 填入gitee 代码仓库和选择喜欢的分支 ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/a0040af45d1c4076810f3232997fe4de.png) 3、流水线进行构建演示 3.1 进入我们自建流水线demo,点击立即构建 ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/70ba94c4e351419ea38799e2b1a5122d.png) 3.2 查看构建视图 ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/3174f71802c646a59acd9a0af28d1fa0.png) 如图所示:构建成功 3.3 工作台查看流水线 ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/6e5eab1f78d240bbbb7204a1bc7daa45.png) 如图所示:流水线demo上次构建成功 3.4 验证demo项目部署功能 GET 10.10.22.91:8888/hello ![在这里插入图片描述](https://file.jishuzhan.net/article/1685166488811474946/3fc8d9d2cfc6455585979724ca2c7e30.png) 经测试,功能正常,流水线部署成功。 ## 写在最后 实战:Docker+Jenkins+Gitee构建CICD流水线还是较为简单,本次我们引入了Docker Pipleline进行我们项目从gitee直接流水线话构建部署。当然我们也可以按照Generic Webhook Trigger插件进行自动触发构建,也是比较简单。

相关推荐
前行的小黑炭33 分钟前
设计模式:为什么使用模板设计模式(不相同的步骤进行抽取,使用不同的子类实现)减少重复代码,让代码更好维护。
android·java·kotlin
Java技术小馆38 分钟前
如何设计一个本地缓存
java·面试·架构
XuanXu1 小时前
Java AQS原理以及应用
java
风象南4 小时前
SpringBoot中6种自定义starter开发方法
java·spring boot·后端
mghio13 小时前
Dubbo 中的集群容错
java·微服务·dubbo
咖啡教室18 小时前
java日常开发笔记和开发问题记录
java
咖啡教室18 小时前
java练习项目记录笔记
java
鱼樱前端19 小时前
maven的基础安装和使用--mac/window版本
java·后端
RainbowSea19 小时前
6. RabbitMQ 死信队列的详细操作编写
java·消息队列·rabbitmq