Jenkins 笔记

1 如何安装?

1.1 直接安装在服务器上

系统 Ubuntu


(1) 更新系统软件包

没有更新系统包可能导致后续的安装失败

sudo apt update
sudo apt upgrade -y

(2) 安装 Java(Jenkins 依赖 Java)

推荐使用 Java 11 或 Java 17(LTS 版本)。

sudo apt install openjdk-17-jdk -y

安装完成后,验证 Java 是否安装成功:

java -version

(3) 添加 Jenkins 官方仓库

  1. 导入 Jenkins 的 GPG 密钥:
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo tee \
  /usr/share/keyrings/jenkins-keyring.asc > /dev/null
  1. 添加 Jenkins 的 APT 源:
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null

(4) 安装 Jenkins

更新软件包列表并安装 Jenkins:

sudo apt update
sudo apt install jenkins -y

(5) 启动并设置 Jenkins 开机自启

sudo systemctl start jenkins
sudo systemctl enable jenkins

检查 Jenkins 服务状态:

sudo systemctl status jenkins

如果看到 active (running) 表示 Jenkins 已成功启动。


(6) 配置防火墙(如果启用了 UFW)

如果你的系统启用了 UFW 防火墙,需要开放 Jenkins 默认端口 8080

sudo ufw allow 8080
sudo ufw reload

对于云服务器,可以直接在服务器的控制台进行开放。


(7) 访问 Jenkins 初始化页面

在浏览器中输入:

http://<你的服务器IP>:8080

(8) 解锁 Jenkins

  1. 在浏览器中打开 Jenkins 页面后,会看到一个提示,要求输入“解锁密码”。

  2. 在服务器终端运行以下命令查看初始管理员密码:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

复制输出的密码,粘贴到浏览器中。


(9) 安装推荐插件

Jenkins 会提示你安装“推荐插件”,建议选择默认的“Install suggested plugins”进行安装。


(10) 创建管理员账户

安装完插件后,系统会要求你创建一个管理员账户(用户名、密码、邮箱等),按照提示完成设置。(可选)


1.2 使用 Docker 安装


(1) 服务器上需要有 Docker 环境和 docker compose 工具

使用命令查看是否有Docker环境

docker -v
docker compose version

注意​​:从 Docker 20.10 开始,官方推荐使用内置的 docker compose(带空格)作为插件,而不是旧版的 docker-compose(Python 实现)。如果使用的是较新的 Docker 版本(如 20.10+),​​不需要单独安装 docker-compose​​,而是直接使用 docker compose 命令。

Docker 安装:
(见文章“[[Docker 笔记]]”第一节)


(2) 创建docker-compose.yml文件

  1. 在指定的目录下,创建 docker-compose.yml
可选以下命令中的一种

vim docker-compose.yml

nano docker-compose.yml

  1. docker-compose.ym 内容:
services:

  jenkins:

    image: jenkins/jenkins:lts-jdk17  # 使用长期支持版本,基于 JDK 17

    container_name: jenkins

    restart: unless-stopped

    ports:

      - "8080:8080"  # Jenkins Web 界面端口

      - "50000:50000" # Jenkins agent 通信端口

    volumes:

      - jenkins_home:/var/jenkins_home  # 持久化 Jenkins 数据

      - /var/run/docker.sock:/var/run/docker.sock  # 挂载宿主机的 Docker Socket,实现 Docker-in-Docker (DinD)

      - /usr/bin/docker:/usr/bin/docker

    environment:

      - TZ=Asia/Shanghai

      - JAVA_OPTS=-Djenkins.install.runSetupWizard=false -Dhudson.model.DirectoryBrowserSupport.CSP="sandbox allow-scripts allow-same-origin allow-forms; default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';" # 可调过引导界面,并配置一些额外信息

      - JENKINS_OPTS=--prefix=/jenkins # 扩展访问路径

  

volumes:

  jenkins_home:


(3) 构建镜像并启动容器

在指定目录下执行以下命令

docker compose up -d

(4) 访问 Jenkins 初始化页面

在浏览器中输入:

http://<你的服务器IP>:8080/jenkins

2 使用 Nginx 反向代理


3 使用 Jenkins

3.1 部署在服务器上

对于 Jenkins 在执行构建和部署时使用的用户是 jenkins 需要为其赋予一定的权限


(1) 部署 Github 项目

(1.1) git pull 每次都需要使用密码

每次执行 git pull origin main 都需要输入用户名和密码,通常是因为你的 Git 仓库使用的是 ​​HTTPS​​ 协议而不是 ​​SSH​​ 协议,并且你没有配置凭据缓存或使用个人访问令牌(PAT)。


​1.使用 HTTPS 而非 SSH​​
  • ​原因​​:
    如果你的远程仓库 URL 是 https://github.com/用户名/仓库名.git(HTTPS 方式),Git 每次操作(如 pullpush)都会要求验证身份。
  • ​解决方案​​:
    • ​改用 SSH​​(推荐):
      将远程仓库 URL 改为 SSH 格式(如 git@github.com:用户名/仓库名.git),这样可以使用 SSH 密钥认证,无需每次输入密码。

      git remote set-url origin git@github.com:用户名/仓库名.git
      

      (需提前在本地生成 SSH 密钥并添加到 GitHub/GitLab 等平台。见下文)

    • ​继续使用 HTTPS 但缓存凭据​​:
      如果必须用 HTTPS,可以启用 Git 的凭据缓存功能(见下文)。


​2.​未启用 Git 凭据缓存​​
  • ​原因​​:
    Git 默认不会记住 HTTPS 的用户名和密码,除非显式配置凭据存储。
  • ​解决方案​​:
    • ​临时缓存凭据​​(默认 15 分钟):

      git config --global credential.helper cache
      
    • ​长期缓存凭据​​(如 1 小时):

      git config --global credential.helper "cache --timeout=3600"
      
    • ​永久存储凭据​​(不推荐,安全性较低):

      git config --global credential.helper store
      

      (密码会明文保存在 ~/.git-credentials 文件中。)


​3.平台要求使用个人访问令牌(PAT)​​
  • ​原因​​:
    GitHub、GitLab 等平台已逐步弃用直接使用密码的方式,改为要求 ​​个人访问令牌(Personal Access Token, PAT)​​ 进行 HTTPS 认证。
  • ​解决方案​​:
    • 生成 PAT(如 GitHub:Settings > Developer settings > Personal access tokens)。
    • 下次 git pull 时,输入用户名 + PAT(代替密码)。
    • 如果启用了凭据缓存,后续操作会复用该令牌。

(1.2) 本地生成 SSH 密钥
1. 检查 SSH 密钥是否存在​​

在 Jenkins 用户下,检查是否已经生成了 SSH 密钥(默认存储在 ~/.ssh/ 目录):

ls -al ~/.ssh/

如果看到 id_rsaid_rsa.pub(或 id_ed25519id_ed25519.pub),说明已经有密钥。如果没有,需要生成新的 SSH 密钥。


2. 生成新的 SSH 密钥(如果不存在)​
  1. 在 Jenkins 用户下生成 SSH 密钥(如果还没有):
ssh-keygen -t ed25519 -C "jenkins@your-server"  # 推荐使用 ed25519 # 或者使用 RSA(兼容旧系统) # ssh-keygen -t rsa -b 4096 -C "jenkins@your-server"

按提示操作(默认路径 ~/.ssh/id_ed25519,可以不设密码直接回车)。


3. 将 SSH 公钥添加到 GitHub​​

复制公钥内容:

cat ~/.ssh/id_ed25519.pub  # 或 cat ~/.ssh/id_rsa.pub

登录 GitHub,进入:
- ​​Settings​​ → ​​SSH and GPG keys​​ → ​​New SSH key​
- 粘贴公钥内容,保存。


​4. 测试 SSH 连接​​

在 Jenkins 用户下测试是否能连接 GitHub:

ssh -T git@github.com

(2) jenkins 用户权限问题


(2.1) 无法使用 docker 命令

Docker 默认使用 ​​Unix 套接字​​(/var/run/docker.sock)进行通信,而该套接字的默认权限通常是:

srw-rw---- 1 root docker 0 Aug 1 10:00 /var/run/docker.sock
  • 所有者​​:root
  • ​所属组​​:docker
  • ​权限​​:rw-rw----(即只有 rootdocker 组的成员可以读写)。

jenkins 用户加入 docker

 sudo usermod -aG docker jenkins
  • 重新登录
  • 重新启动Jenkins服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jizuiba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值