Jenkins CI、CD入门操作

2023-10-27

基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署

image.png

准备测试项目

准备一个简单的Spring boot 项目
image.png

Jenkins新建任务

image.png

image.png

Jenkins关联Gitlab自动拉取最新代码

image.png

ssh key 配置

进入容器生成新的ssh key

[root@localhost mytest]# docker exec -it jenkins bash
jenkins@790140a70e6f:/$ cd /var/jenkins_home/
jenkins@790140a70e6f:~$ ssh-keygen -t rsa -C "wangyuhao01@163.com" 
Generating public/private rsa key pair.
Enter file in which to save the key (/var/jenkins_home/.ssh/id_rsa): 
Created directory '/var/jenkins_home/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/jenkins_home/.ssh/id_rsa
Your public key has been saved in /var/jenkins_home/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:LJt2FmYqJFN6fUrn64TtXPgOTigPKLVwLwFJjNK+5Wo wangyuhao01@longfor.com
The key's randomart image is:
+---[RSA 3072]----+
|oo               |
|+o.              |
|+.  .            |
| ..o.. .         |
|. B+o + S        |
| +.X.. / o       |
|. +.= O X .      |
| .E. * O =       |
| .    ..*.o      |
+----[SHA256]-----+ 
[root@localhost data]# cd .ssh/
[root@localhost .ssh]# ls
id_rsa  id_rsa.pub

将公钥配id_rsa.pub置到gitlab,私钥id_rsa配置到jenkins全局凭据.
image.png

image.png

image.png

image.png

执行构建&查看日志

image.png

image.png

通过日志我们可以发现jenkins将代码拉取到了/var/jenkins_home/workspace/mytest1目录,/var/jenkins_home/目录我们已经映射到了宿主机的/usr/local/docker/jenkins/data目录,到这个目录我们可以看到已经拉取下来后的文件。
image.png

配置Maven构建代码

将安装好的maven和jdk映射到jenkins容器的数据卷中

mv /usr/local/maven/ /usr/local/docker/jenkins/data/
mv jdk1.8.0_361/ /usr/local/docker/jenkins/data/jdk

映射好后,我们可以到jenkins容器中的home目录查看到maven和jdk。
image.png

Jenkins配置Maven&JDK

image.png

image.png

/var/jenkins_home/maven/apache-maven-3.8.8就是刚刚映射到容器的maven地址。

在任务上使用Maven构建项目

image.png

image.png

重新构建任务&日志

image.png

image.png

查看jar包

[root@localhost data]# docker exec -it jenkins bash
jenkins@790140a70e6f:/$ cd /var/jenkins_home/workspace/mytest1/spring-boot-student-devops/target
jenkins@790140a70e6f:~/workspace/mytest1/spring-boot-student-devops/target$ ls
classes            generated-test-sources  maven-status                                   spring-boot-student-devops-0.0.1-SNAPSHOT.jar.original
generated-sources  maven-archiver          spring-boot-student-devops-0.0.1-SNAPSHOT.jar  test-classes
jenkins@790140a70e6f:~/workspace/mytest1/spring-boot-student-devops/target$ 

将jar包推送到远程服务器&通过Docker打包部署

配置全局server服务

image.png

image.png

新增Docker打包和启动所需的配置

image.png

在项目下新增docker文件夹,然后新增Dockerfile和docker-compose.yml文件
增加Dockerfile文件

# 设置依赖镜像
FROM daocloud.io/library/java:8u40-jdk
# 拷贝jar到容器工作目录
WORKDIR /usr/local/docker
COPY ./app.jar /usr/local/docker
# 启动jar文件
CMD java -jar app.jar

增加docker-compose.yml文件

version: "3.1"
services:
  mytest:
    # 通过当前目录下的Dockerfile来构建镜像
    build:
      context: ./
      dockerfile: Dockerfile
    image: mytest:v1.0.0
    container_name: mytest
    ports:
      # 将容器80端口映射到宿主机80端口映上
      - 8081:80

配置单个任务的Publish

image.png

image.png

命令解释

# 切换到上传后的docker
cd /root/docker
# 删除原有jar包
rm -rf app.jar
# 将新的jar包拷贝到docker目录
mv ../spring-boot-student-devops/target/*.jar app.jar
# 删除无效目录
rm -rf ../spring-boot-student-devops
# 通过docker-compose进行打包和启动容器
docker-compose down
docker-compose up -d --build
# 删除所有未打标签的镜像
docker rmi $(docker images -q -f dangling=true)

执行任务构建&日志

image.png
这里传输了3个文件

目前服务器查看部署情况

[root@localhost docker]# docker ps
CONTAINER ID   IMAGE           COMMAND                   CREATED             STATUS             PORTS                                   NAMES
24d77685afcd   mytest:v1.0.0   "/bin/sh -c 'java -j…"   About an hour ago   Up About an hour   0.0.0.0:8081->80/tcp, :::8081->80/tcp   mytest
[root@localhost docker]# 

image.png

参数化构建项目

配置参数类型

image.png

image.png

设置构建前的操作

image.png

image.png

# 配置参数
REMOTE_NAME="origin"    # 远程仓库名
BRANCH_NAME=$branch     # 拉取的分支名

BRANCH_NAME=${BRANCH_NAME#*/}

# 检查输入参数
if [ -z "$BRANCH_NAME" ]; then
  echo "Please provide the branch name as the first argument."
  exit 1
fi

# 判断本地分支是否存在
if git show-ref --verify --quiet "refs/heads/$BRANCH_NAME"; then
  echo "Local branch $BRANCH_NAME exists."
  git checkout $BRANCH_NAME
  git config pull.rebase false
  git pull $REMOTE_NAME $BRANCH_NAME
else
  echo "Local branch $BRANCH_NAME does not exist."
  git fetch $REMOTE_NAME $BRANCH_NAME
  git checkout -b $BRANCH_NAME $REMOTE_NAME/$BRANCH_NAME
fi

# 执行完毕
echo "The latest code has been successfully pulled from the remote branch."
exit 0

准备多分支

image.png

重新构建任务

image.png

结果查看

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jenkins CI、CD入门操作 的相关文章

随机推荐

  • jq移除某个元素样式

    执行 示例 select removeCss color select removeCss color border width function fn removeCss function options var type typeof
  • 关于git-u、--set-upstream和--set-upstream-to参数的理解

    1 git branch 既可以使用 set upstream又可以使用 set upstream to 但是前者已经被弃用 用法 git branch set upstream to origin mybranch1 mybranch1
  • 设计模式之责任链模式(Chain)

    设计模式之责任链模式 Chain 本篇为 https github com iluwatar java design patterns tree master chain 阅读笔记 意图 避免请求发送者与接收者耦合在一起 让多个对象都有可能
  • 【Cocos谁学谁会】定制属于自己的脚本模板

    版权申明 本文原创首发于以下网站 您可以自由转载 但必须加入完整的版权声明 博客园 https www cnblogs com MogooStudio csdn博客 https blog csdn net nmjkl001 知乎 https
  • 【C# in Unity】取绝对值;position变换注意点;协程注意点

    1 C 中取绝对值 Math Abs value C 中取绝对值的函数 weixin 30715523的博客 CSDN博客 2 position变换注意点 不可以这样写 content transform position x x 正确写法
  • Android Studio中会自动添加@org.jetbrains.annotations.Nullable 的解决办法

    在Activity中重写onCreate等方法时 输入完onCreate后直接回车导入 会自动引入如下代码 Override protected void onCreate Nullable org jetbrains annotation
  • Python蓝桥杯 基础练习 A+B问题

    A B map int input split print A B input 从键盘输入数字 split 未带参数时 将字符串以空格进行分割 map function iterator 对可迭代对象iterator进行迭代使用functi
  • Ubuntu下查看CUDA和CUDNN版本的方法

    cuda 版本 cat usr local cuda version txt cudnn 版本 cat usr local cuda include cudnn h grep CUDNN MAJOR A 2 这个结果就表示我的CUDA版本为
  • task3:西瓜书第四章(1)

    本次是阅读西瓜书第四章 以下为笔者是在阅读第四章决策树时一些之前不曾关注地方的补充 1 实际决策树学习算法是基于启发式算法 如贪婪算法 寻求在每个节点上的局部最优决策 这样的算法思想决定了在执行过程中不能保证返回全局最优决策树 例如ID3算
  • 英特尔® 硬件加速执行管理器安装指南 — Microsoft Windows*

    介绍 本文将指导您安装英特尔 硬件加速执行管理器 英特尔 HAXM 这是一款可以使用英特尔 虚拟化技术 VT 加快 Android 开发速度的硬件辅助虚拟化引擎 管理程序 前提条件 英特尔 HAXM 要求首先安装 Android SDK 版
  • 几行代码搞定Android底部导航栏

    底部导航栏的实现也不难 就是下边是几个Tab切换 上边一般是一个FrameLayout 然后FrameLayout中切换fragment 网上有不少关于Android底部导航栏的文章 不过好像都只是关于下边Tab切的 没有实现Tab与fra
  • Hexo搭建博客教程-基于Butterfly主题

    title Hexo搭建博客教程 tags Hexo 博客教程 categories Hexo keywords Hexo 博客教程 description Hexo搭建博客 以及主题butterfly中一些常规配置 cover https
  • sqlite3交叉编译

    1 交叉编译sqllite3可以先从官网下载最新最新的源码进行编译 sqlite3下载sqlite3有两种版本的源代码 sqlite amalgamation 3420000 zip这种是将所有的操作放到sqlite3中进行使用的 虽然官方
  • synchronized 的原理

    文章目录 前言 通过一系列的问题 了解synchronized 总结 前言 synchronized 是一个关键字 在多线程中 为了同步代码块 或者同步方法就会使用到 在面试的过程中 也是非常常见的 所以很有必要掌握 通过一系列的问题 了解
  • 题5:字符串的压缩

    题目 利用字符重复出现的次数 编写一个方法 实现基本的字符串压缩功能 比如 字符串 aabcccccaaa 经压缩会变成 a2b1c5a3 若压缩后的字符串没有变短 则返回原先的字符串 给定一个string iniString为待压缩的串
  • Pymol入门教程--基础

    Pymol入门教程 基础 软件界面介绍 内置demo介绍 打开PyMOL 点击1 1菜单窗口的Wizard菜单 然后点击Demo gt Representations然后在2 3对象窗口和2 4模式窗口之间会出现各种示例 Represent
  • Docker-Compose的安装

    一 什么是Docker Compose Compose项目来源于之前的fig项目 使用python语言编写 与docker swarm配合度很高 Compose 是 Docker 容器进行编排的工具 定义和运行多容器的应用 可以一条命令启动
  • IDEA插件安装以及一些不错的插件的推荐

    IDEA有自己庞大的插件支持 来丰富生态 现在一个好用点的工具如果没有点插件都不好意思 当然了 微信除外 因为人家会告你 一 插件的安装 IDEA的插件安装和别的IDE工具 比如eclipse或者vscode的位置都差不多 还是具体说一下
  • TensorFlow二元-多类-多标签分类示例

    探索不同类型的分类模型 使用 TensorFlow 构建二元 多类和多标签分类器 二元分类 简述 逻辑回归 二元交叉熵 二元分类架构 案例 逻辑回归预测获胜团队 多类分类 简述 Softmax 函数 分类交叉熵 多类分类架构 案例 预测航天
  • Jenkins CI、CD入门操作

    基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署 准备测试项目 准备一个简单的Spring boot 项目 Jenkins新建任务 Jenkins关联Gitlab自动拉取最新