drone 构建一直卡住,心力憔悴
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
这个标签的问题。
本文来自读者“程序猿石头”的投稿文章《这 10 行比较字符串相等的代码给我整懵了,不信你也来看看》,原文写的很好,但不够直接了当,信息密度不够高,所以我对原文进行大量的删减、裁…
下面是一些最近在互联网上看到的一些各式各样的资源和文章,当然,都是英文社区的,本来想每一个写一篇文章,但是觉得一篇文章一句话真没劲,所以,把这些东西合并写成一篇文章,这样有利于…
需求 1 、我想通过 api 访问 openai 服务,开发环境在本地。 2 、我想无痛代理流量,并不想修改代码,所以应该涉及 dns 解析和类似 tun 代理的方式配合。 先…