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放行所有(所有主机都要操作)

bash 复制代码
[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;

bash 复制代码
[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容器镜像)

bash 复制代码
[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)创建数据目录

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

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

步骤2:启动GitLab容器

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

bash 复制代码
[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文件会导致报错

bash 复制代码
[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文件

bash 复制代码
[root@gitlab ~]# podman generate systemd -n gitlab --files

设置开机自启动

bash 复制代码
[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项目

bash 复制代码
[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密钥

bash 复制代码
[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连接方式的链接

bash 复制代码
[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/进行域名识别

bash 复制代码
[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/进行域名识别

bash 复制代码
[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.

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

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

bash 复制代码
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)

bash 复制代码
[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.html
 404.html            contact.html   index.html   work.html
 about.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(仅以一台主机为例,其他主机都需要操作)

bash 复制代码
[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操作)

bash 复制代码
[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软件包、插件包)

bash 复制代码
[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日志文件中;

bash 复制代码
[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/

bash 复制代码
[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)调整系统设置,配置并测试邮箱

bash 复制代码
[root@jenkins ~]# systemctl start postfix.service     //开启邮箱服务

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

6)mail测试收邮件

bash 复制代码
[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忘记密码等操作,需要还原,尝试以下方式:

bash 复制代码
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 来编写和发布文档。
  • GogsGitea:Gogs 和 Gitea 是轻量级的自托管 Git 服务,提供了类似 GitHub 的功能。

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

小结:

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


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

相关推荐
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
深海鱼在掘金1 天前
Git 完全指南 —— 第1章:Git 概览与版本控制演进
git
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 天前
Linux 11 动态监控指令top
linux
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信