Docker搭建Jenkins 实现自动部署教程

  1. 安装 Jenkins:
    首先,在服务器上安装 Jenkins。可以从 Jenkins 的官方网站(https://www.jenkins.io/download/)下载适用于您操作系统的安装包,并按照安装说明进行安装 或者 使用Docker容器。
  2. 安装 GitLab 插件:
    在 Jenkins 中安装 GitLab 插件,以便与 GitLab 服务器进行集成。您可以通过 Jenkins 管理面板的插件管理器来安装该插件。
  3. 配置 Jenkins 项目:
    在 Jenkins 中创建一个新的项目(或者使用现有的项目)。
    在项目配置中,选择 GitLab 作为版本控制工具,并提供 GitLab 仓库的 URL。
    配置 Jenkins 如何获取源代码,您可以选择通过 SSH 密钥或者 GitLab 的访问令牌进行认证。
    配置构建触发器,例如当 GitLab 上的特定分支有新的提交时触发构建。
  4. 配置构建步骤:
    在 Jenkins 项目中添加构建步骤,例如构建、测试、部署等。您可以使用 Jenkins 的插件来执行这些步骤,或者通过调用 shell 脚本来执行相关操作。

环境安装

linux上进行docker安装有两种方式:

  1. Docker自动化安装
  2. Docker手动安装

可以根据该文章的步骤进行安装:https://blog.csdn.net/weixin_44876263/article/details/136714078?spm=1001.2014.3001.5502

搭建Jenkins容器

  1. 拉取jenkins镜像
docker pull jenkins/jenkins:lts-alpine-jdk17

  1. 生成jenkins容器
#!/bin/bash

# 设置变量
PORT=8081
PROJECT\_DIR="/opt/cx/docker/jenkins"

# 创建目录结构
mkdir -p "$PROJECT\_DIR/jenkins\_home"
mkdir -p "$PROJECT\_DIR/logs"

# 运行 Jenkins 容器
docker run -d \
  --restart=always \
  --privileged=true \
  --name jenkins \
  -u root \
  -p "$PORT:8080" \
  -v "$PROJECT\_DIR/jenkins\_home:/var/jenkins\_home" \
  -v "$PROJECT\_DIR/logs:/var/log/jenkins" \
  -v "/etc/localtime:/etc/localtime" \
  jenkins/jenkins:lts-alpine-jdk17

  1. 通过shell脚本运行生成jenkisn容器
    在这里插入图片描述
  2. 登陆网址,测试jenkins是否运行成功
    在这里插入图片描述

配置Jenkins

  1. 首次登陆,根据密码提示地址,找到初始密码,修改jenkins密码并登陆进行设置
  2. 安装相应的插件

在这里插入图片描述

安装插件
  1. gitLab(代码管理)
    在这里插入图片描述
  2. pipeline(流水线)(jenkins推荐安装时自动安装)
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. SSH(远程登录连接)

在这里插入图片描述

  1. NodeJs(前端构建)

在这里插入图片描述

  1. Role(jenkins用户权限控制插件)
    在这里插入图片描述
  2. SonarQube(代码检测插件)
    在这里插入图片描述
  3. 记录job的历史更新记录插件(可找到历史命令脚本)
    在这里插入图片描述
在jenkins容器中安装JDK、Maven、Node等环境(位置docker jenkins_home中)

jdk:jenkins docker 一般会自带jdk版本(自带的最方便)

mavan:将maven的压缩包解压到相应位置

node

  1. 进入jenkins对应容器中docker exec -it [对应容器id] bash
  2. 安装nodejs , apk add --no-cache nodejs
  3. 再将需要的其他版本node的压缩包解压到相应位置 或者 可以在jenkins中选择自动安装node版本

注意: apk add --no-cache nodejs 这一步是必须的 否则构建前端可能会出现env: ‘node’: No such
file or directory的错误

在这里插入图片描述

配置JDK、Maven、Node环境
  1. 全局属性配置
    系统管理——>系统配置——>全局属性
    在这里插入图片描述
  2. gitLab配置
    在这里插入图片描述
  3. SSH配置

在jenkins_home中加入私钥文件(用于远程访问其他服务器等)

在这里插入图片描述
在这里插入图片描述

注意:首次访问远程服务器时,需要在jenkins的docker容器内 输入命令ssh xxx.xxx.xxx.xxx 访问其他服务器
授权成功后,jenkins才能无阻碍的访问其他服务器,否则jenkins执行脚本会访问失败
在这里插入图片描述
被访问的服务器需要填入公钥
在这里插入图片描述

注意:若jenkins是docker运行,若id_rsa文件(ssh私钥)不存在需要将id_rsa文件生成在容器内的jenkins_home目录下,才会生效

在这里插入图片描述

在SSH Server中加入需要远程连接的服务器,填写完成后,可以点击Test Configuration 查看是否成功

注意:远程连接的服务器需要在该服务器的/root/.ssh/authorized_keys文件中加入公钥
在这里插入图片描述

配置 全局工具配置

1. Maven 配置

在这里插入图片描述

2. JDK 安装

在这里插入图片描述

3. git安装

在这里插入图片描述

4. Maven安装

在这里插入图片描述

5. NodeJs安装

在这里插入图片描述

Jenkins自动部署pipeline脚本

前端

1. 编写脚本

pipeline {
    agent any
    
    environment {   
        // 定义远程服务器信息
        remoteServer = 'root@xxx.xxx.xxx.xxx'
        // 定义远程目标目录路径
        remoteDirectory = '/data/project'
        // 定义本地文件路径
        localFile = '/var/jenkins\_home/workspace/xxxxxxx' //一般为该脚本的工作空间地址
    }
    
    stages {
        stage('拉取代码') {
            steps {
                // 使用Git插件拉取代码
                checkout([
                    $class: 'GitSCM',
                    branches: [[name: 'test']],
                    doGenerateSubmoduleConfigurations: false,
                    extensions: [],
                    userRemoteConfigs: [[
                        credentialsId: '8b6ff462-7abb-462a-a438-af1457d4509d', //流水线语法生成的git凭证
                        url: 'http://192.168.1.1/cd/xxxxx.git' //git/gitlab的项目地址
                    ]]
                ])
            }
        }
        
        stage('构建静态资源') {
            steps {
                // 在指定目录下进行构建
                dir('${localFile}/pc-eva-sys') { //docker中拉取的前端相关文件的路径
                    nodejs('node20') {
                        // 安装npm依赖
                        sh 'npm install'
                        // 运行构建命令
                        sh 'npm run build:dev'
                        // 压缩构建产物
                        sh 'tar -zcf ./dist/dist.tar.gz ./dist/\*'
                    }
                }     
            }
        }
        
        stage('部署静态资源') {
            steps {
                script {
                    // 发送静态资源压缩包到远程服务器
                    sh "scp $localFile/pc-stu-eva-sys/dist/dist.tar.gz $remoteServer:$remoteDirectory/"
                    // 在远程服务器上解压缩静态资源
                    sh "ssh $remoteServer 'sudo tar -zxf $remoteDirectory/dist.tar.gz -C $remoteDirectory'"
                    // 删除远程服务器上的压缩包
                    sh "ssh $remoteServer 'rm -rf $remoteDirectory/dist.tar.gz'"
                }
            }
        }
        
        stage('清理工作区') {
            steps {
                script {
                    // 清理工作区
                    deleteDir()
                }
            }
        }
    }
}


2. 执行结果
在这里插入图片描述

后端

1. 设置构建参数
请添加图片描述
在这里插入图片描述

2. 编写脚本

pipeline {
    agent any
    
    environment {
        // 远程服务器上的目标目录路径
        remoteDirectory = '/data/xxx/deploy\_jar'
        // 要发送到远程服务器的本地文件路径
        localFile = '/var/jenkins\_home/workspace/xxxxxx/xxxxx-0.0.1-SNAPSHOT.jar'
        // 远程jar包地址
        remoteJarPath = "$remoteDirectory/xxxxx-0.0.1-SNAPSHOT.jar"
        // 指定的JDK工具
        jdkTool = 'jdk17'
        // 指定的Maven工具
        mavenTool = 'apache-maven-3.6.3'
    }
    
    
    stages {
        stage('拉取代码') {
            steps {
                checkout(
                    [$class: 'GitSCM',
                        branches: [[name: '${commit}']],
                        doGenerateSubmoduleConfigurations: false,
                        extensions: [],
                        // Git仓库的URL和凭证
                        userRemoteConfigs: [[credentialsId: 'xxxxxxxxxxxxxxxxxx', url: 'xxxxxxxxxxxxxxxxxxxxx']]]
                )
            }
        }
        
        stage('maven编译') {
            tools {
                // 使用指定的JDK和Maven工具
                jdk jdkTool
                maven mavenTool
            }
            steps {
               // 使用Maven编译项目
               sh "mvn -f stu-system/pom.xml clean -P product package"
            }
        }
        
![](https://img-blog.csdnimg.cn/img_convert/9a8cb5f8c0ec69e6499adead0da6e95b.png)



最全的Linux教程,Linux从入门到精通

======================

1.  **linux从入门到精通(第2版)**

2.  **Linux系统移植**

3.  **Linux驱动开发入门与实战**

4.  **LINUX 系统移植 第2版**

5.  **Linux开源网络全栈详解 从DPDK到OpenFlow**



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png)



第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)



**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值