From a642ed2ede369da938500699ff9eb9ffcbddf128 Mon Sep 17 00:00:00 2001 From: zhaoyingbo Date: Tue, 12 Jul 2022 14:43:30 +0800 Subject: [PATCH] update: dockerhub md --- Dockerfile | 10 +++--- Dockhub.md | 81 ++++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 6 ++-- go.mod | 2 +- 4 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 Dockhub.md diff --git a/Dockerfile b/Dockerfile index b3d6738..9060562 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM golang:1.18.2 -WORKDIR /gogs_auto_deploy +WORKDIR /gogs_runner COPY . . @@ -12,9 +12,9 @@ LABEL maintainer="zhaoyingbo@live.cn" EXPOSE 3001 -WORKDIR /gogs_auto_deploy +WORKDIR /gogs_runner -ENV GOGS_REPOSITORY '/gogs_auto_deploy/repository/' +ENV GOGS_REPOSITORY '/gogs_runner/repository/' HEALTHCHECK --interval=5s --timeout=3s \ CMD curl -fs http://0.0.0.0:3001/health || exit 1 @@ -31,6 +31,6 @@ RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.li && apt-get install -y --no-install-recommends libsm6 libxrender1 libxext-dev libglib2.0-dev \ && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime -COPY --from=0 /gogs_auto_deploy/gogs_auto_deploy gogs_auto_deploy +COPY --from=0 /gogs_runner/gogs_runner gogs_runner -CMD /bin/bash -c /gogs_auto_deploy/gogs_auto_deploy +CMD /bin/bash -c /gogs_runner/gogs_runner diff --git a/Dockhub.md b/Dockhub.md new file mode 100644 index 0000000..ed9bedb --- /dev/null +++ b/Dockhub.md @@ -0,0 +1,81 @@ +# Gogs Runner +通过Gogs内置的Webhook,实现自动部署项目。最终目标是形成像gitlab-runner一样好用的CICD。 + +项目地址:[https://git.lacus.site/RainSun/gogs_runner](https://git.lacus.site/RainSun/gogs_runner) + +## 🔨 配置项目 + +### 添加部署脚本 +在你的项目中添加自动部署脚本(默认是`deploy.py`,当然你也可以在后续的配置文件中随便修改脚本名,[示例](https://git.lacus.site/RainSun/gogs_runner/src/master/example/deploy.py)) + +### 配置webhooks +屏幕右上方 -> 仓库设置 -> 管理Web钩子 -> 添加新的Web钩子 -> 选择Gogs + +推送地址就是刚刚起的服务的地址,数据格式默认json就好,密钥文本留空,剩下自己看着选 + +### 配置Runner +编写一个`config.json` +```json +[ + { + // 名称:git用户名/项目名(需要实现自动部署的项目),不可为空 + "repo": "lollipopkit/example", + // 脚本文件名,默认“deploy.py” + "script": "deploy.py", + // 信号:未指定分支时,commit messgae里包含信号,则执行脚本,默认“{D}” + "signal": "{D}", + // 分支:指定分支只要push就部署最后一个提交,无默认值,可为空,此配置优先于信号 + "branch": "master" + } +] +``` +后续将把此文件映射进容器 + +> 如果你所有项目都是用默认配置,这个文件不写也可以的,只要接收到了来自gogs的请求且commit包含`{D}`信号,就会自动执行`deploy.py` + +## 🔌 把容器跑起来 + +这里有一份比较精简的`docker-compose.yml` + +```yml +version: '3.3' +services: + gogs_runner: + image: zhaoyingbo/gogs_runner:1.0.0 + container_name: gogs_runner + environment: + - TZ=Asia/Shanghai + ports: + - "3001:3001" + volumes: + - ~/.ssh:/root/.ssh # 必须 + - ~/.gogs_runner/config.json:/gogs_runner/config.json + - /usr/bin/docker:/usr/bin/docker + - /var/run/docker.sock:/var/run/docker.sock + user: root + restart: always +``` + +### 文件系统映射 +由于使用ssh克隆代码,必须将.ssh映射进容器 + +根据实际情况修改config.json映射地址,无需配置的话这行也可以删除 + +需要注意的是,项目默认使用Python运行脚本,所以是基于python:3.7构建的,其余命令例如docker需要自己映射进容器 + +如果需要宿主机文件之类的也需要把相关文件夹映射进去 + +## 🎉 尝试自动部署 +⚠️ **注意**,请仔细阅读下一节[要求](https://git.lolli.tech/lollipopkit/gogs-webhook#-%E8%A6%81%E6%B1%82),然后尝试自动部署。 +在需要部署的项目内,新建commit,commit message内需要包含刚在`config.json`内配置的`signal`(默认`{D}`),然后push。 或者在配置文件指定的分支推送也可。 + +如果未能成功,请使用`docker logs`查看输出 + +## 🔖 要求 +- 在仓库的webhook页面正确配置 +- 部署过程需要有相应权限 +- 未指定分支部署时,需要在commit message中包含`{D}`字符(可以通过`config.json`参数自定义字符) + +## 📝 License +`LGPL LollipopKit 2022` + diff --git a/docker-compose.yml b/docker-compose.yml index 0cfee21..4481ad4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,8 +1,8 @@ version: '3.3' services: - gogs_auto_deploy: - image: zhaoyingbo/gogs_auto_deploy:1.0.0 - container_name: gogs_auto_deploy + gogs_runner: + image: zhaoyingbo/gogs-runner:latest + container_name: gogs_runner environment: - TZ=Asia/Shanghai # 时区 ports: diff --git a/go.mod b/go.mod index becc395..0099f83 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ -module git.lacus.site/RainSun/gogs_auto_deploy +module git.lacus.site/RainSun/gogs_runner go 1.18