【自动化】使用Jenkins实现自动化部署

使用Jenkins实现实现自动化软件开发过程中的构建、部署任务

相关文章

使用Jenkins实现自动化部署


一、jenkins 是什么

Jenkins 是一个流行的开源持续集成(CI)和持续交付(CD)工具,用于自动化软件开发过程中的构建、测试和部署任务。它是一个基于 Java 的跨平台工具,可以在各种操作系统上运行,包括 Windows、Linux 和 macOS。

二、主要功能

持续集成

Jenkins 可以自动化构建和测试代码的过程,并在代码提交后持续地进行集成,以确保代码的质量和稳定性。

持续交付

通过与其他工具和服务集成,Jenkins 可以自动化软件的部署和交付过程,从而加快软件的发布速度和频率。

插件生态系统

Jenkins 拥有丰富的插件生态系统,提供了各种功能和扩展,可以满足不同团队和项目的需求。

易于配置和扩展

Jenkins 提供了直观的用户界面和灵活的配置选项,使得用户可以轻松地配置和管理各种构建和部署任务,并通过插件来扩展其功能。

可视化监控和报告

Jenkins 提供了丰富的构建监控和报告功能,包括构建历史、测试报告、代码覆盖率等,帮助用户了解项目的状态和质量。

三、安装 jenkins

准备环境

确保你的系统上已经安装了 Java 运行时环境(JRE)或者 Java 开发工具包(JDK)。Jenkins 需要 Java 运行时环境来运行。

  • 下载jdk安装包

    1
    # wget https://mirrors.huaweicloud.com/openjdk/11.0.2/openjdk-11.0.2_linux-x64_bin.tar.gz
  • 解压并重命名

    1
    2
    # tar xf openjdk-11.0.2_linux-x64_bin.tar.gz
    # mv jdk-11.0.2/ /usr/local/jdk11
  • 配置环境变量

    1
    # export PATH=/usr/local/jdk11/bin:$PATH
  • 使配置文件生效

    1
    # source /etc/profile
  • 验证结果

    1
    # java -version

    显示java版本号表示安装成功

添加 Jenkins 软件源

在你的系统中添加 Jenkins 的软件源,以便能够使用包管理器安装 Jenkins。你可以在 Jenkins 的官方网站上找到相应的软件源配置方式。

  • 添加软件源

    1
    # wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.426.1-1.1.noarch.rpm

安装 Jenkins

使用你系统的包管理器(例如 yum、apt-get、dnf 等)来安装 Jenkins。具体命令可能会根据你所使用的操作系统和包管理器有所不同,通常是类似于以下的命令:

  • 安装 jenkins

    1
    # yum -y localinstall jenkins-2.426.1-1.1.noarch.rpm
  • 安装fontconfig

    否则可能会有相关报错

    1
    # yum -y install fontconfig
  • 修改jenkins配置文件,添加jdk环境变量

    1
    # vim /usr/lib/systemd/system/jenkins.service

    加入以下代码

    1
    # Environment="JAVA_HOME=/usr/local/jdk11"

  • 使配置生效

    systemctl daemon-reload 命令用于重新加载 Systemd 的配置文件,使得 Systemd 重新加载所有配置文件并生效。

    1
    # systemctl daemon-reload

启动 Jenkins 服务

  • 安装完成后,使用以下命令来启动 Jenkins 服务

    1
    # systemctl start jenkins

设置 Jenkins

  • 打开浏览器,访问 Jenkins 的管理界面,默认地址是 你的服务器IP地址:8080。

    密码文件位置:/var/lib/jenkins/secrets/initialAdminPassword

  • 按照提示完成 Jenkins 的初始化设置,安装建议的插件等。

  • 按照提示完成 Jenkins 的初始化设置,包括创建管理员账号。

访问 Jenkins

完成设置后,你可以通过浏览器访问 Jenkins 的管理界面,并开始配置和使用 Jenkins 进行持续集成和持续交付工作。

四、准备项目环境

以下为构建github中的项目举例

准备token

  • 进入github、点击头像、点击settings、点击Developer Settings

  • 点击Personal access tokens、点击tokens、点击Generate new token

  • 填写名字、有效期、勾选 repo、admin:repo_hook

  • 保存、复制token内容

github配置webhooks

  • 进入github、点击settings、点击webhooks、输入jenkins所在服务器地址和端口号+github-webhook

安装node

  • 进入jenkins、点击系统管理、点击插件管理

  • 点击可用插件、搜索nodejs、勾选、安装

  • 点击系统管理、点击全局工具配置

  • 找到NodeJS安装,新增一个版本,也可以同时新增一些必要的npm包例如yarn、保存

配置github凭据

  • 点击系统管理、点击系统配置

  • 找到github、勾选管理hook、点击添加凭据

  • 选择Secret text类型,填写Secret值(也就是github中生成的token)、添加添加

  • 选择刚添加的凭据

    这里也可以修改webpack webhooks的值,也就是前面配置的webhooks地址

配置ssh(私有仓库需要)

  • 生成RSA类型的SSH密钥

    1
    # ssh-keygen -t rsa -C "cc_byland@163.com"
  • 进入github、点击头像、点击settings、点击SSH and GPG keys、点击New SSH key

  • 填写title、选择key type为Authentication Key、填写key(填入公钥-id_rsa.pub内容)

  • 进入jenkins、点击系统管理、点击凭据管理

  • 点击任意一个全局

  • 新增凭据

  • 类型选择SSH Username with private key、填写Private Key(填入私钥-id_rsa内容)、点击保存凭据

五、新建项目

新建任务

填写任务基本信息

填写任务名称、选择构建一个自由风格的软件项目、点击确定

General

  • 填写项目描述与github地址

源代码管理

  • 填写git仓库url与目标分支

  • 新增一个证书(有就当我没说)

  • 输入用户名、密码、点击添加

  • 选择刚添加的证书

  • 如果是私有项目,则填写SSH地址,并选择ssh凭据

  • 如果你遇到了No ECDSA host key is known for github.com and you have requested strict checking. Host key verification failed,就接着往下看,否则跳过直接看构建触发器配置

    是因为known_hosts文件的关系,known_hosts 文件是SSH客户端用来存储已知主机密钥的文件。当您第一次连接到一个远程主机时,SSH客户端会获取该主机的公钥,并将其存储在 known_hosts 文件中。然后,当您再次连接到相同的远程主机时,SSH客户端会检查 known_hosts 文件,以确保远程主机的公钥没有发生变化。

    • 使用 ssh-keyscan 命令来获取GitHub的主机密钥,并将其附加到 known_hosts 文件中

      1
      ssh-keyscan -t ecdsa github.com >> ~/.ssh/known_hosts
    • 同时还需要执行cp命令将服务器上known_hosts复制到jenkins服务账号的~/.ssh目录下;因为你的服务器root用户可以正常clone github代码,但是jenkins执行的时候用户是jenkins

      1
      cp ~/.ssh/known_hosts /var/lib/jenkins/.ssh/

      如果没有意外的话,上面那个报错已经意外的消失了

构建触发器

  • 选择GitHub hook trigger for GITScm polling

    大概意思当Jenkins收到github推送时,就会触发构建

构建环境

  • 选择Use secret text(s) or file(s),新增一个密文

  • 选择前面配置的密文

  • 选择Provide Node & npm bin/ folder to PATH,把node、npm环境变量丢给容器

Build Steps

  • 增加构建步骤、执行shell

  • 填写项目构建的shell脚本,如:

    1
    2
    3
    4
    5
    6
    7
    node -v
    npm -v
    yarn
    yarn build
    pwd
    ls
    cp -r /var/lib/jenkins/workspace/blog/public/* /app/blog/public

保存

六、手动执行一次构建

回到首页,发现任务列表多了一条刚新增的任务,点击任务名称进入

立即构建

查看控制台

可以看到执行了我们提供的shell命令

结尾处显示了构建结果

如果你遇到这个

则是因为jenkins用户权限不足,可以考虑给命令添加sudo前缀

添加完,可能还会遇到这个错误

1
2
3
4
5
6
7
8
9
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1 Respect the privacy of others.
#2 Think before you type.
#3 With great power comes great responsibility.

sudo: no tty present and no askpass program specified
Build step 'Execute shell' marked build as failure

这个错误通常出现在尝试在非交互式环境下使用 sudo 命令时,sudo 无法与用户进行交互以获取密码。它需要一个交互式终端(tty)来提示用户输入密码,但在非交互式的环境下,它无法提示用户输入密码。

添加 NOPASSWD 选项:如果您有权限编辑 sudoers 文件,您可以尝试为相应的用户或命令添加 NOPASSWD 选项,以允许在不提示密码的情况下使用 sudo。这需要谨慎操作,确保您只给予必要的权限。例如:

  • 编辑sudoers文件

    1
    sudo visudo
  • 添加如下内容

    1
    jenkins ALL=(ALL) NOPASSWD: ALL

    这将允许 jenkins 用户在不需要输入密码的情况下使用 sudo。

  • 重新构建就ok了

七、自动化构建演示

  • 注意左上角窗口,当提交文件时,会自动创建一个构建任务
  • 注意右上角窗口,当构建任务完成时,页面内容发生了更新
  • 注意右下角窗口,提交了一个文件


【自动化】使用Jenkins实现自动化部署
https://www.cccccl.com/20240310/工程化/自动化/使用Jenkins实现自动化部署/
作者
Jeffrey
发布于
2024年3月10日
许可协议