实战: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 "senfel@sina.cn" 后续步骤全部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插件进行自动触发构建,也是比较简单。

相关推荐
爱编程的小白L43 分钟前
基于springboot志愿服务管理系统设计与实现(附源码)
java·spring boot·后端
聪明的笨猪猪3 小时前
Java Redis “持久化”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
聪明的笨猪猪3 小时前
Java Redis “核心基础”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
奋斗的小monkey5 小时前
Spring Boot 3.x核心特性与性能优化实战
java·spring boot·微服务·性能优化·响应式编程
程序猿DD6 小时前
将 GPU 级性能带到企业级 Java:CUDA 集成实用指南
java·架构
一成码农6 小时前
JavaSE面向对象(上)
java
qq_574656256 小时前
java-代码随想录第66天|Floyd 算法、A * 算法精讲 (A star算法)
java·算法·leetcode·图论
我是好小孩7 小时前
【Android】六大设计原则
android·java·运维·服务器·设计模式
小霞在敲代码7 小时前
HashMap - 底层原理
java·hashmap