# 使用 jenkins 搭建CI/CD

# 首先用 docker 安装jenkins

进入 /etc/docker 目录下,修改 daemon.json 文件,添加如下内容,主要包括一些镜像源:

{
  "registry-mirrors": [
	    "https://cf-workers-docker-io-d5y.pages.dev",
      "https://kfwkfulq.mirror.aliyuncs.com",
      "https://2lqq34jg.mirror.aliyuncs.com",
      "https://pee6w651.mirror.aliyuncs.com",
      "https://registry.docker-cn.com",
      "http://hub-mirror.c.163.com",
      "https://do11tfdm.mirror.aliyuncs.com"
],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
    }
}
修改此文件需要重启docker服务
systemctl start docker

# 编写docker file


cd /opt 

mkdir docker

cd docker && mkdir jenkins && cd jenkins  

编写 jenkins.yml:

version: "3.4"
services:
  jenkins:
    hostname: jenkins
    image: jenkins/jenkins:2.387.3
    network_mode: "bridge"
    ports:
      - 8080:8080
      - 50000:50000
    restart: always
    privileged: true
    container_name: jenkins
    volumes:
      - ./jenkins_home:/var/jenkins_home

# 构建docker镜像


docker compose -f jenkins.yml up -d // up启动-d后台启动

docker ps // 查看镜像  

docker start b102124d029a(CONTAINER ID)  启动jenkins  

可能失败 没有目录权限 jenkins_home 

chomd -R 777 jenkins_home

# 打通gitee

  • 安装 gitee 插件

  • 安装 Generic Webhook Trigger 插件

  • gitee 填写 api?token=(Generic Webhook Trigger在用户管理-用户-设置里面生成的token)

  • webhook 密码 填写jenkins创建项目那里的密码

# docker 容器内部 sh 操作其他服务器

webhook触发后我们执行sh会发现此时在docker容器内部 需要登录到其他服务器进行操作


# 以下注释由AI生成

# (如果没有rsa密钥 可以 ssh-keygen生成一下)

cp id_rsa /opt/docker/jenkins/jenkins_home/  # 将id_rsa私钥文件复制到Docker容器挂载的Jenkins主目录下

cat authorized_keys # 查看当前的authorized_keys文件内容,里面存储了允许通过SSH公钥认证登录的公钥。

cat id_rsa.pub >> authorized_keys # 将公钥文件id_rsa.pub的内容追加到authorized_keys文件中,以便允许使用该公钥进行SSH认证

cd /opt/docker/jenkins/jenkins_home/ # 切换到Jenkins主目录,假设这是Jenkins在Docker容器中的数据卷挂载点

ls # 列出当前目录下的文件和目录,以检查内容是否如预期

docker ps -a # 列出所有Docker容器,包括正在运行的和已经停止的。

docker exec -it b102124d029a bash # 进入指定ID为b102124d029a的Docker容器内部,并启动一个交互式bash shell

cd /var/jenkins_home/ # 在Docker容器内切换到Jenkins的实际主目录

ls # 看下有没有 rsa 


- 配置SSH公钥认证,以便让Jenkins实例能够通过SSH无密码访问其它系统或服务。
- 验证并管理Jenkins在Docker容器内的数据

# jenkins 执行脚本举例


ssh -i /var/jenkins_home/id_rsa root@(宿主机器内网IP或者其他服务器的公网IP) "git or build 指令"

# 这时候可能发现会失败 原因是没有权限访问 /var/jenkins_home/id_rsa

# 宿主机执行下

chmod 777 /opt/docker/jenkins/jenkins_home/id_rsa