Skip to content

Jenkins

约 937 字大约 3 分钟

Docker

2023-09-28

安装

  • docker-compose.yml
version: '3.1'
services:
  jenkins:
    restart: always
    image: jenkins/jenkins
    container_name: jenkins
    privileged: true # 映射使用宿主机的docker
    user: root       # 使用root用户操作,权限最高
    ports:
      - 8080:8080
      - 50000:50000
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock #映射使用宿主机的docker
      - /usr/bin/docker:/usr/bin/docker #映射使用宿主机的docker
      - /usr/libexec/docker/cli-plugins/docker-compose:/usr/bin/docker-compose      
      #映射使用宿主机的docker-compose      使用:/usr/bin/docker-compose up -d
# 问题:
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

# 提权
chown -R 1000:1000 /opt/jenkins

插件添加

  • gitee 9aa7598d5bb479b1a468b9f1d2575ee3 9ce6f4312d8d59a71951da7315591694d57a3404
  • Publish Over SSH
  • Generic Webhook Trigger:webhook支持
    • 安装之后才会有Generic Webhook Trigger选项

配置

- jenkins -> 系统管理 -> 凭据 (新增gitea凭据 在gitea的应用中生成)
- jenkins -> 系统管理 -> 系统配置 下拉找到 Gitea Servers 新增 选择上一步的凭证

构建

源码管理

  • 选择Git,填入对应地址,使用的gitea需要使用安装gitea的插件Gitea Plugin,来验证身份
    • 添加Credentials
    • 注意分支名称

构建触发器

  • 选择Generic Webhook Trigger
    • http://JENKINS_URL/generic-webhook-trigger/invoke完善地址;在token的框中填入gitea中配置的地址 jenkins配置
    • 在Gitea中配置
      • 选择仓库 -> 设置 -> Web钩子
      • http://JENKINS_URL/generic-webhook-trigger/invoke?token=123gitea配置

构建环境

... 随意

Build Steps

  • shell脚本 ...

配置完后就可以了 在gitea中点击测试推送

构建(旧版弃用)

  • 源码管理
    • Git
      • 安装对应的git插件 填入仓库地址
  • 构建触发器
    • 1.定时TZ=Asia/Shanghai H/10 * * * *
    • 2.webhook构建触发 (需要公网地址),gitea的话选择轮询,
    • 轮询 SCM 有提交时触发钩子更新。 在gitea中配置webhook 在Gitea中:在repo-> Settings-> Webhooks下,添加新的webhook,将URL设置为http://JENKINS_URL/generic-webhook-trigger/invoke
    • Delete workspace before build starts(删除之前构建的内容)
    • Terminate a build if it's stuck(构建失败中断配置)
  • Build Steps
    • 执行shell脚本
      • 输入对应的发布啊 或者docker之类的命令

示例步骤

  • 推送git之后触发构建命令/usr/bin/docker-compose up -d --build
version: '3.4'

services:
  webapp:
    image: test:latest
    container_name: testapp
    build: .
    ports:
        - "8811:80"
    working_dir: /app
    command: ["dotnet", "WebApp.dll"]
  • 使用Dockerfile文件 打包镜像
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApp.csproj", "."]
RUN dotnet restore "./WebApp.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "WebApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApp.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApp.dll"]
  • 将宿主机的docker映射到jenkins中去,就可以使用dockers构建应用在宿主机上

也可以在docker中映射路径后、通过shell命令来发布blog之类的!

11

问题:

问题:
Delivery: Post "http://192.168.1.30:8081/gitea-webhook/post": dial tcp 192.168.1.30:8081: webhook can only call allowed HTTP servers (check your webhook.ALLOWED_HOST_LIST setting), deny '192.168.1.30(192.168.1.30:8081)'

在配置文件app.ini中添加
[webhook]  
ALLOWED_HOST_LIST = *

新的自动化思路

Jenkins比较臃肿,都靠插件运行 新思路:

  1. 使用 Gitea 进行代码仓库管理。

  2. 在 Gitea 中配置 webhook 事件,如代码推送事件。

  3. 将 webhook 地址设置为您的服务器地址对应的webhook端点。

  4. 在服务器端用程序(如Shell脚本)监听这个端点,比如使用nc命令监听一个端口。

  5. 当Gitea有发生推送事件时,会POST一个JSON数据到这个webhook端点。

  6. Shell脚本在接收到POST请求后,解析请求body中的JSON数据,判断是否是指定的Gitea事件。

  7. 如果是预期的事件,则执行后续的编译、打包、部署等任务脚本。

  8. 这些任务脚本可以具体调用如Maven、Docker等工具完成相关操作。

  9. 任务执行成功后,脚本返回成功状态码给Gitea,完成一个自动化流程。