Ubuntu 系统安装Jenkins 并安装node git jdk 插件

283 阅读14分钟

在 Ubuntu 系统上安装 Jenkins 和 OpenJDK,并将它们安装到 /usr/local 目录下,需要一些自定义的步骤,因为默认情况下,apt 会将软件安装到系统默认的路径。下面是一个详细的步骤说明:

1. 设置 Jenkins 仓库

你已经在命令中提供了添加 Jenkins 仓库的步骤。首先,我们需要确保仓库配置正确,并导入 Jenkins 的 GPG 密钥。

bash
复制代码
# 下载 Jenkins GPG 密钥并保存到指定位置
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key

# 配置 Jenkins 仓库,并将签名密钥指定为 /usr/share/keyrings/jenkins-keyring.asc
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" \
    | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null

# 更新 apt 包索引
sudo apt-get update

这将设置 Jenkins 仓库,并确保 apt 使用正确的 GPG 密钥来验证安装的软件包。

2. 自定义安装目录(/usr/local

2.1 安装 OpenJDK 17 到 /usr/local

Ubuntu 默认将 OpenJDK 安装到 /usr/lib/jvm/ 目录。如果你想将 OpenJDK 安装到 /usr/local 目录下,可以选择从源码编译并安装它。

步骤:

  1. 下载 OpenJDK 17 的 tar.gz 包

    访问 OpenJDK 17 下载页面 获取适用于 Ubuntu 的版本,或使用以下命令直接下载并解压:

    bash
    复制代码
    wget https://download.java.net/openjdk/jdk17/ri/openjdk-17+35_linux-x64_bin.tar.gz
    tar -zxvf openjdk-17+35_linux-x64_bin.tar.gz
    
  2. 移动到 /usr/local 目录

    bash
    复制代码
    sudo mv jdk-17 /usr/local/
    
  3. 配置环境变量

    打开 ~/.bashrc 文件,并添加如下内容:

    bash
    复制代码
    export JAVA_HOME=/usr/local/jdk-17
    export PATH=$JAVA_HOME/bin:$PATH
    

    保存文件后,运行以下命令使配置生效:

    bash
    复制代码
    source ~/.bashrc
    
  4. 验证 Java 安装

    bash
    复制代码
    java -version
    

    输出应该显示 Java 17 版本信息,确保它安装在 /usr/local/jdk-17

2.2 安装 Jenkins 到 /usr/local

默认情况下,使用 apt-get 安装 Jenkins 时会将其安装到系统的标准路径。如果你希望将 Jenkins 安装到 /usr/local 目录下,可以选择从其 WAR 文件直接运行 Jenkins,而不是通过 apt-get 安装。

  1. 下载 Jenkins WAR 文件

    你可以从 Jenkins 官方下载其最新的 .war 文件:

    bash
    复制代码
    wget https://get.jenkins.io/war/2.361.2/jenkins.war -P /usr/local/jenkins
    
  2. 启动 Jenkins

    使用以下命令启动 Jenkins:

    bash
    复制代码
    java -jar /usr/local/jenkins/jenkins.war
    

    默认情况下,Jenkins 会在 8080 端口运行,你可以通过浏览器访问 http://localhost:8080

  3. 设置 Jenkins 为后台服务(可选)

    如果你希望 Jenkins 在后台运行并作为服务启动,你可以使用 systemd 配置 Jenkins 服务。创建一个新的 systemd 服务单元文件:

    bash
    复制代码
    sudo nano /etc/systemd/system/jenkins.service
    

    然后,将以下内容粘贴到文件中:

    ini
    复制代码
    [Unit]
    Description=Jenkins Automation Server
    After=network.target
    
    [Service]
    User=ubuntu
    ExecStart=/usr/bin/java -jar /usr/local/jenkins/jenkins.war
    Restart=always
    Environment=JAVA_HOME=/usr/local/jdk-17
    
    [Install]
    WantedBy=multi-user.target
    

    保存并关闭文件后,运行以下命令启用并启动 Jenkins 服务:

    bash
    复制代码
    sudo systemctl daemon-reload
    sudo systemctl enable jenkins
    sudo systemctl start jenkins
    
  4. 检查 Jenkins 状态

    使用以下命令检查 Jenkins 服务是否正在运行:

    bash
    复制代码
    sudo systemctl status jenkins
    

3. 使用 apt-get 安装依赖包(fontconfigopenjdk-17-jre

你可以继续使用 apt-get 安装依赖项,如 fontconfigopenjdk-17-jre

bash
复制代码
# 安装 fontconfig 和 openjdk-17-jre
sudo apt-get install fontconfig openjdk-17-jre

这将安装字体配置和 JRE,如果你不想安装 OpenJDK 17 的 JRE 而是自己管理 JDK,请跳过 openjdk-17-jre 部分。

总结

  1. Jenkins 安装:你可以选择通过 apt-get 安装 Jenkins,但默认会将其安装到系统的标准路径。为了将 Jenkins 安装到 /usr/local,最好的方法是直接下载 .war 文件并运行它。
  2. OpenJDK 17 安装:通过从源码安装,或者下载 .tar.gz 包并将其手动安装到 /usr/local/jdk-17
  3. 服务管理:你可以创建一个 systemd 服务来在后台运行 Jenkins,使其开机自动启动。

如果/etc/systemd/system 下面没有jenkins.service

如果在 /etc/systemd/system/ 目录下没有找到 jenkins.service 文件,这可能意味着 Jenkins 服务的 systemd 配置文件没有正确安装或者丢失。通常,当你通过包管理工具(如 apt-getyum)安装 Jenkins 时,jenkins.service 文件会自动创建并放置在 /lib/systemd/system/ 目录中。

不过,如果你确实没有找到 jenkins.service,你可以手动创建一个 systemd 服务文件来使 Jenkins 能够作为服务运行。

解决步骤:手动创建 Jenkins 服务文件

1. 创建 Jenkins 服务文件

首先,创建一个新的 jenkins.service 文件,并将其放置在 /etc/systemd/system/ 目录下:

bash
复制代码
sudo nano /etc/systemd/system/jenkins.service
2. 添加服务配置

在文件中粘贴以下内容:

ini
复制代码
[Unit]
Description=Jenkins Continuous Integration Server
After=network.target

[Service]
User=jenkins
ExecStart=/usr/bin/java -jar /usr/local/jenkins/jenkins.war
Restart=always
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

[Install]
WantedBy=multi-user.target
  • User=jenkins:确保 Jenkins 服务以 jenkins 用户运行。如果你没有创建 jenkins 用户,可以使用其他用户(比如 ubunturoot),但是建议为安全起见使用专门的 Jenkins 用户。
  • ExecStart=/usr/bin/java -jar /usr/local/jenkins/jenkins.war:这是启动 Jenkins 的命令,假设你已经将 jenkins.war 文件放在 /usr/local/jenkins/ 目录下。如果 Jenkins 文件放在其他位置,修改这个路径。
  • JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64:确保 JAVA_HOME 指向正确的 Java 安装路径。你可以使用 update-alternatives --config java 命令来确认 Java 安装路径。
3. 保存并退出编辑器
  • Ctrl + O 保存文件。
  • Ctrl + X 退出编辑器。
4. 重新加载 systemd 配置

创建并保存 jenkins.service 文件后,重新加载 systemd 配置以使新服务生效:

bash
复制代码
sudo systemctl daemon-reload
5. 启用并启动 Jenkins 服务

启用 Jenkins 服务使其开机自动启动:

bash
复制代码
sudo systemctl enable jenkins

然后,启动 Jenkins 服务:

bash
复制代码
sudo systemctl start jenkins
6. 检查 Jenkins 服务状态

检查 Jenkins 服务是否成功启动:

bash
复制代码
sudo systemctl status jenkins

如果 Jenkins 启动成功,服务状态应显示为 active (running)

意外报错

错误1

# sudo systemctl status jenkins × jenkins.service - Jenkins Automation Server Loaded: loaded (/etc/systemd/system/jenkins.service; disabled; vendor preset: enabled) Active: failed (Result: exit-code) since Thu 2024-11-14 22:29:45 CST; 55s ago Process: 10364 ExecStart=/usr/bin/java -jar /usr/local/jenkins/jenkins.war (code=exited, status=217/USER) Main PID: 10364 (code=exited, status=217/USER) CPU: 3ms Nov 14 22:29:45 iZm5ee31oy701ba9fxnltxZ systemd[1]: jenkins.service: Scheduled restart job, restart counter is at 5. Nov 14 22:29:45 iZm5ee31oy701ba9fxnltxZ systemd[1]: Stopped Jenkins Automation Server. Nov 14 22:29:45 iZm5ee31oy701ba9fxnltxZ systemd[1]: jenkins.service: Start request repeated too quickly. Nov 14 22:29:45 iZm5ee31oy701ba9fxnltxZ systemd[1]: jenkins.service: Failed with result 'exit-code'. Nov 14 22:29:45 iZm5ee31oy701ba9fxnltxZ systemd[1]: Failed to start Jenkins Automation Server. root@iZm5ee31oy701ba9fxnltxZ:#

提供的输出来看,Jenkins 服务启动失败,错误代码是 217/USER,这个错误通常是因为指定的 User (在你的 jenkins.service 文件中配置的用户)没有足够的权限,或者该用户不存在。

错误解析

status=217/USER 表示 systemd 启动服务时发现指定的用户不存在或者没有权限执行服务。常见原因包括:

  1. 指定的用户不存在:在服务文件中指定的用户(例如 jenkins)在系统上可能没有创建。
  2. 用户权限问题:即使用户存在,可能没有足够的权限来启动 Jenkins 或访问所需的文件。

解决方案

1. 确保 jenkins 用户存在

首先,检查 jenkins 用户是否存在。如果没有,你可以创建一个新的 jenkins 用户:

bash
复制代码
sudo useradd -r -m jenkins

这里的 -r 选项表示创建一个系统用户,-m 表示创建用户的家目录。

2. 检查 jenkins 用户的权限

确保 jenkins 用户对 Jenkins 安装目录(例如 /usr/local/jenkins)和相关配置文件有访问权限:

bash
复制代码
sudo chown -R jenkins:jenkins /usr/local/jenkins
sudo chown -R jenkins:jenkins /var/log/jenkins
sudo chown -R jenkins:jenkins /var/lib/jenkins

确保 Jenkins 的文件夹和相关日志、工作目录的权限是正确的,允许 jenkins 用户访问。

3. 更新 jenkins.service 文件中的 UserGroup

如果你使用的不是 jenkins 用户(例如你使用的是 ubunturoot),你需要确保在 jenkins.service 文件中正确指定了启动服务的用户。

编辑 /etc/systemd/system/jenkins.service 文件:

bash
复制代码
sudo nano /etc/systemd/system/jenkins.service

找到 [Service] 部分,确保 UserGroup 设置为合适的用户(例如 jenkins,如果你已经创建了这个用户):

ini
复制代码
[Service]
User=jenkins
Group=jenkins
ExecStart=/usr/bin/java -jar /usr/local/jenkins/jenkins.war
Restart=always
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

如果你使用其他用户(例如 ubuntu),则修改为该用户:

ini
复制代码
User=ubuntu
Group=ubuntu
4. 重新加载 systemd 配置

在修改了 jenkins.service 文件之后,重新加载 systemd 配置并重启 Jenkins 服务:

bash
复制代码
sudo systemctl daemon-reload
sudo systemctl restart jenkins
5. 查看服务状态

再次检查 Jenkins 服务的状态,以确保它成功启动:

bash
复制代码
sudo systemctl status jenkins

总结

  • 错误 217/USER 通常是由于指定的用户不存在或权限不足。
  • 确保指定的用户(如 jenkins)已经存在并且具有访问所需文件和目录的权限。
  • 更新 jenkins.service 文件中的 UserGroup 设置,确保服务以正确的用户运行。
  • 重新加载 systemd 配置,并检查 Jenkins 服务状态。

通过这些步骤,应该能够解决 Jenkins 启动失败的问题。

错误二

# sudo systemctl status jenkins × jenkins.service - Jenkins Automation Server Loaded: loaded (/etc/systemd/system/jenkins.service; disabled; vendor preset: enabled) Active: failed (Result: exit-code) since Thu 2024-11-14 22:33:03 CST; 7s ago Process: 12493 ExecStart=/usr/bin/java -jar /usr/local/jenkins/jenkins.war (code=exited, status=203/EXEC) Main PID: 12493 (code=exited, status=203/EXEC) CPU: 2ms Nov 14 22:33:03 iZm5ee31oy701ba9fxnltxZ systemd[1]: jenkins.service: Scheduled restart job, restart counter is at 5. Nov 14 22:33:03 iZm5ee31oy701ba9fxnltxZ systemd[1]: Stopped Jenkins Automation Server. Nov 14 22:33:03 iZm5ee31oy701ba9fxnltxZ systemd[1]: jenkins.service: Start request repeated too quickly. Nov 14 22:33:03 iZm5ee31oy701ba9fxnltxZ systemd[1]: jenkins.service: Failed with result 'exit-code'. Nov 14 22:33:03 iZm5ee31oy701ba9fxnltxZ systemd[1]: Failed to start Jenkins Automation Server. root@iZm5ee31oy701ba9fxnltxZ:#

错误 status=203/EXEC 通常表示 systemd 无法执行指定的命令。这种错误通常是由以下几种原因引起的:

  1. 指定的 ExecStart 路径错误:指定的 java -jar /usr/local/jenkins/jenkins.war 路径可能有误。
  2. 权限问题:即使路径是正确的,可能会有权限问题,导致 systemd 无法执行该命令。
  3. Java 路径错误:如果 java 命令未正确安装或未正确设置,systemd 将无法找到它。

解决步骤

1. 检查 ExecStart 路径是否正确

确保 jenkins.war 文件的路径是正确的。运行以下命令来确认 jenkins.war 是否存在于 /usr/local/jenkins/ 目录下:

bash
复制代码
ls -l /usr/local/jenkins/jenkins.war

如果文件不存在,你需要将 Jenkins 的 .war 文件放在正确的位置,或者在 jenkins.service 中更新路径。

  • 如果你没有 jenkins.war 文件,下载最新的 Jenkins WAR 文件:

    bash
    复制代码
    wget -O /usr/local/jenkins/jenkins.war https://get.jenkins.io/war/latest/jenkins.war
    
2. 检查 java 是否安装

确保你的系统上已安装 Java,并且 java 命令可以正常运行。执行以下命令来确认 java 是否可用:

bash
复制代码
java -version

如果没有安装 Java,或者 java 命令找不到,你需要安装它:

bash
复制代码
sudo apt-get install openjdk-17-jdk

然后,检查 java 命令是否正确可用:

bash
复制代码
which java

这将返回 java 可执行文件的路径,确保它指向正确的位置(例如 /usr/bin/java)。

3. 确保 jenkins 用户可以执行该命令

确认 jenkins 用户有执行 java -jar 命令的权限,特别是对 /usr/local/jenkins/jenkins.war 文件的权限。可以运行以下命令确保权限正确:

bash
复制代码
sudo chown jenkins:jenkins /usr/local/jenkins/jenkins.war
sudo chmod +x /usr/local/jenkins/jenkins.war
4. 更新 jenkins.service 文件

确认你的 jenkins.service 文件中 ExecStart 的路径是正确的。编辑 /etc/systemd/system/jenkins.service 文件,确保 ExecStart 行正确指定了 Java 和 Jenkins 的路径。

例如:

ini
复制代码
[Service]
User=jenkins
Group=jenkins
ExecStart=/usr/bin/java -jar /usr/local/jenkins/jenkins.war
Restart=always
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

确保 ExecStart 的路径指向正确的 javajenkins.war 文件。

5. 重新加载 systemd 配置并启动 Jenkins

完成以上步骤后,重新加载 systemd 配置并尝试启动 Jenkins 服务:

bash
复制代码
sudo systemctl daemon-reload
sudo systemctl restart jenkins

然后检查 Jenkins 服务的状态:

bash
复制代码
sudo systemctl status jenkins

总结

  • 确认 jenkins.war 文件路径正确并存在。
  • 确保 Java 已正确安装,并且 java 命令可以正常执行。
  • 确保 jenkins 用户有足够的权限来执行 Java 和访问 jenkins.war 文件。
  • 更新 jenkins.service 文件,确保 ExecStart 的路径正确。
  • 重新加载 systemd 配置并启动 Jenkins。

node和git安装

要在 Ubuntu 上安装 Node.js 和 Git 到 /usr/local/ 目录下,你需要手动安装这些工具并指定安装目录。以下是逐步的操作指南,帮助你将 Node.js 和 Git 安装到 /usr/local/ 目录。

安装 Node.js 到 /usr/local/

  1. 下载 Node.js 安装包

Node.js 提供了 Linux 系统的预编译二进制文件,你可以从 Node.js 官方网站 下载对应的版本,或者直接通过 wget 获取。

打开终端,运行以下命令下载 Node.js(选择最新稳定版本)。

bash
复制代码
cd /usr/local
sudo wget https://nodejs.org/dist/v18.18.0/node-v18.18.0-linux-x64.tar.xz

你可以根据需要下载其他版本。上面的命令下载的是 v18.18.0 版本,你可以在 Node.js Downloads 页面选择合适的版本。

  1. 解压文件

下载完成后,解压文件并将其放入 /usr/local/ 目录下。

bash
复制代码
cd /usr/local
sudo tar -xf node-v18.18.0-linux-x64.tar.xz

3. 创建软链接

为了方便使用,创建一个符号链接到系统的可执行文件目录 /usr/local/bin 中,这样你可以在任何地方使用 nodenpm 命令。

bash
复制代码
sudo ln -s /usr/local/node-v18.18.0-linux-x64/bin/node /usr/local/bin/node
sudo ln -s /usr/local/node-v18.18.0-linux-x64/bin/npm /usr/local/bin/npm

4. 验证安装

检查 Node.js 和 npm 是否安装成功:

bash
复制代码
node -v
npm -v

这将显示安装的 Node.js 和 npm 版本信息。


安装 Git 到 /usr/local/

  1. 下载 Git 源代码

为了将 Git 安装到指定的目录,你可以通过源码编译安装。首先,下载 Git 的源代码。

bash
复制代码
cd /usr/local
sudo wget https://github.com/git/git/archive/refs/tags/v2.41.0.tar.gz

你可以根据需要选择其他版本。上述命令下载的是 v2.41.0 版本,最新的 Git 版本可以在 Git Releases 页面找到。

  1. 解压 Git 安装包

下载完成后,解压并进入 Git 源代码目录:

bash
复制代码
sudo tar -xvzf v2.41.0.tar.gz
cd git-2.41.0

3. 安装依赖项

在编译 Git 之前,需要安装一些依赖项,确保系统具有必要的构建工具和库:

bash
复制代码
sudo apt update
sudo apt install -y libcurl4-openssl-dev libexpat1-dev gettext libz-dev libssl-dev

4. 编译和安装 Git

使用 make 命令编译 Git,并指定安装目录为 /usr/local

bash
复制代码
make prefix=/usr/local all
sudo make prefix=/usr/local install

5. 验证安装

安装完成后,检查 Git 是否安装成功:

bash
复制代码
git --version

这将显示 Git 的版本信息。


总结

通过上面的步骤,你可以将 Node.js 和 Git 安装到 /usr/local/ 目录下:

  • Node.js:通过下载二进制文件并创建符号链接,确保 nodenpm 命令可以在终端中访问。
  • Git:通过下载源码、安装依赖、编译并安装到 /usr/local/

在Jenkins中配置插件安装目录

image.png

image.png

image.png

image.png

最初tool是没有nodejs的配置的需要去插件管理-Available plugins-找到nodejs-点击安装-安装完成tool中会出现nodejs配置

image.png