外观
Jenkins
安装
- 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
9aa7598d5bb479b1a468b9f1d2575ee39ce6f4312d8d59a71951da7315591694d57a3404 - 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中配置的地址
- 在Gitea中配置
- 选择仓库 -> 设置 -> Web钩子
http://JENKINS_URL/generic-webhook-trigger/invoke?token=123
构建环境
... 随意
Build Steps
- shell脚本 ...
配置完后就可以了 在gitea中点击测试推送
构建(旧版弃用)
- 源码管理
- Git
- 安装对应的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(构建失败中断配置)
- 1.定时
- Build Steps
- 执行shell脚本
- 输入对应的发布啊 或者docker之类的命令
- 执行shell脚本
示例步骤:
- 推送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比较臃肿,都靠插件运行 新思路:
使用 Gitea 进行代码仓库管理。
在 Gitea 中配置 webhook 事件,如代码推送事件。
将 webhook 地址设置为您的服务器地址对应的webhook端点。
在服务器端用程序(如Shell脚本)监听这个端点,比如使用nc命令监听一个端口。
当Gitea有发生推送事件时,会POST一个JSON数据到这个webhook端点。
Shell脚本在接收到POST请求后,解析请求body中的JSON数据,判断是否是指定的Gitea事件。
如果是预期的事件,则执行后续的编译、打包、部署等任务脚本。
这些任务脚本可以具体调用如Maven、Docker等工具完成相关操作。
任务执行成功后,脚本返回成功状态码给Gitea,完成一个自动化流程。
