Linux云计算 |【第二阶段】AUTOMATION-DAY2

主要内容:

部署GitLab、配置管理GitLab、CI/CD概述、Jenkins概述、部署Jenkins(初始化、拷贝插件)

一、GitLab概述

GitLab 是一个基于 Web 的 Git 仓库管理工具,它提供了一个集成的开发环境和代码管理平台。GitLab 不仅支持 Git 仓库的管理,还提供了项目管理、持续集成和持续交付(CI/CD)、代码审查、问题跟踪等一系列功能,旨在帮助团队更高效地协作开发软件。

1、GitLab 的主要功能

  1. 代码仓库管理:GitLab 提供了与 GitHub 类似的代码仓库管理功能,支持创建、克隆、推送和拉取代码仓库。
  2. 项目管理:GitLab 提供了看板、里程碑、任务和子任务等功能,帮助团队进行项目规划和任务管理。
  3. 持续集成和持续交付(CI/CD):GitLab CI/CD 是一个内置的自动化工具,可以自动构建、测试和部署代码。
  4. 代码审查:GitLab 支持通过合并请求(Merge Requests)进行代码审查,团队成员可以评论、讨论和批准代码变更。
  5. 问题跟踪:GitLab 提供了问题跟踪系统,可以创建、分配和跟踪问题,帮助团队更好地管理项目进度。

2、GitLab 和 GitHub 的区别

都是流行的代码托管和协作平台,但在功能、架构和使用体验上有一些区别:

1. 功能和集成

  • GitLab

    • GitLab 提供了一个更全面的开发平台,集成了代码仓库管理、项目管理、CI/CD、代码审查、问题跟踪等一系列功能。
    • GitLab CI/CD 是内置的,可以直接在 GitLab 平台上配置和运行自动化构建、测试和部署流程。
    • GitLab 提供了更多的自定义选项和插件支持,适合需要高度定制化的团队。
  • GitHub

    • GitHub 主要专注于代码托管和协作,提供了基本的代码仓库管理、问题跟踪和拉取请求(Pull Requests)功能。
    • GitHub Actions 是 GitHub 的 CI/CD 工具,但它是作为一个独立的服务提供的,需要额外配置和集成。
    • GitHub 的用户界面更为简洁,适合初学者和中小型团队。

2. 私有仓库

  • GitLab

    • GitLab 提供了免费的私有仓库,用户可以创建不限数量的私有项目,并且可以邀请任意数量的协作者。
  • GitHub

    • GitHub 在 2019 年之前,私有仓库是收费的,之后改为免费,但私有仓库的协作者数量有限制(通常是 3 个)。

3. 社区和支持

  • GitLab

    • GitLab 有一个活跃的社区,但相对于 GitHub,其社区规模较小。
    • GitLab 提供了企业版和付费支持选项,适合需要专业支持的大型企业。
  • GitHub

    • GitHub 拥有全球最大的开发者社区,有大量的开源项目和活跃的社区讨论。
    • GitHub 也提供企业版和付费支持,但其社区支持更为强大。

4. 自托管选项

  • GitLab

    • GitLab 提供了自托管选项,用户可以在自己的服务器上安装和运行 GitLab,这对于需要更多控制和安全性的企业非常有吸引力。
  • GitHub

    • GitHub 主要是一个云服务,虽然也有 GitHub Enterprise Server 提供自托管选项,但相对较少使用。

5. 用户体验和界面

  • GitLab

    • GitLab 的用户界面相对复杂,提供了更多的功能和选项,适合需要高度定制化的团队。
  • GitHub

    • GitHub 的用户界面更为简洁和直观,适合初学者和中小型团队。

案例1:部署GitLab

整体思路:准备环境(容器环境)、安装GitLab

环境要求:

  • 1)准备两台RHEL8虚拟机,主机名分别为 develop 和 gitlab ;
  • 2)develop(客户端):IP地址为:192.168.4.10
  • 3)gitlab(服务器):IP地址为:192.168.4.20
  • 4)给 develop 和 git 两台主机配置可用的YUM源;

备注:跨网段走路由,相同网段不需要配置网关就可以互联互通!

注意:由于GitLab容器镜像运行占用大量内存,所以需要将主机内存空间提至少3G;

步骤1:环境准备(Git主机,192.168.4.20)

1)设置防火墙信任所有,设置SELinux放行所有(所有主机都要操作)

[root@gitlab ~]# firewall-cmd --set-default-zone=trusted
[root@gitlab ~]# setenforce 0
[root@gitlab ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config

2)修改sshd默认端口

补充:因为Git是通过SSH协议形式访问,后面需要启动GitLab容器,该容器需要占用22端口,而主机的sshd服务也占用22端口(端口冲突),所以需要提前将GitLab主机的sshd默认端口修改为2022;

[root@gitlab ~]# vim /etc/ssh/sshd_config     //修改SSH配置文件
Port 2022    //将默认端口22修改为2022
或者sed方式:
[root@gitlab ~]# sed -i '/#Port/s/#Port 22/Port 2022/' /etc/ssh/sshd_config
[root@gitlab ~]# systemctl restart sshd      //重启服务
[root@localhost ~]# ssh -p 2022 192.168.2.20    // 真机测试

3)准备容器环境(参考:/linux-soft/2/gitlab_zh.tar容器镜像)

[root@localhost 2]# scp -P 2022 gitlab_zh.tar root@192.168.4.20:/root
gitlab_zh.tar                           100% 1648MB  84.2MB/s   00:19  
补充:scp远程拷贝基于SSH协议访问,由于端口已修改,则需要使用-P指定端口
[root@gitlab ~]# ls
anaconda-ks.cfg  gitlab_zh.tar[root@gitlab ~]# dnf -y install podman     //安装podman软件包
[root@gitlab ~]# podman load < ./gitlab_zh.tar    //导入gitlab容器镜像
[root@gitlab ~]# podman images    //查看镜像
REPOSITORY            TAG      IMAGE ID       CREATED       SIZE
localhost/gitlab_zh   latest   1f71f185271a   3 years ago   1.73 GB

4)创建数据目录

补充:容器无法持久保存数据,需要将真机目录和容器目录绑定,实现数据永久保存

[root@gitlab ~]# mkdir -p /srv/gitlab/{config,logs,data}  //配置文件、日志、数据
[root@gitlab ~]# ls /srv/gitlab/
config  data  logs

步骤2:启动GitLab容器

1)启动容器(GitLab已被封装成为容器镜像,运行容器即可运行GitLab)

[root@gitlab ~]# touch /etc/resolv.conf    //检查是否有resolv.conf,没有该文件启动容器时则报错
[root@gitlab ~]# podman run -d -h gitlab --name gitlab -p 443:443 -p 80:80 -p 22:22 --restart always -v /srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data:/var/opt/gitlab gitlab_zh
78bb2e2fb6481be2b4b7e2ef3ffe1c0e09a08b1625fe7b7f94125c8f1af10aa6
[root@gitlab ~]# podman ps     //查看当前运行的容器
CONTAINER ID  IMAGE                       COMMAND          CREATED        STATUS            PORTS               NAMES
78bb2e2fb648  localhost/gitlab_zh:latest  /assets/wrapper  7 minutes ago  Up 7 minutes ago  0.0.0.0:22->22/tcp  gitlab

选项解释:

  • [-d]   将容器放入后台启动。
  • [-h]   设置容器的主机名为gitlab。
  • [--name]   设置容器名称为gitlab。
  • [-p]   进行端口映射,将git主机的443、80、22端口和git上面运行的容器端口绑定;
  • [-v]   将git主机上面的目录和容器里面的目录绑定,例如:git主机的/srv/gitlab/config目录对应容器里面的/etc/gitlab/目录。
  • [--restart always]   设置当服务挂掉自行重启
  • gitlab_zh是镜像名称。(不用【<】导入镜像,也可用[-i]选项,指定导入容器)

常见报错:启动Podman时,未有/etc/resolv.conf文件会导致报错

[root@gitlab ~]# podman run -d -h gitlab --name gitlab -p 443:443 -p 80:80 -p 22:22 --restart always -v /srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data:/var/opt/gitlab gitlab_zh
Error: error creating resolv.conf for container bc035a10d7a42be9739ad2afe6811f6d98162eea57dc4d057af38fd2ce124cad: lstat /etc/resolv.conf: no such file or directory

2)配置systemd,实现容器开机自启动

生成service文件,-n是容器的名称,给gitlab容器生成service文件

[root@gitlab ~]# podman generate systemd -n gitlab --files

设置开机自启动

[root@gitlab ~]# systemctl enable container-gitlab.service

3)初始化登录密码(真机使用浏览器访问GitLab页面)

- 测试浏览器访问:http://192.168.4.20 

- GitLab默认用户名为:root,第一次访问需要设置密码(密码设置8位数,否则500报错)

正常登录后,如图所示:

报错:500,服务器内部错误(建议删除容器重新创建并检查配置是否错误)

报错:502,网关启动失败(可能服务未完全启动,待启动成功)

参考:GitLab安装、使用教程(Docker版)

https://www.imooc.com/article/23168


案例2;配置GitLab

整体思路:创建GitLab用户和组、创建GitLab项目、客户端管理GitLab项目、上传代码

步骤1:创建用户和组

1)创建用户,点击GitLab页面导航栏的小扳手图标【管理区域】,进行用户创建

创建用户并填写相关账号信息,第一步先创建,再首页点击【编辑】设置用户的密码

2)创建组,点击GitLab页面导航栏的小扳手图标【管理区域】,进行组创建

设置组名称(组名称为devops)以及可见等级(等级为公开)

3)将用户加入到组,并设置用户权限为主程序员(将用户加入devops组)

步骤2:创建GitLab项目

1)创建Project项目

2)设置项目路径(组名称devops)、项目仓库名称(仓库myproject)、可见等级(公开)

步骤3:管理GitLab项目(Develop主机,192.168.4.10操作)

1)客户端使用密码管理GitLab项目

[root@develop ~]# git config --global user.name "tom"
[root@develop ~]# git config --global user.email "tom@qq.com"
[root@develop ~]# cat .gitconfig    //用户标记信息
[user]
email = tom@qq.com
name = tom[root@develop ~]# git clone http://192.168.4.20/devops/myproject.git
# 解释:克隆devops组下的仓库myproject(.git类似后缀,可忽略)
[root@develop ~]# cd myproject/
[root@develop myproject]# ls -a
.  ..  .git[root@develop myproject]# touch README.md
[root@develop myproject]# git add README.md
[root@develop myproject]# git commit -m "Add README"
[root@develop myproject]# git push -u origin master
Username for 'http://192.168.4.20': tom      //输入账户
Password for 'http://tom@192.168.4.20':     //输入密码

补充:私有仓库克隆下载仓库和上传数据都需要密码,公有仓库克隆下载仓库不需要密码,但上传数据时需要输入用户名密码;

2)客户端生成SSH密钥

[root@develop myproject]# ssh-keygen     //生成ssh密钥文件
[root@develop myproject]# cat ~/.ssh/id_rsa.pub     //查看密钥文件
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC+tlX+Uofq2xqw2XJeVoU2tkMADfI1/UMxg/ME50pgajuKKCqOdfr2+dDyEiVNJJNnknZdA9CdwfxPFk6xWYQHWjvzSDYR5Bk6Dmv/snliOulrWrCYMkpjZjPFZf36gBw3Ryc8MTdLIB+1NHzIy41Tr1n+LBsMUfZQE8zsnptxXHffKwmPbiH9LtCzS5pzMhXxfi6HmnrKx+g3Tvc+WPoB2FMUjR/Z5VwI8aULa0xlgJDR+LF9p5PS4lArrZeasGg9qS9FFT+CWte42oRgLCz7jc+Y+v469AKU9hebndxvbPUPKvNv1icI8AIIt/Y1UKE+R6FjhxMcatwDzSYZ7s7gu6Gu2XvhQ9ZqRGViZspQhKccP0TnsuYwa1s3V7mWIqB6tjA9AsGbsXM7fGJsZDb2fhcL1kl5bjF04//i+wClzoXbQNhtihzrIYp7gV0h5heiSVY9ww9Q3HukW//XiJJj/KwNPJUDEXiveNwvycoClMJz5VjGMBSJyUf/uirMO0twD8= root@develop

3)使用Tom用户登录GitLab页面,上传密钥

第一次登录页面需要重置一次密码,密码可以与旧密码相同

4)将192.168.4.10创建的密钥文件内容上传到GitLab

点击右上角账户图标,点【设置】,点击【SSH密钥】,将develop主机生成的密钥文件/root/.ssh/id_rsa.pub内容复制到GitLab上面;(不能重复上传)

5)使用密钥管理GitLab项目

首先查看项目基于SSH连接方式的链接

[root@develop myproject]# git remote -v   //查看对应远程仓库服务器
origin http://192.168.4.20/devops/myproject.git (fetch)
origin http://192.168.4.20/devops/myproject.git (push)
[root@develop myproject]# git remote remove origin    //删除远程仓库服务器关联
[root@develop myproject]# git remote -v   //再次查看,未有对应关联[root@develop myproject]# git remote add origin git@192.168.4.20:devops/Myproject.git   //通过git方式添加关联远程服务器(注意服务器IP)
[root@develop myproject]# git remote -v
origin git@gitlab:devops/Myproject.git (fetch)
origin git@gitlab:devops/Myproject.git (push)[root@develop myproject]# echo 'hello word' >> README.md
[root@develop myproject]# git add .
[root@develop myproject]# git commit -m "modify readme"
[root@develop myproject]# git push -u origin master   //直接推送,无需输入密码

补充:在未有Clone远程仓库到本地时,则需要对本地存放仓库的目录进行git init初始化一个空仓库.git(工作区)才能进行git remote add操作;当已Clone并进行remove删除对应远程服务器关联时,只是删除关联并未删除本地仓库.git(工作区),所以可以进行git remote add操作;

注意:通过Clone方式或remote add方式,必须输入完整服务器IP

注意:创建的普通用户权限为【主程序员】,否则Push操作会报错权限不足;


常见报错:clone的远程仓库服务器,无法已http://gitlab/进行域名识别

[root@develop ~]# git clone http://gitlab/devops/myproject.git
Cloning into 'myproject'...
fatal: unable to access 'http://gitlab/devops/myproject.git/': Could not resolve host: gitlab

常见报错:push远程仓库服务器,无法已gib://gitlab/进行域名识别

[root@develop myproject]# git push -u origin master
ssh: Could not resolve hostname gitlab: Name or service not known
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

常见报错:推送时,用户权限不足报错;

解决办法:修改普通用户权限为【主程序员】

remote: GitLab: You are not allowed to push code to protected branches on this project.
To 192.168.4.20:devops/myproject.git! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@192.168.4.20:devops/myproject.git'

如图所示:


6)上传静态页面代码(参考素材lnmp_soft.tar.gz中www_template.zip)

[root@develop ~]# dnf -y install unzip   //安装zip解压包工具
[root@develop ~]# cd lnmp_soft/
[root@develop lnmp_soft]# unzip www_template.zip
[root@develop lnmp_soft]# cp -r www_template/* ~/myproject/   //拷贝到仓库目录
[root@develop lnmp_soft]# cd ~/myproject/
[root@develop myproject]# ls
'#U8bf4#U660e.txt'   blog.html      images       single.html404.html            contact.html   index.html   work.htmlabout.html          css            js[root@develop myproject]# git add .
[root@develop myproject]# git commit -m "web site"
[root@develop myproject]# git push -u origin master
[root@develop myproject]# git tag v1      //设置版本标签
[root@develop myproject]# git push -u origin v1    //将版本标签V1推到服务器
Total 0 (delta 0), reused 0 (delta 0)
To 192.168.4.20:devops/myproject.git* [new tag]         v1 -> v1
[root@develop myproject]# git reflog       //查看版本日志可查看到tag标签

如图所示:

补充:通过 git tag --help 帮助查看

命令:git tag -d    //删除本地标签

测试:通过浏览器访问http://192.168.4.20/devops/myproject 网页,可查看【项目存储库】,从本地仓库.git推送上的文件,如图所示:

二、CI / CD概念

CI/CD 是持续集成(Continuous Integration)和持续交付(Continuous Delivery)/持续部署(Continuous Deployment)的缩写。它是一种软件开发实践,旨在通过自动化流程来提高软件开发和交付的效率和质量。

1)持续集成(CI)

持续集成 是指开发人员频繁地将代码变更合并到共享的主分支中,并通过自动化构建和测试来验证这些变更。其主要目标是尽早发现和解决集成问题,减少后期集成的风险。

  1. 代码提交:开发人员将代码变更提交到版本控制系统(如 Git)。
  2. 自动化构建:CI 服务器检测到代码变更后,自动触发构建过程,将代码编译成可执行文件或库。
  3. 自动化测试:构建完成后,CI 服务器运行一系列自动化测试(单元测试、集成测试等),验证代码的正确性和稳定性。
  4. 反馈:测试结果和构建状态会立即反馈给开发团队,以便及时修复问题。

2)持续交付(CD)

持续交付 是在持续集成的基础上,进一步自动化软件的发布过程,使其可以随时交付到生产环境。持续交付的目标是确保软件始终处于可发布状态,减少发布风险。

  1. 自动化部署:在通过 CI 验证的代码基础上,自动化地将软件部署到预生产环境或测试环境。
  2. 手动验证:在预生产环境中进行手动验证和测试,确保软件满足发布标准。
  3. 发布决策:根据验证结果和业务需求,决定是否将软件发布到生产环境。

3)持续部署(CD)

持续部署 是持续交付的进一步延伸,它自动化了整个发布过程,包括将软件自动部署到生产环境。持续部署的目标是实现零停机发布,提高交付速度和频率。

  1. 自动化部署:在通过 CI 验证的代码基础上,自动化地将软件部署到生产环境。
  2. 自动验证:在生产环境中进行自动化的健康检查和监控,确保软件正常运行。
  3. 自动回滚:如果发现问题,自动化系统会自动回滚到之前的稳定版本。

CI/CD 的核心思想是通过自动化和频繁的集成、测试和部署,减少人为错误,提高软件质量和交付速度。它要求开发团队采用敏捷开发方法,频繁地进行代码变更和集成,并通过自动化工具和流程来支持这一过程。CI/CD 是现代软件开发和 DevOps 实践的重要组成部分。

流程图:CI / CD就是一个流程(通常形象地表述为管道)用于实现应用开发中的高度持续自动化和持续监控。

CI/CD相关工具集:

部署一个CI系统需要的最低要求:

  • ① 一个可获取的源代码的仓库(GitLab)
  • ② 一个包含构建脚本的项目(Jenkins)

三、Jenkins概述

Jenkins 是一个开源的自动化服务器,广泛用于持续集成(CI)和持续交付(CD)。它由 Kohsuke Kawaguchi 创建,最初名为 Hudson,后来由于与 Oracle 的商标争议而更名为 Jenkins。Jenkins 通过插件系统提供了丰富的扩展功能,使其能够支持各种构建、测试和部署任务。

主要特点:

  1. 开源和社区支持:Jenkins 是一个开源项目,拥有庞大的用户社区和贡献者群体,提供了丰富的文档和支持资源。

  2. 插件生态系统:Jenkins 通过插件系统提供了广泛的扩展能力,支持与各种工具和技术的集成,如版本控制系统(如 Git、SVN)、构建工具(如 Maven、Gradle)、测试框架(如 JUnit、Selenium)等。

  3. 分布式构建:Jenkins 支持分布式构建,可以在多台机器上并行执行构建任务,提高构建效率。

  4. 易于配置和管理:Jenkins 提供了直观的 Web 界面,用于配置和管理构建作业、查看构建历史和结果、设置权限和安全性等。

  5. 跨平台支持:Jenkins 可以在多种操作系统上运行,包括 Windows、Linux 和 macOS。

工作原理:

  1. 主从架构:Jenkins 采用主从架构,主节点(Master)负责管理和调度构建任务,从节点(Slave)负责实际执行构建任务。主节点和从节点可以通过网络进行通信。

  2. 构建作业:Jenkins 中的构建作业(Job)定义了具体的构建流程,包括代码检出、构建、测试和部署等步骤。构建作业可以通过 Jenkins 的 Web 界面进行配置。

  3. 触发构建:构建作业可以通过多种方式触发,如代码提交、定时任务、外部系统调用等。

  4. 构建执行:触发后,Jenkins 会根据构建作业的配置,自动执行代码检出、构建、测试和部署等步骤。构建过程中产生的日志和结果会记录在 Jenkins 中,供用户查看和分析。

  5. 通知和报告:Jenkins 可以配置通知机制,如邮件、即时消息等,及时通知相关人员构建结果。此外,Jenkins 还支持生成各种报告,如测试覆盖率报告、静态代码分析报告等。

应用场景:

  1. 持续集成:Jenkins 可以自动化构建和测试流程,确保开发人员频繁地集成代码变更,并及时发现和解决问题。

  2. 持续交付:Jenkins 可以自动化软件的发布过程,确保软件始终处于可发布状态,减少发布风险。

  3. 持续部署:Jenkins 可以自动化将软件部署到生产环境,实现零停机发布,提高交付速度和频率。

  4. 自动化测试:Jenkins 可以集成各种测试框架和工具,自动化执行单元测试、集成测试、性能测试等,提高测试效率和质量。

  5. 监控和报告:Jenkins 可以生成各种监控和报告,帮助团队了解软件质量和构建状态,及时发现和解决问题。

参考:Jenkins的主要作用_knjesc-CSDN博客


1)安装Jenkins所需其它软件

  • ① git 版本控制软件(Jenkins需要连接GitLab下载列表)
  • ② postfix 邮件服务器软件(可以发送邮件)
  • ③ mailx 邮件客户端软件(可以接收邮件)
  • ④ Java JDK(Jenkins基于Java开发,需要JDK环境;)

2)浏览器访问:http://服务器IP:8080 //由JAVA开发,默认端口为8080,与Tomcat服务相同

  1. Jenkins默认会把GitLab仓库代码下载目录:/var/lib/jenkins/workspace/
  2. 存放密码文件:/var/lib/Jenkins/secrets//initialAdminPassword
  3. 存放插件目录:/var/lib/jenkins/plugins/
  4. 配置文件:/etc/sysconfig/jenkins
  5. 日志文件:/var/log/jenkins/jenkins.log

案例:部署Jenkins

整体思路:准备实验环境、部署Jenkins、初始化Jenkins、管理Jenkins插件、调整系统配置;

环境准备:

  1. 5台RHEL8虚拟机,主机名分别为 develop、gitlab、jenkins、web1 和 web2。
  2. develop 主机的IP地址为:192.168.4.10;
  3. gitlab 主机的IP地址为:192.168.4.20;
  4. jenkins 主机的IP地址为:192.168.4.30;
  5. web1 和 web2 主机的IP地址分别为:192.168.4.100、192.168.4.200;
  6. 所有主机都需要配置可用的系统YUM源,设置防火墙信任所有,SELinux放行所有。

备注:跨网段走路由,相同网段不需要配置网关就可以互联互通!

步骤1:环境准备

1)设置防火墙和SELinux(仅以一台主机为例,其他主机都需要操作)

[root@jenkins ~]# firewall-cmd --set-default-zone=trusted
[root@jenkins ~]# setenforce 0
[root@jenkins ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config

2)安装依赖软件:git、postfix、java JDK(Jenkins主机,192.168.4.30操作)

[root@jenkins ~]# dnf -y install java-11-openjdk    //openjdk(Java JDK工具)
[root@jenkins ~]# dnf -y install git    //Git(版本控制软件)
[root@jenkins ~]# dnf -y install postfix    //postfix(邮件服务器软件)
[root@jenkins ~]# dnf -y install mailx    //mailx(邮件客户端软件)

步骤2:部署、初始化Jenkins

1)安装、启动Jenkins(参考素材lnmp_soft.tar.gz中的jenkins软件包、插件包)

[root@localhost 2]# scp jenkins* 192.168.4.30:/root/
jenkins-2.263.1-1.1.noarch.rpm           100%   64MB  64.2MB/s   00:00    
jenkins_plugins.tar.gz                   100%   18MB 127.1MB/s   00:00  [root@jenkins ~]# ls
anaconda-ks.cfg  jenkins-2.263.1-1.1.noarch.rpm  jenkins_plugins.tar.gz
[root@jenkins ~]# dnf -y install ./jenkins-2.263.1-1.1.noarch.rpm    //安装Jenkins
[root@jenkins ~]# systemctl start jenkins     //启动Jenkins服务
[root@jenkins ~]# netstat -nlptu | grep :8080     //因JAVA开发软件,默认端口8080
tcp6       0      0 :::8080                 :::*                    LISTEN      5299/java       
[root@jenkins ~]# systemctl enable jenkins --now   //设置jenkins服务为开机自启动服务,并立刻启动该服务

补充:jenkins-2.263.1-1.1.noarch.rpm为软件包,jenkins_plugins.tar.gz为插件包

2)初始化Jenkins

使用带GUI的终端上的浏览器访问 Jenkins:http://192.168.4.30

第一次访问会提示初始密码的位置:在/var/lib/Jenkins/secrets/initialAdminPassword日志文件中;

[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
24a45370161247c3ad60c22cdf6daf3e

初始化时选择不安装插件,直接跳过操作;

使用默认的admin用户登录,完成初始化操作;

开始使用Jenkins。

步骤3:管理Jenkins插件、系统配置

1)设置密码,因初始密码太长不方便记忆,建议重置管理员admin的密码

使用新密码重新登录(密码123456)

2)插件管理,打开【Manage Jenkins】,找到【Manage Plugins】

3)将真机素材jenkins_plugins.tar.gz插件包拷贝到Jenkins主机

补充:拷贝插件文件到Jenkins插件目录(插件包含:中文插件、Git插件等)

Jenkins插件目录为插件目录:/var/lib/jenkins/plugins/

[root@jenkins ~]# tar -xf jenkins_plugins.tar.gz
[root@jenkins ~]# ls
anaconda-ks.cfg  jenkins-2.263.1-1.1.noarch.rpm  jenkins_plugins  jenkins_plugins.tar.gz[root@jenkins ~]# id jenkins   //安装软件后默认生成jenkins用户
uid=994(jenkins) gid=991(jenkins) groups=991(jenkins)
[root@jenkins ~]# cp -rp jenkins_plugins/* /var/lib/jenkins/plugins/   //权限方式拷贝,使得Jenkins用户有对文件目录的操作权限
[root@jenkins ~]# ls -ll /var/lib/jenkins/plugins/
total 18120
drwxr-xr-x. 4 jenkins jenkins      56 Apr 21 14:33 command-launcher
-rw-r--r--. 1 jenkins jenkins   38820 Dec  9 22:34 command-launcher.jpi
...
[root@jenkins ~]# systemctl restart jenkins.service  //重启Jenkins服务

4)重新登录Jenkins网页控制台,再次查看插件列表【已安装】、查看中英文翻译

5)调整系统设置,配置并测试邮箱

[root@jenkins ~]# systemctl start postfix.service     //开启邮箱服务

通过发送测试邮件测试配置,测试结果为 Email was successfully sent

6)mail测试收邮件

[root@jenkins ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N  1 nobody@nowhere        Wed Apr 21 14:59  18/643   "Test email #2"
&

补充:Jenkins忘记密码等操作,需要还原,尝试以下方式:

yum -y reinstall --force ./jenkins-2.263.1-1.1.noarch.rpm 

扩展:Git 家族

Git 是一个分布式版本控制系统,由 Linus Torvalds 在 2005 年创建。随着时间的推移,Git 生态系统发展出了许多相关的工具和平台,形成了 Git 家族。以下是一些主要的 Git 家族成员:

1. Git 核心

  • Git:Git 本身是一个命令行工具,用于版本控制和代码管理。它是整个 Git 生态系统的核心。

2. 代码托管平台

  • GitHub:GitHub 是一个基于 Web 的 Git 仓库托管服务,提供了代码托管、协作和社区功能。
  • GitLab:GitLab 是一个开源的 Git 仓库管理平台,提供了代码托管、CI/CD、项目管理和问题跟踪等功能。
  • Bitbucket:Bitbucket 是 Atlassian 提供的 Git 和 Mercurial 仓库托管服务,集成了 Jira 和 Confluence 等工具。

3. 图形用户界面(GUI)工具

  • GitKraken:GitKraken 是一个跨平台的 Git GUI 客户端,提供了直观的界面和丰富的功能。
  • Sourcetree:Sourcetree 是 Atlassian 提供的一个免费的 Git 和 Mercurial 客户端,适用于 Windows 和 macOS。
  • GitHub Desktop:GitHub Desktop 是 GitHub 提供的官方 Git GUI 客户端,简化了 Git 操作。

4. 持续集成和持续交付(CI/CD)工具

  • GitLab CI/CD:GitLab CI/CD 是 GitLab 内置的自动化工具,可以配置和运行自动化构建、测试和部署流程。
  • GitHub Actions:GitHub Actions 是 GitHub 提供的 CI/CD 工具,可以在 GitHub 仓库中配置和运行自动化工作流。
  • Jenkins:Jenkins 是一个开源的自动化服务器,支持 Git 和其他版本控制系统,用于构建、测试和部署软件。

5. 命令行工具和插件

  • tig:tig 是一个基于文本的 Git 仓库浏览器和 Git 命令行接口。
  • hub:hub 是一个命令行工具,扩展了 Git 的功能,使其更容易与 GitHub 交互。
  • git-flow:git-flow 是一个 Git 扩展集,帮助管理功能分支和发布流程。

6. 其他相关工具

  • Git LFS(Large File Storage):Git LFS 是一个 Git 扩展,用于管理大文件的版本控制。
  • GitBook:GitBook 是一个现代的文档平台,使用 Git 和 Markdown 来编写和发布文档。
  • Gogs 和 Gitea:Gogs 和 Gitea 是轻量级的自托管 Git 服务,提供了类似 GitHub 的功能。

这些工具和平台共同构成了 Git 家族,为开发者提供了丰富的选择和功能,以满足不同的版本控制和协作需求。

小结:

本篇章节为【第二阶段】AUTOMATION-DAY2 的学习笔记,这篇笔记可以初步了解到 部署GitLab、配置管理GitLab、CI/CD概述、Jenkins概述、部署Jenkins(初始化、拷贝插件)。除此之外推荐参考相关学习网址:

  • Jenkins
  • Jenkins 系列教程-史上最简单Jenkins教程,教你一天学会使用Jenkins利器_jenkins菜鸟教程-CSDN博客
  • Jenkins中文文档_w3cschool

Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解

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

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

相关文章

便携式自动气象站:科技赋能气象观测

便携式自动气象站&#xff0c;顾名思义&#xff0c;就是一款集成了多种气象传感器&#xff0c;能够自动进行气象观测和数据记录的设备。它体积小巧、重量轻&#xff0c;便于携带和快速部署&#xff0c;可以在各种环境下进行气象数据的实时监测。同时&#xff0c;通过内置的无线…

keil单步调试需要点击多次

问题描述&#xff1a;在进行调试的时候&#xff0c;点击单步调试&#xff0c;总是需要点击好几次才可以运行到下一条语句。 我点击单步调试的时候&#xff0c;会在红色框内进行单步运行&#xff0c;也就是在汇编代码内单步执行。 解决办法&#xff1a; 关闭汇编窗口 就是这个小…

案例研究|柯尼卡美能达软件开发(大连)有限公司基于DataEase构筑内部数据可视化体系

柯尼卡美能达软件开发&#xff08;大连&#xff09;有限公司于2007年5月25日注册成立。公司以“洞悉在工作的人们真实情况&#xff0c;探寻他们的愿望&#xff0c;持续提供使人们更加幸福的服务”为使命&#xff0c;致力于系统品质测试服务、软件开发服务、IT安全服务、高级BPO…

SpringBoot缓存注解使用

背景 除了 RedisTemplate 外&#xff0c; 自Spring3.1开始&#xff0c;Spring自带了对缓存的支持。我们可以直接使用Spring缓存技术将某些数据放入本机的缓存中&#xff1b;Spring缓存技术也可以搭配其他缓存中间件(如Redis等)进行使用&#xff0c;将某些数据写入到缓存中间件…

Golang | Leetcode Golang题解之第264题丑数II

题目&#xff1a; 题解&#xff1a; func nthUglyNumber(n int) int {dp : make([]int, n1)dp[1] 1p2, p3, p5 : 1, 1, 1for i : 2; i < n; i {x2, x3, x5 : dp[p2]*2, dp[p3]*3, dp[p5]*5dp[i] min(min(x2, x3), x5)if dp[i] x2 {p2}if dp[i] x3 {p3}if dp[i] x5 {p5…

Xcode学习笔记

Xcode学习笔记 前言一、在Mac上安装Xcode并做点简单设置1.查看一下Xcode的版本 二、使用Xcode新建一个Playground三、swift基础-变量1.swift是什么2.变量是什么3.建立变量4.改变变量5.小帖士 四、swift基础-变量命名规范1.使用小驼峰命名法2.使用有意义且描述性的名称3.避免使用…

《云原生安全攻防》-- 容器攻击案例:镜像投毒与Fork炸弹

在本节课程中&#xff0c;我们将介绍两个比较有意思的容器攻击案例&#xff0c;镜像投毒与Fork炸弹。 在这个课程中&#xff0c;我们将学习以下内容&#xff1a; 镜像投毒&#xff1a;构建恶意镜像&#xff0c;诱导用户拉取镜像创建容器。 Fork炸弹&#xff1a;Fork炸弹的攻击…

Mysql基础速过

一、数据库相关概念 1.1 相关概念 名称全称简称数据库存储数据的仓库、数据是有组织的进行存储DataBase(DB)数据库管理系统操作和管理数据库的大型软件DataBase Management System(DBMS)SQL操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库统一标准Structu…

【iOS】Tagged Pointer

目录 前言什么是Tagged Pointer&#xff1f;引入Tagged Pointer技术之前引入Tagged Pointer之后总结 Tagged Pointer原理&#xff08;TagData分析&#xff09;关闭数据混淆MacOS分析NSNumberNSString iOS分析 判断Tagged PointerTagged Pointer应用Tagged Pointer 注意点 Tagge…

科研绘图系列:R语言微生物堆积图(stacked barplot)

介绍 堆叠条形图是一种数据可视化图表,它通过将每个条形分割成多个部分来展示不同类别的数值。每个条形代表一个总体数据,而条形内的每个部分则代表该总体数据中不同子类别的数值。这种图表特别适合展示整体与部分的关系,以及各部分在整体中的比例。 特点: 多部分条形:每…

Python爬虫:代理ip电商数据实战

引言&#xff1a;数据访问管理引发的烦恼 作为一名Python博主&#xff0c;爬虫技能对于获取和分析数据至关重要&#xff0c;经常爬一下&#xff0c;有益身心健康嘛。爬虫技术对很多人来说&#xff0c;不仅仅是一种工具&#xff0c;更像是一种艺术&#xff0c;帮助我们从互联网…

工程视角:数据结构驱动的应用开发--字典(dictionary),列表(list)与实体

这里写目录标题 业务业务场景流程分析 实现数据访问层&#xff08;DAL&#xff09;业务逻辑层&#xff08;BLL&#xff09;用户界面层&#xff08;UI&#xff09;工具类 设计思路为什么抽出工具类关于U层使用字典的好处工程视角 业务 业务场景 在一个金融应用系统中&#xff0c…

【益智问题】十三球称重

十三球称重 问题描述解决方案 问题描述 有13个外表一模一样的小球产品&#xff0c;其中有一个是次品&#xff0c;其质量与其他12个略有差别&#xff0c;但不知道是重还是轻。这13个球上都有标号&#xff0c;现在给你-架天平&#xff0c;只能使用三次&#xff0c;把这个次品小球…

Elasticsearch:Golang ECS 日志记录 - zap

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松地将日志格式化为与 ECS 兼容的 JSON。 编码器以 JSON 格式记录日志&#xff0c;并在可能的情况下依赖默认的 zapcore/json_encoder。它还处理 ECS 错误格式的错误字段记录。 默认情况下&#xff0c;会添…

58、主从复制数据库+读写分离

mysql的主从复制和读写分离&#xff08;面试问原理&#xff09; mysql的主从复制和读写分离&#xff1a; 主从复制 面试必问 主从复制的原理。 读写分离&#xff0c;MHA 一、主从复制 1.1、主从复制的模式&#xff1a; 1、mysql的默认模式&#xff1a; 异步模式&#xf…

Three.js 官方文档学习笔记

Address&#xff1a;Three.js中文网 (webgl3d.cn) Author&#xff1a;方越 50041588 Date&#xff1a;2024-07-19 第一个3D案例—创建3D场景 创建3D场景对象Scene&#xff1a; const scene new THREE.Scene(); 创建一个长方体几何对象Geometry&#xff1a; const geomet…

FTP、NFS、SAMBA系统服务

⼀、rsync托管xinetd 1 、为什么要进⾏服务托管 独⽴服务&#xff1a;独⽴启动脚本 ssh ftp nfs dns ... 依赖服务 : 没有独⽴的启动脚本 rsync telnet 依赖 xinetd 服务&#xff08;独⽴服务&#xff09; 2 、如何将 rsync 托管给 xinetd 服务去管理&#xff1f; 第⼀步&am…

VMware中Ubuntu磁盘空间的清理

最近发现Ubuntu占用空间过大&#xff0c;在网上找了一些方法&#xff0c;在这里总结一下。 1.删除快照 把不需要的快照删除&#xff0c;但要注意删除快照可能会影响到后续的快照链。每个快照依赖于前面的快照。如果删除一个中间快照&#xff0c;虚拟机可能无法找到完整的差异…

leetcode 513.找树左下角的值

1.题目要求: 代码块: 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。2.此题思路: 1.创建队列&#xff0c;出队函数和入队函数: //创建队列 typedef struct queuet{struct TreeNode* value;struct queue* n…

IB user verbs介绍

本文来自对内核源代码文档/Documentation/infiniband/user_verbs.rst的翻译和理解。 在Infiniband设备帮助下&#xff0c;跨计算机的两个进程可以相互访问对方的虚地址空间。在Linux操作系统上&#xff0c;支持进程能直接访问本地Infiniband设备的资源&#xff0c;从而实现跨机…