简单的docker学习 第13章 CI/CD与Jenkins(上)

第13章 CI/CD 与 Jenkins

13.1 平台登录页面

13.1.1 GitLab-8098-root

image-20240724083708090

13.1.2 Jenkins-8080-zhangsan

image-20240724083744060

13.1.3 SonarQube-9000-admin

image-20240724083815424

13.1.4 harbor-80-admin

image-20240724083644910

13.2 CI/CD 与 DevOps

13.2.1 CI/CD 简介

DevOps

CI => Continuous Integration,持续集成。即将持续不断更新的代码经构建、测试后也持续不断的集成到项目主干分支。

CD => 包含两层含义:Continuous Delivery,持续交付,和 Continuous Deployment,持续部署。

  • 持续交付:是持续集成的后续步骤,持续频繁地将软件的新版本交付到类生产环境预发,即交付给测试、产品部门进行集成测试、API 测试等验收,确保交付的产物可直接部署

  • 持续部署:是持续交付的后续步骤,将持续交付的产物部署到生产环境

13.2.2 DevOps 简介

image-20240719094507040

百度百科中是这样介绍 DevOps 的:

DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

它是一种重视“软件开发人员(Dev)”和“IT 运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

DevOps 是一种思想,是一种管理模式,是一种执行规范与标准。

13.2.3 CI/CD 与 DevOps 关系

CI/CD 是目标,DevOps 为 CI/CD 目标的实现提供了前提与保障

13.3 系统架构图

最终要搭建出如下图所示架构的系统

image-20240719094642944

13.4 Idea中 Git配置

13.4.1 Git 简介

百度百科中是这样介绍 Git 的:

Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件

13.4.2 Git 的工作流程
image-20240719094811589
13.4.3 Git 的下载与安装

从 Git 的官网下载 Git。其官网为:https://git-scm.com 。根据安装向导“下一步”式安装即可。

image-20240719094848265

image-20240719094912379

13.4.4 Idea 中配置 Git

image-20240719095106138

image-20240719095434039

13.5 GitLab 安装与配置

13.5.1 简介

GitLab 是一个源码托管开源工具,其使用 Git 作为代码管理工具,并在此基础上搭建起来的 Web 服务。GitLab 由乌克兰程序员使用 Ruby 语言开发,后来一部分使用 Go 语言重写。生产中通常使用 GitLab 搭建私有源码托管平台。

13.5.2 GitLab 的安装
  • 主机要求

    这里要使用 docker 方式来安装 GitLab,所以需要一台安装有 docker 及 docker-compose的主机,且该主机内存至少 4G。

  • 拉取镜像

    这里使用由 gitlab 官网发布的社区版镜像 gitlab/gitlab-ce:latest。该镜像最好是先拉取到本地后再使用,因为该镜像比较大。

    docker pull gitlab/gitlab-ce:latest
    

    image-20240719100800331

    此次测试下载不下来,所以使用同事提供的docker包进行测试安装,使用 load 进行安装,load安装的是镜像,import导入的是容器

    docker load -i ./docker-gitlab-ce-13.12.2-ce.0.tar
    

    image-20240719152858135

  • 定义 compose.yml

    由于启动 GitLab 容器时需要设置的内容较多,为了方便,这里使用 docker compose 方式启动。在任意目录 mkdir 一个子目录,例如在/usr/local 下新建一个 glab 目录。在该目录中新建 compose.yml 文件。文件内容如下:

    version: "3"
    services:gitlab:container_name: gitlabimage: gitlab/gitlab-ce:13.12.2-ce.0restart: alwaysports:- 8098:8098- 8443:443- 2222:22/tcpvolumes:- /etc/localtime:/etc/localtime- /data/gitlab/data:/var/opt/gitlab- /data/gitlab/config:/etc/gitlab- /data/gitlab/logs:/var/log/gitlabenvironment:GITLAB_OMNIBUS_CONFIG: |external_url 'http://192.168.138.134:8098'gitlab_rails['gitlab_shell_ssh_port'] = 2222
    
  • 启动 gitLab

    docker-compose up -d
    

    image-20240719152913067

    在等待过程中,可以看到如下的大量日志

    docker-compose logs -f
    

    image-20240719153020600

13.5.3 GitLab 的密码配置
  • 浏览器访问

    在浏览器中直接键入 http://192.168.138.134:8098 即可打开登录页面,首先需要进行密码重置,输入root用户密码即可,然后初始化用户密码,初始化之后便可以使用root用户进行登录操作

    image-20240719154646070

    后期密码如果想修改,也可以按照下图操作步骤进行修改

    image-20240719154857752

13.6 SonarQube 安装与配置

13.6.1 简介

SonarQube 是一个开源的代码扫描与分析平台,用来持续扫描、分析和评测项目源代码的质量与安全。 通过 SonarQube 可以检测项目中代码量、安全隐患、编写规范隐患、重复度、复杂度、代码增量、测试覆盖率等多个维度,并通过 SonarQube web UI 展示出来。

SonarQube 支持 30+种编程语言代码的扫描与分析,并能够方便的与代码 IDE、CI/CD 平台完美集成。SonarQube 的官网地址:

https://www.sonarsource.com/

13.6.2 主机要求

这里要使用docker方式来安装,所以需要一台安装有docker及docker-compose的主机。

13.6.3 安装与配置
  • 下载两个镜像

    由于 SonarQube 需要 Postgres 数据库的支持,所以安装 SonarQube 之前需要先安装Postgres 数据库。所以需要下载 Postgres 与 SonarQube 两个镜像。

    docker pull sonarqube:9.9-community
    docker pull postgres:latest
    

    image-20240719162638410

  • 定义compose文件

    由于需要启动两个容器,所以这里使用 docker-compose 方式。在/usr/local 下 mkdir 一个 sonar 目录,在其中定义 compose.yml 文件

    services:postgres:image: postgrescontainer_name: postgresrestart: alwaysports:- 5432:5432environment:POSTGRES_USER: sonarPOSTGRES_PASSWORD: sonarsonarqube:image: sonarqube:9.9-communitycontainer_name: sonarqbrestart: alwaysdepends_on:- postgresports:- 9000:9000environment:SONAR_JDBC_URL: jdbc:postgresql://192.168.138.134:5432/sonarSONAR_JDBC_USERNAME: sonarSONAR_JDBC_PASSWORD: sonar
    
  • 修改虚拟内存大小

    在/etc/sysctl.conf 文件中指定 vm.max_map_count 虚拟内存大小

    # vm.max_map_count=262144
    vim /etc/sysctl.conf
    # 修改保存后再运行 sysctl –p 命令使 Linux 内核加载文件中的配置。
    sysctl -p
    

    image-20240719162947085

  • 启动 SonarQube

    通过 docker-compose up –d 命令启动容器,并 docker ps 查看是否启动成功

    image-20240719163118648

  • 登录SonarQube

    在浏览器键入 SonarQube 服务器的 IP 与端口号 9000,即可打开登录页面。默认用户名与密码都是 admin。

    image-20240719163259308

    Log in 后即可跳转到更新密码页面。这里更新密码为 101022li

    image-20240719163415287

    image-20240719163510412

  • 安装汉化插件

    在 Maketplace 中键入关键字 Chinese 后即可找到要安装的汉化插件,点击 I understand the risk(我了解风险)后即可看到 Install 按钮,点击安装

    image-20240719163846831

    安装成功后,在页面上部就可看到 Restart Server 的提示,让重启 SonarQube,此过程可能会报错,因为下载文件可能下载不下来,此时需要自己先手动下载插件,然后再将插件复制到sonarqube的插件目录当中,重启即可生效

    img

    查看docker日志信息,发现是插件无法下载

    # 通过日志查看下载文件为 https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-9.9/sonar-l10n-zh-plugin-9.9.jar
    docker-compose logs --tail 100 sonarqb
    

    使用浏览器下载 https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-9.9/sonar-l10n-zh-plugin-9.9.jar,地址栏输入即可

    image-20240719170335559

    上传到服务器当中,然后使用命令复制到sonarqbue指定目录,然后重启服务

    docker cp sonar-l10n-zh-plugin-9.9.jar sonarqb:/opt/sonarqube/extensions/plugins/
    docker restart sonarqb
    

    image-20240719170454868

    再次进入,已经成功安装中文插件

    image-20240719170549677

13.7 harbor安装与配置

13.7.1 Harbor 安装系统要求

Harbor 要安装的主机需要满足硬件与软件上的要求

  • 硬件要求

    硬件资源最小要求推荐要求
    CPU2CPU4CPU
    内存4G8G
    硬盘40G160G
  • 软件要求

    软件资源版本要求作用
    Docker CE 引擎17.06.0 或更高版本Harbor 是以容器形式在运行,需要Docker 引擎
    Docker Compose1.18.0 或更高版本Harbor是10个容器在运行,通过DockerCompose 编排
    OpenSSL最新版生成数字证书,以支持HTTPS
13.7.2 安装Harbor

在官网复制Latest最新版的离线安装包的下载链接地址,在Linux系统中通过wget命令 下载,将其下载到某目录中。

  • 下载安装包

    wget https://github.com/goharbor/harbor/releases/download/v2.6.2/harbor-offline-installer-v2.6.2.tgz
    

    image-20240722083443106

  • 解压安装包

    将下载好的包解压到某目录中。解压后其就是一个独立的目录 harbor

    mkdir -p /opt/apps
    tar -zxvf harbor-offline-installer-v2.6.2.tgz -C /opt/apps/
    

    image-20240722084157589

  • 修改 harbor.yml

    复制一份 harbor 解压包中的 harbor.yml.tmpl,并重命名为 harbor.yml

    image-20240722084527077

  • 运行 prepare

    运行 harbor 解压目录中的 prepare 命令。该命令会先拉取 prepare 镜像,然后再生成很多的其后期要用到的配置文件

  • 运行 install.sh

    运行 harbor 解压目录中的 install.sh 命令,其会自动完成五步的安装过程,并在最终启动很多的容器。这些容器本质上就是通过 docker-compose 进行编排管理的

    sh install.sh
    

    image-20240722090208875

  • 新建仓库

    在浏览器地址栏中输入 http://192.168.138.134:80 即可看到登录页面,在其中输入用户名admin,密码为自定义密码101022,即可登录。登录后点击“新建项目”,新建一个镜像仓库

    image-20240722090818739

    image-20240722090928481

    image-20240722090943617

13.8 目标服务器安装与配置

13.8.1 docker 引擎

由于目标服务器需要从镜像中心 Harbor 中 docker pull 镜像,然后使用 docker run 来运行容器,所以目标服务器中需要安装 Docker 引擎。

13.8.2 docker-compose

由于目标服务器需要通过 docker-compose 运行 compose.yml 文件来启动容器,所以目标服务器中需要安装 docker-compose

13.8.3 接收目录

Jenkins 通过 SSH 将命令发送到目标服务器,以使目标服务器可以从 Harbor 拉取镜像、运行容器等。所以在目标服务器中需要具有一个用户接收 Jenkins 发送数据的目录。本例将该接收目录创建在/usr/local/jenkins 中

13.9 Jenkins 安装与配置

13.9.1 Jenkins 简介
  • 百度百科

    以下是百度百科中关于 Jenkins 的词条:Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。

  • 主机要求

    这里要使用docker方式来安装,所以需要一台安装有docker及docker-compose的主机

13.9.2 安装 JDK

由于 Jenkins 通过调用 Maven 来实现对项目的构建,所以需要在 Jenkins 主机中安装Maven。由于 maven 的运行需要 JDK 的环境,所以需要首安装 JDK。

对于 JDK 的安装非常简单,只需要从官网下载相应版本的 JDK 到 Linux 系统后,直接解压即可。无需配置。这里下载的是 jdk-8u291-linux-x64.tar.gz,将其解压到了/opt/apps 目录下,并重命名为了 jdk

mkdir -p /usr/local/java
mv jdk-8u291-linux-x64.tar.gz /usr/local/java
tar -zxvf jdk-8u291-linux-x64.tar.gz# 设置环境变量
vim /etc/profile
JAVA_HOME=/usr/local/java/jdk1.8.0_291
JRE_HOME=/usr/local/java/jdk1.8.0_291/jre
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export JAVA_HOME JRE_HOME CLASSPATH PATH# 配置生效验证
source /etc/profile
java -version

image-20240722104331400

13.9.3 安装 maven
  • 下载解压 maven

    首先需要从官网下载最新版本的linux maven,这里下载的是apache-maven-3.9.0-bin.tar.gz版本

    image-20240722093140843

    image-20240722093255993

    image-20240722093357685

    将其解压到/opt/apps 目录下,并重命名为 maven

    image-20240722093546087

  • 设置环境变量

    # 设置环境变量
    vim /etc/profile
    MAVEN_HOME=/usr/local/maven
    PATH=$MAVEN_HOME/bin:$PATH
    export MAVEN_HOME PATH# 环境变量生效验证
    source /etc/profile
    mvn -version
    

    image-20240722104852333

  • 配置 maven 镜像仓库

    maven解压后需要修改解压目录中conf/settings.xml文件中的两处配置。这里配置maven的镜像源为 aliyun。

    <mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
    

    image-20240722093851364

  • 配置 maven 编译器版本

    设置maven文件目录,maven 默认的编译器版本为 JDK1.4,需要指定为 JDK1.8。配置了该<profile>后,在文件最后的<activeProfiles>中再激活一下即可

    <localRepository>/usr/local/devenv/repo</localRepository><profile><id>jdk-8</id><activation><activeByDefault>true</activeByDefault><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>8</maven.compiler.compilerVersion></properties>
    </profile><activeProfiles><activeProfile>jdk-8</activeProfile>
    </activeProfiles>
    

    image-20240722094653399

13.9.4 安装启动 Jenkins
  • 下载镜像

    这里要使用 docker 方式来安装 Jenkins,需要先下载 Jenkins 的镜像,后续安装插件提示版本安装失败,升级为latest版本即可正常安装,其余步骤不变

    docker pull jenkins/jenkins:2.387.1-lts
    

    image-20240722095941841

  • 使用 docker run 命令启动 Jenkins

    docker run --name jenkins \
    -p 8080:8080 \
    -p 50000:50000 \
    -v /var/jenkins_home:/var/jenkins_home \
    -d jenkins/jenkins
    

    使用docker ps发现服务没有起来,查看日志,发现目录没有写权限

    docker ps 
    docker logs -f --tail 100 jenkins
    

    image-20240722115807731

    原因是,jenkins 需向数据卷挂载点的文件/var/jenkins_home/copy_reference_file.log 中写入日志时,由于写入操作的用户不是 root 用户,而非 root 用户对数据卷没有写操作权限,所以此时需要修改数据卷操作权限,为非 root 用户添加写操作权限。

    chmod -R 777 /var/jenkins_home/
    

    也可以使用Docker-compose编排,测试环境暂时直接启动

    mkdir -pv /data/jenkins/jenkins_home
    mkdir -pv /data/docker-compose/jenkins
    cat > /data/docker-compose/jenkins/docker-compose.yml << EOF
    version: "3"
    services:jenkins:container_name: jenkinsimage: jenkins/jenkins:2.387.1-ltsrestart: alwaysuser: rootports:- 8080:8080- 50000:50000volumes:- /data/jenkins/jenkins_home:/var/jenkins_home- /etc/localtime:/etc/localtime- /var/run/docker.sock:/var/run/docker.sock- /usr/bin/docker:/usr/bin/docker- /usr/local/maven:/usr/local/apache-maven3- /usr/local/java/jdk1.8.0_291:/usr/local/java/jdk1.8.0_291
    EOF# 启动服务
    docker-compose up -d
  • 重启 jenkins

    重启 jenkins 容器,发现服务已经成功启动

    docker restart jenkins
    

    image-20240722120110245

  • 修改插件下载源

    由于 jenkins 在后期运行时需要下载很多的插件,而这些插件默认都是从国外的 Jenkins官方服务器上下载的,下载速度很慢,且下载失败的比例很高。所以,一般会先将这些插件的下载源更新为国内的服务器。

    该更新文件是数据卷目录中的 hudson.model.UpdateCenter.xml

    # 将该默认的<url>更换为清华大学的下载源地址。
    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.jsoncd /var/jenkins_home/updates
    sed -i 's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json && sed -i 's#http://www.google.com#https://www.baidu.com#g' default.json
    

    image-20240722120345913

  • 启动服务

    # 通过docker logs 查看初始密码 dfa42970b4a548adb7cf07d988b3c14f
    docker logs jenkins
    

    image-20240722120722151

  • 插件下载

    访问jenkins主页 http://192.168.138.134:8080/login?from=%2F,输入日志获取密码

    image-20240722120927712

    image-20240722121539497

    选择默认安装即可

    image-20240722121602807

    image-20240722133358620

    image-20240722133434302

    image-20240722133455582

13.9.5 配置jenkins
  • 安装插件

    点击 Manage Jenkins 中的 Manage Plugins 页面,在 Available plugins 选项卡页面的搜索栏中分别键入 Git Parameter 与 Publish Over SSH,选中它们后,Install without restart。

    image-20240722140901878

    image-20240722141025150

    jenkins常用插件

    插件源地址
    https://updates.jenkins.io/update-center.json
    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json## 基础插件
    //中文插件
    Chinese (Simplified)// pipeline阶段视图
    Pipeline Stage View//LDAP集中用户管理
    LDAP Plugin//工作区清理
    Workspace Cleanup//角色权限管理
    Role-based Authorization
    Authorize Project//凭证管理
    Credentials Binding//配置文件管理
    Config File Provider//右键发送
    Email Extension//通过SSH方式管理节点
    SSH Build Agents
    SSH Agent## 任务相关插件
    //扩展参数插件
    Extended Choice
    Active Choice Parameter
    Dynamic Extended Choice ParameterVersion//流水线插件管理
    Pipeline//git插件
    Git Plugin
    GitLab//Git Parameter插件(构建时可选分支和tag)
    Git Parameter//获取harbor镜像标签
    Image Tag Parameter//Maven插件
    Maven Integration
    Pipeline Maven Integration//SonarQube插件
    SonarQube Scanner//K8S相关插件
    Kubernetes
    Kubernetes Continuous Deploy//部署推送插件
    Deploy WebLogic
    Deploy to container
    # vim conf/tomcat-users.xml
    <role rolename="manager-gui"/>
    <user username="jenkins" password="jenkins" roles="manager-gui"/># vim webapps/manager/META-INF/context.xml
    <!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
    -->//远程部署
    Publish Over SSH
    
  • 移动 JDK Maven

    首先要将 Jenkins 主机中的 JDK 与 Maven 解压目录移动到数据卷/var/Jenkins_home 中

    cp -r maven/ /var/jenkins_home/
    cp -r jdk1.8.0_291/ /var/jenkins_home/
    
  • 配置 JDK Maven

    在 Manage Jenkins 的 Global Tool Configuration 页面中配置 Maven 与 JDK。

    image-20240722141841683

    将自动安装checkbox点掉,填入jdk路径,此路径既自己拷贝jdk路径

    image-20240722142204889

    image-20240722142426404

    这里填写的也是容器中挂载点目录中的路径。最后再应用并保存。

13.10 Jenkins 集成 SonarQube

13.10.1 Jenkins 中安装 SonarScanner
  • SonarScanner 简介

    SonarScanner 是一种代码扫描工具,专门用来扫描和分析项目代码质量。扫描和分析完成之后,会将结果写入到 SonarQube 服务器的数据库中,并在 SonarQube 平台显示这些数据。

  • 下载

    在 SonarQube 官网的帮助文档中可以下载 SonarScanner。这里下载一个 Linux 系统下使用的版本。

    image-20240722143533000

    image-20240722143552611

  • 安装 unzip

    由于下载的 SonarScannner 是 zip 压缩类型的,所以需要在 Linux 系统中安装 unzip 命令,以解压该压缩包。

    yum install -y unzip
    

    image-20240722144154515

  • 解压/移动

    由于后期要在 Jenkins 中集成 SonarScanner,需要 SonarScanner 存在于 Jenkins 服务器中的数据卷目录中。所以将解压后的目录移动到数据卷jenkins_home下并更名为sonar-scanner

    unzip sonar-scanner-cli-4.8.0.2856-linux.zip
    mv sonar-scanner-4.8.0.2856-linux /var/jenkins_home/sonar-scanner
    
  • 修改配置文件

    在 sonar-scanner 目录的 conf 目录下有其配置文件 sonar-scanner.properties。修改该配置文件

    #Configure here general information about the environment, such as SonarQube server connection details for example
    #No information about specific project should appear here#----- Default SonarQube server
    sonar.host.url=http://192.168.138.134:9000#----- Default source code encoding
    sonar.sourceEncoding=UTF-8sonar.sources=./
    sonar.java.binaries=./target

    image-20240722144944169

13.10.2 Jenkins 配置 SonarQube
  • 安装插件

    在 Jenkins 页面的系统管理  插件管理  Available plugins 中搜索 sonarqube scanner,安装该插件。该插件用于连接 SonarScanner

    image-20240722145125174

    安装完毕后,点选“安装完成后重启 Jenkins”,进行重启。

  • 添加 Sonarqube

    打开 Jenkins 的 Manage Jenkins 》Configure System 页面,找到 SonarQube servers,添加 SonarQube 服务器

    image-20240722150233120

13.11 Jenkins 集成目标服务器

这里要配置连接到目标服务器的连接方式。打开 Manage Jenkins 中的 Configure System页面将页面拉到最下面,可以看到 Publish over SSH。这里可以设置非对称加密的身份验证方式,也可设置对称加密的身份验证方式。这里采用对称加密身份验证方式。点击新增按钮。

image-20240722153746962

image-20240722153806729

image-20240722153820300

image-20240722154156144

13.12 自由风格的 CI 操作(中间架构)

13.12.1 中间架构图

image-20240722154338004

13.12.2 创建 web 项目

创建一个web项目,主要内容就以之前的docker-hello项目为主

image-20240722163541297

创建一个 web 项目,就使用最简单的 spring boot 工程,例如工程名为 hellojks。仅需导入 spring web 依赖即可

13.12.3 Idea 提交项目到远程仓库

GitLab 中创建远程仓库, 首先在 GitLab 中创建一个远程仓库,用于管理前面 Idea 中创建的工程

image-20240722155138097

image-20240722155153401

image-20240722155328904

点击Create project后就可进入下个页面,可以看到当前仓库的信息及相关的操作命令。客户端通过这些命令可完成对该仓库的操作

image-20240722155427951

新增系统用户

image-20240722160204989

image-20240722160340632

用户创建成功,如下图所示,点击"Edit",为用户设置密码

image-20240722160436995

image-20240722160923543

初始化本地仓库

将当前的项目目录 docker-hello初始化为本地仓库

image-20240722163722600

image-20240722163814467

提交代码到本地库

在项目上右击,选择 Git =》 Commit Directory

image-20240722164033965

image-20240722164619050

提交到远程库

首先要从远程仓库中获取仓库地址。选择复制 Clone with HTTP 的地址,获取复制地址为 http://192.168.138.134:8098/root/docker-hello.git

image-20240722164701679

image-20240722164811250

image-20240722164902247

image-20240722164933430

Push 后会弹出访问 GitLab 的登录窗口,输入用户名 lixuchun,密码为自定义的 lixuchun123456

image-20240722165044387

推送成功后,在 idea 右下角即可看到成功提示

image-20240722165116144

此时刷新 GitLab 页面,即可看到推送来的项目

image-20240722165319984

注意:如果提交文件的时候发现很多不需要提交的文件都存在在提交目录中,添加.ignore文件到应用根目录中即可

# Created by .ignore support plugin (hsz.mobi)
### Example user template template
### Example user template# IntelliJ project files
.idea
*.iml
out
gen
### Maven template
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
.mvn/wrapper/maven-wrapper.jar
##代码生成器屏蔽
*.vm
*.log

image-20240722170013956

13.12.4 GitLab 拉取代码
  • 新建任务

    image-20240723084601138

    image-20240723084709514

  • Jenkins 集成 GitLab

    在点击确定后即可立即配置 Jenkins 中 GitLab 服务器的信息

    image-20240723084957995

    image-20240723085104228

    在其中填写用户名与密码后“添加”即可返回之前的页面,此时在 Credentials 下拉框中即可找到新添加的用户信息,选择即可。

    image-20240723085244207

  • 立即构建

    任务创建成功后即可看到如下页面。在该页面中点击“立即构建”,Jenkins 即可开始从GitLab 上拉取项目。此时右下角就会发生变化

    image-20240723085446596

    点击右下角的日期时间,选择控制台输出,可看到这个拉取过程的日志。

    image-20240723085833340

    从以上日志的 git rev-parse --resolve-git-dir /var/jenkins_home/workspace/docker_hello_jenkins/.git 命令可以看出,Jenkins将其容器内的 /var/jenkins_home/workspace/my_hellojks 目录作为项目的本地仓库。也就是将数据卷目录。

    进入 jenkins 数据卷可以看到该项目已经存在了。

    image-20240723090121144

13.12.5 将项目打为 jar包

在 Jenkins 能够通过配置,调用本地的 maven 的 mvn 命令,将拉取来的项目打为 Jar 包。

  • Jenkins配置mvn命令

    image-20240723090237939

    点击配置后,打开配置页面。然后点击 Build Steps,跳转到以下位置。

    image-20240723090319565

    image-20240723090345620

    选择调用顶层 Maven 目标,即可使用前面配置的 Maven 来完成打包任务

    image-20240723090512580

    在 Maven 版本下拉框中选择前面配置好的 maven,目标中写入需要 maven 去执行的maven 命令,应用保存后,自动跳转回任务首页

  • 重新构建

    在配置好 maven 的构建命令后,再次执行“立即构建”

    image-20240723091525657

    image-20240723091656194

    构建成功后进入 jenkins 数据卷目录/var/jenkins_home/workspace/docker_hello_jenkins中可以看到新增了 target 目录。打开 target 目录,可以看到打出的 jar 包。

    image-20240723091832107

13.12.6 代码质量检查工具

todo: 暂时未配置

13.12.7 将 jar 包推送到目标服务器
  • 配置 SSH

    Jenkins 通过 SSH 方式连接上目标服务器,并将 jar 包推送到目标服务器。

    image-20240723092012442

    点击配置后,打开配置页面。将页面拉到最下面,找到“增加构建后操作步骤”

    image-20240723092126521

    exec command 修改为其他命令,后续使用镜像启动服务

    image-20240723095523900

    image-20240723095547522

  • 重新构建

    image-20240723095443147

    查看目标服务器的目标目录/var/jenkins_home,可以看到 jar 包已经推送了过来,并且启动了容器了

13.12.8 构建镜像启动容器

通过在 Jenkins 中配置在目标服务器中将要执行的相关命令,使得 Jenkins 将 jar 包推送到目标服务器后,立即自动执行配置的命令,将 jar 包构建为一个镜像,并启动其相应的容器,使项目启动运行

  • 定义 Dockerfile

    若要构建镜像,就需要定义其 Dockerfile。现在 Idea 的工程中新建一个 Directory,例如docker,然后在其中新建一个 file

    FROM openjdk:8u102
    MAINTAINER lxc lxc@git.com.cn
    LABEL name="lxc" auth="lxc" email="lxc@git.com.cn"
    # 将本地的docker-hello包导入到容器的固定目录下,会自动创建目录
    COPY docker-hello.jar /var/jenkins_home/docker/docker-hello.jar
    # 变更工作目录
    WORKDIR /var/jenkins_home/docker
    # 启动服务
    ENTRYPOINT ["java", "-jar", "docker-hello.jar"]
    

    image-20240723110940510

  • 定义 compose.yml

    在 idea 的新建目录中再新建一个 compose.yml,用于构建镜像和启动容器

    version: '3.5'
    services:docker-hello:build: ./image: docker-hellocontainer_name: docker-helloports:- 8088:8088
    

    image-20240723101531163

  • 推送到 GitLab

    image-20240723101611761

  • 再配置构建后操作

    cd /var/jenkins_home/docker
    mv /var/jenkins_home/target/docker-hello-1.0-SNAPSHOT.jar ./docker-hello.jar
    docker-compose down
    docker-compose up -d --build
    docker image prune -f
    

    Jenkins 中在返回的任务首页中,再次执行立即构建。构建成功后,查看目标服务器中的/var/Jenkins_home/docker 目录,发现 docker 目录及其下的两个 docker 文件已经存在了,且 jar 包 也复制了进来,服务也启动了起来

    image-20240723111106009

    在浏览器中访问目标服务器中的应用,已经可以访问了 http://192.168.138.129:8088/some/test

    image-20240723111326411

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

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

相关文章

如何在linux系统上部署nginx

1&#xff09;首先去 nginx.org/download 官网下载你所需要的版本 我这里是下载的 nginx-1-23-3.tar.gz 2&#xff09;然后执行 yum -y install lrzsz 安装文件上传软件 执行 rz 选择你下载nginx的位置进行上传 yum -y install lrzsz 3&#xff09;执行 tar -zxvf nginx-1.23…

数据可视化(爬取豆瓣网站)

目录 1 绪论 1.1 研究背景 1.2 研究目的和意义 1.3 研究内容和方法 2. 需求分析 2.1 系统功能描述 2.2 数据采集与预处理 2.2.1 数据采集 2.2.2 数据清洗 2.2.3 数据处理 2.3 功能需求 2.3.1 登录模块 2.3.2 数据展示模块 3 系统设计 3.1 系统功能结构设计 3.2 …

Pycharm中重命名项目之后切换虚拟环境

Pycharm中重命名项目之后切换虚拟环境 场景 在Pycharm里面Rename Project/Directory之后&#xff0c;通常需要切换虚拟环境。 步骤 # 退出当前虚拟环境 deactivate # 删除旧的虚拟环境 .venv # 新建新的虚拟环境 python -m venv .venv # 切换到新的工程目录 cd E:\Bigdata\…

排序算法——插入排序

一、插入排序概念 直接插入排序&#xff08;Insertion Sort&#xff09;是一种简单的排序算法&#xff0c;它的工作原理类似于人们手动排序卡片的方式。该算法通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插…

二叉树相关的算法题

二叉树相关的算法题 单值二叉树 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时&#xff0c;才返回 true&#xff1b;否则返回 false。 示例 1&#xff1a; 输入&#xff1a;[1,1,1,1,1,null,1] 输出&#xff1a;t…

初阶数据结构5 排序

排序 1. 排序概念及运用1.1 概念1.2运用1.3 常见排序算法 2. 实现常⻅排序算法2.1 插⼊排序2.1.1 直接插⼊排序2.1.2 希尔排序2.1.2.1 希尔排序的时间复杂度计算 2.2 选择排序2.2.1 直接选择排序2.2.2 堆排序 2.3 交换排序2.3.1冒泡排序2.3.2 快速排序2.3.2.1 hoare版本2.3.2.2…

【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

STM32-IIC协议详解

一、IIC简介 IC&#xff08;Inter-Integrated Circuit&#xff09;协议由飞利浦公司于1980年代开发&#xff0c;是一种用于集成电路间短距离通信的串行协议。它设计用于连接低速外围设备&#xff0c;特别适合于需要简单数据交换的场景。IC协议使用两根信号线&#xff1a;SCL&am…

Python数值计算(23)——modified akima插值

1. 数学原理 在前面的Akima插值中&#xff0c;计算斜率使用如下公式&#xff1a; 如果记&#xff1a; 在出现分母分子同时为零的情况时&#xff0c;会出现NaN的计算结果&#xff0c;Akima他自己也意识到这种问题&#xff0c;因此&#xff0c;在原来的算法上做了修订&#xff0…

Python | Leetcode Python题解之第330题按要求补齐数组

题目&#xff1a; 题解&#xff1a; class Solution:def minPatches(self, nums: List[int], n: int) -> int:patches, x 0, 1length, index len(nums), 0while x < n:if index < length and nums[index] < x:x nums[index]index 1else:x << 1patches …

【线性代数】第2章 矩阵及其运算,矩阵的定义,矩阵的加法,矩阵的乘法(同济大学)

目录 1 矩阵 一、矩阵概念的引入 二、矩阵的定义 三、特殊的矩阵 同型矩阵与矩阵相等的概念 四、矩阵与线性变换 例 例 例 2 矩阵的运算 例 一、矩阵的加法 二、数与矩阵相乘 例&#xff08;续&#xff09; 三、矩阵与矩阵相乘 1 矩阵 一、矩阵概…

NVIDIA Triton系列11-模型类别与调度器-1

NVIDIA Triton系列11-模型类别与调度器-1 B站&#xff1a;肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) 博客&#xff1a;肆十二-CSDN博客 问答&#xff1a;(10 封私信 / 72 条消息) 肆十二 - 知乎 (zhihu.com) 在 Triton 推理服务器的使用中&#xff0c;模…

数据科学 - 数据可视化(持续更新)

1. 前言​​​​​​​ 数据可视化能够将复杂的数据集转化为易于理解的图形、图表或图像。这种直观的表现形式使得人们能够更快地理解数据的分布、趋势、异常值以及数据之间的关系&#xff0c;从而更深入地洞察数据背后的信息。 数据可视化在数据分析和决策制定过程中具有不可…

C++的7种设计模式原则

一、设计模式前言 设计模式&#xff08;Design Patterns&#xff09;的“模式”指的是一种在软件设计中经过验证的、解决特定问题的方案。它们不是具体的代码&#xff0c;而是解决常见设计问题的抽象方案或模板。设计模式提供了一种标准的方式来组织代码&#xff0c;以提高代码…

为JetBrains IDE设置自定义TODO筛选器(筛选指定的关键字)和Live Templates

为JetBrains IDE设置自定义TODO筛选器&#xff08;筛选指定的关键字&#xff09;和Live Templates 以下内容以搜索关键字 // TODO Zzz 为例&#xff0c;不区分大小写&#xff0c;可以将模板中的 Zzz 换成其他内容。 设置自定义TODO筛选器 在IDE设置中找到TODO选项&#xff0…

AWS注册是否必须使用美元银行卡

亚马逊网络服务(AWS)作为全球领先的云计算平台,吸引了众多企业和个人用户。然而,不少人在注册AWS账户时会产生疑问:是否必须使用美元银行卡?实际上,这种说法并不准确。虽然AWS的主要结算货币是美元,但用户在注册和使用过程中有多种支付方式可供选择。我们结合九河云的分析来告…

程序员前端开发者的AI绘画副业之路:在裁员危机中寻找新机遇

正文&#xff1a; 在这个充满变数的时代&#xff0c;作为一名前端开发者&#xff0c;我经历了行业的起伏&#xff0c;见证了裁员危机和中年失业危机的残酷。在这样的背景下&#xff0c;我开始了利用AI绘画作为副业的探索&#xff0c;不仅为了寻求经济上的稳定&#xff0c;更是为…

DLMS/COSEM中的信息安全:安全密钥(下)

2.5组件B终端实体证书类型要由DLMS/COSEM服务器支持 每个DLMS/COSEM服务器应使用X.509 v3格式&#xff0c;并包含以下任一项&#xff1a; ——具有P-256或P-384 ECDSA功能的签名密钥&#xff1b;或 ——具有P-256或P-384 ECDSA功能的密钥协商密钥。 每张证书均应使用ECDSA进行签…

lvs(linux virtual server)实例

一.lvs概述 1.1什么是lvs LVS&#xff08;Linux Virtual Server&#xff09;是一个基于Linux操作系统的虚拟服务器技术&#xff0c;用于实现负载均衡和高可用性。LVS通过将客户端的请求分发到多台后端服务器上&#xff0c;从而提高整体服务的处理能力和可靠性。LVS主要有两个组…

蓝桥杯 双周赛 第16场 小白赛 题目复盘 (2024年8月10日)

3. 织女的考验 下面的代码看似很正确&#xff0c;但忽略了一个细节&#xff0c;下面判断是否有字母数量不同时&#xff0c;用abs(cnt[i]) 1判断&#xff0c;这里忽略了abs(cnt[i]) 等于其他值的情况(YES和NO都存在) #include <iostream> #include <cstring> usi…