drone 也是在站内看到的,觉得 jenkins 太丑了,想换个新的试试。
## docker-compose.yml
services:
drone:
image: drone/drone:2
container_name: drone
restart: always
ports:

  • "443:443"
    volumes:
  • ./data:/data
  • ./ssl:/etc/ssl:ro # 将 SSL 证书文件挂载到容器中
  • /etc/timezone:/etc/timezone:ro
  • /etc/localtime:/etc/localtime:ro
    environment:
  • DRONE_USER_CREATE=username:admin,admin:true
  • DRONE_GITEA_SERVER= XXXXXX
  • DRONE_GITEA_CLIENT_ID=XXXXXX
  • DRONE_GITEA_CLIENT_SECRET=XXXXX
  • DRONE_RPC_SECRET=970106f1f4bb07fa1ab0589a6df09b51
  • DRONE_SERVER_HOST=drone.XXXXXX.cn
  • DRONE_TLS_CERT=/etc/ssl/your_certificate.pem # 指向证书文件路径
  • DRONE_TLS_KEY=/etc/ssl/your_private_key.key # 指向私钥文件路径
  • DRONE_SERVER_PROTO=https
  • DRONE_LOGS_DEBUG=true

runner:
image: drone/drone-runner-docker:latest
container_name: drone-runner-445
restart: always
volumes:

  • /var/run/docker.sock:/var/run/docker.sock
  • /etc/timezone:/etc/timezone:ro
  • /etc/localtime:/etc/localtime:ro
    environment:
  • DRONE_RPC_PROTO=https
  • DRONE_RPC_HOST=drone.XXXXXX.cn
  • DRONE_RPC_SECRET=970106f1f4bb07fa1ab0589a6df09b51
  • DRONE_RUNNER_CAPACITY=4
  • DRONE_RUNNER_NAME=drone-runner-445
  • DRONE_RUNNER_LABELS=type:docker
  • DRONE_LOGS_DEBUG=true
  • DRONE_RPC_INSECURE=true

## drone.yml
kind: pipeline
type: docker
name: default

steps:

  • name: hello
    image: alpine
    pull: if-not-exists
    commands:
  • echo "Starting build..."
  • pwd
  • ls -la
  • echo "Hello World"
  • echo "Build completed"

trigger:
branch:

  • main
    event:
  • push
  • pull_request
  • tag
  • schedule
  • custom

## 故障
可以触发新的 build,但是一直卡住,把对应的包加载到服务器了,但是一直 Step is pending ,卡住了
ubuntu@VM-4-13-ubuntu:~$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest b0c9d60fc5e3 12 days ago 7.83MB
drone/drone 2 649ae58d4a6a 2 months ago 59.2MB
drone/drone-runner-docker latest e2de942d714a 15 months ago 26MB
drone/drone-runner-docker 1 42f73cc80149 2 years ago 25.7MB
drone/git latest b263385b74bd 2 years ago 198MB
drone/drone-runner-ssh latest 59c90b8fb99d 2 years ago 19.5MB

我看其他人都可以的,不知道哪里出问题了,家资不厚,愿意解决的大佬,请一杯咖啡( 50 元)

不一定要死磕 drone 啊,主要是搞了几天想搞明白为啥,有除了 jenkins 的其他推荐也行,主要打包前后端,后续会集成进 k8s

构建日志?

开 ssh ,让我上去看看

sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
" docker.unsee.tech"
]
}
EOF

重启 docker ,不配置 docker 镜像不行的

没有构建日志,第一步都没进去

这个地址 docker-0.unsee.tech

你这让我想起来一位故人

#7 谢谢,我去试试

故人江海别,几度隔山川。
乍见翻疑梦,相悲各问年。

大概这个症状,换了 docker 源了,感觉还是没啥动静

源应该是生效了,可以拉镜像

ubuntu@VM-4-13-ubuntu:/opt/docker/drone$ sudo docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
af302e5c37e9: Pull complete
207b812743af: Pull complete
841e383b441e: Pull complete
0256c04a8d84: Pull complete
38e992d287c5: Pull complete
9e9aab598f58: Pull complete
4de87b37f4ad: Pull complete
Digest: sha256:0a399eb16751829e1af26fea27b20c3ec28d7ab1fb72182879dcae1cca21206a
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
ubuntu@VM-4-13-ubuntu:/opt/docker/drone$ cat /etc/docker/daemon.json
{
"registry-mirrors": [
" docker-0.unsee.tech"
]
}

去看看 runner output 的日志,就是你 drone-runner-445 这个容器的 docker log ,有没有收到 task, 现在在干什么,在 drone 看看 runner 的状态。好多年没用这东西了。

#4 哈哈哈

我这边 drone-runner-445 没有映射出去端口有关系吗,我理解只要能 runner 主动访问到 服务就行,不需要服务去主动访问 runner

drone.yml 里面的 volumes 定义一下.

trigger 换成 when. 无关的 event 去掉.

修改好了
kind: pipeline
type: docker
name: default

steps:

  • name: hello
    image: alpine
    pull: if-not-exists
    volumes:
  • name: cache
    path: /tmp/cache
    commands:
  • echo "Starting build..."
  • pwd
  • ls -la
  • echo "Hello World"
  • echo "Build completed"

volumes:

  • name: cache
    host:
    path: /var/lib/cache

when:
branch:

  • main
    event:
  • push
  • pull_request
  • custom

#18 觉得大概是噶了

#10 来个 wx 尼,给你权限

wx: defunct

#21 加了

argo workflow CI/CD 一起搞定。

volumes 不对. 定义的时候提到顶层. (host path 那个)
使用的时候(steps 下面的- name: hello 下面的 volumes), 只用到上面定义的名字, 这时的 path 是/drone/src/build .(确实挺绕的...)

ci
研究 woodpecker-ci.org/docs/intro 吧,别研究 drone 了。
或者 gitlab ci
cd
没啥好用的

这玩意的优点就是省资源, 但是配置确实有点怪...尤其是挂载目录和路径那玩意. 公司的省钱测试服务器要是配置低, 几乎只有这个选择, gitlab 不够内存跑

#24 volumes 我理解不定义不会影响我卡住呀,最多没缓存,应该不是这个原因

另外实在受不了各种奇葩配置的话, 可以考虑 express/koa 直接自己简单写几个接口 hook, 然后写个 shell script 744 让程序执行, 同样可以实现 cicd....一样可以启动 docker 镜像.

完全没用过这个东西。猜测大概率 pending 在资源分配上,比如楼上说的 volumes 。

解决的思路还是要能找到对应日志出来看一看。要么找错地方,要么 logging 级别打印不够细(不过感觉不太可能)。OP 最后解决了,也分享下历程。

另外,同推荐直接在 k8s 里用 argo workflow CI/CD 一步到“胃”。有空的时候再去折腾。

#27 kind: pipeline
type: docker
name: default

volumes:

  • name: cache
    host:
    path: /var/lib/cache

steps:

  • name: hello
    image: alpine
    pull: if-not-exists
    volumes:
  • name: cache
    path: /drone/src/build
    commands:
  • echo "Starting build..."
  • pwd
  • ls -la
  • echo "Hello World"
  • echo "Build completed"

when:
branch:

  • main
    event:
  • push
  • pull_request
  • custom

等了几分钟还是噶了

你试试把 drone runner 的 3000 端口绑定出来, 实时看一下卡住的时候 runner 在搞什么飞机.

ci 文件没问题 我帮你试过了
图片描述

因为你的 runner 设置了 DRONE_RUNNER_LABELS
所以你的 .drone.yml 要加上
`
node:
type:docker
`

妙手啊,来个微信给你转红包

抱歉,没格式化好

像这样

#34 问题解决了就行 😘 哈哈, 红包就不用啦. 恰好我也用过 drone, 有问题可以随时交流

不用谢我,我正看 container 日志呢,啥也没抛出,就被人解决掉了。

  • DRONE_RUNNER_LABELS=type:docker

这个标签的问题。