如何在CoreOS与Docker上利用Drone.io执行持续集成测试

Drone.io与CoreOS协同实现容器原生CI架构 持续集成(CI)本质是代码变更到可部署产物的自动化验证过程,其稳定性取决于执行环境的一致性与确定性。传统CI工具如Jenkins依赖Java进程和抽象节点模型,在容器化场景下易引发资源争用、权限混乱与内核兼容问题,典型表现如'enq: ci - contention'错误。而容器原生CI引擎Drone.io直接将YAML工作流编译为docker run命令,与仅信任容器运行时的操作系统CoreOS(及继任者Flatcar)形成深度契约:二者共同消除了中间层状态、强制不可变基础设施、统一权限与资源边界。该组合 阅读详情

提供:ZStack云计算

内容简介

Want a minimal setup continuous integration solution? Who wouldn’t! 如何才能轻松设置一套持续集成解决方案?答案很简单:Drone.io利用Docker容器运行测试任务,同时可与 GitHub、GitLab (自我托管且基于服务) 以及Bitbucket实现协作。

Drone由Go语言编写而成且可利用Docker方案。其能够运行在容器之内,且几乎无需经过太多配置修改。

持续集成是一类开发实践,具体为频繁向代码库提交内容,同时在过程中实现构建与测试。这意味着新代码将(在理想状态下)快速且轻松地被集成至我们的现有代码库当中。由于持续集成要求大家频繁对代码进行构建与测试,因此以自动化方式执行这两项任务能够极大提升开发速度——Drone正是为此而生。

Drone能够自动从托管Git库中提取代码,而后运行我们所定义的脚本。大家可以运行任意测试套件,并使其通过邮件或者README文件对特定指标进行报告。Drone提供的Docker集成能力意味着其可以支持多种语言类型,包括PHP、Node、Ruby、Go以及Python等等。每项测试都将根据Docker公共注册表中的指定镜像生成一套新容器。这意味着随着镜像数量的不断增加,其对于语言及开发堆栈的支持能力也将得到扩展。大家甚至可以亲自动手构建镜像以适应自己的特定应用!

在今天的教程中,我们将探讨如何对Drone.io进行容器化,从而保证其可在精简化Linux发行版CoreOS当中得以运行。

先决条件

  • 至少向账户中添加一条SSH密钥
  • 单一CoreOS Beta Droplet(512 MB内存即可)

如果各位此前从未使用过这套操作系统,建议大家阅读CoreOS介绍一文。

If you are unsure of how to configure CoreOS using a

cloud-config file, you can find more information, plus a sample config file,如果大家不了解如何利用cloud-config文件进行CoreOS配置,则可在此处获取更多信息外加一个示例配置文件。我们将在下面的教程中使用该示例文件。

第一步——准备GitHub

在开始之前,我们需要通过oAuth对GitHub账户进行访问。我们还将在后面的Drone容器设置步骤中生成两条令牌。

我们需要利用自己的GitHub账户生成这些值。点击此处以访问GitHub上的对应设定页面,名为“Applications”。

点击右上角的“Register new application”按钮,弹出的新表单将如下所示:

在这里添加我们的应用名称。此处的主页URL应为http://YOUR_DROPLET_IP:8080/。完成后,添加应用程序描述。

注意:确保将验证回调URL设定为http://YOUR_DROPLET_IP:8080/api/auth/github.co,从而正确完成验证!

设置完成后,点击“Register application”以进入新应用的信息页面。

在这里大家需要获取两条信息,其一为Client ID,其二Client Secret。(顾名思义,Client Secret需要保密,绝不要与他人分享其内容!)

这些令牌将被用于验证我们自己的Drone应用,从而将webhooks添加至我们通过仪表面板向Drone中加入的任何GitHub库当中。这些webhooks将在每次感知到指向GitHub的新提交操作时被触发,而Drone则会克隆这些新变更并运行构建操作。

请注意这些令牌,我们在下面的部分中将要用到。

第二步——编写Dockerfile

在CoreOS Droplet配置完成之后,通过SSH进行接入:

ssh -A core@YOUR_DROPLET_IP

创建一个名为droneio的新目录:

mkdir droneio
cd droneio

由于CoreOS的root文件系统拥有只读属性,因此我们无法直接安装Drone.io。我们需要首先利用Docker对其进行容器化。与Ubuntu系统的使用方式一样,我们将设置一个容纳有相关指令的Dockerfile,并利用它对Drone.io进行安装。

在本示例中,我们将使用基于终端的文本编辑器vim——其同时也是CoreOS上的默认文本编辑器。

现在利用以下命令打开vim并创建我们的Dockerfile:

vim Dockerfile

这条命令会打开vim并在当前目录中创建一个名为Dockerfile的新文件。

现在进入插入模式,即按下i键。按下后,终端左下角会提示:

    -- INSERT --. Now you can type or paste in the Dockerfile contents.

现在Dockerfil已经创建完成,而且每一行都拥有对应的注释。大家可以直接复制该文件:

# Pull from base Ubuntu image
FROM ubuntu

# Do system updates and install dependencies
RUN apt-get update
RUN apt-get -y upgrade
RUN sudo apt-get -y install git wget
RUN apt-get clean

# Download Drone.io
RUN wget http://downloads.drone.io/master/drone.deb
RUN dpkg -i drone.deb

# Expose the Drone.io port
EXPOSE 8080

ENV DRONE_SERVER_PORT 0.0.0.0:8080
ENV DRONE_DATABASE_DATASOURCE /var/lib/drone/drone.sqlite

# Define our GitHub oAuth keys below
ENV DRONE_GITHUB_CLIENT <CLIENT_TOKEN_HERE>
ENV DRONE_GITHUB_SECRET <CLIENT_SECRET_HERE>

# The command we'll be running when the container starts
CMD /usr/local/bin/droned

将其中的<CLIENT_TOKEN_HERE>与<CLIENT_SECRET_HERE>替换为我们之前提到过的令牌。

输入以下指令以保存做出的变更。其中w用于告知vim将该文本写入至文件,而q则表示退出vim。

:wq

下面来看Dockerfile中各命令的具体作用:

  • FROM - 我们将用于容器的镜像
  • RUN - 在构建过程中于容器内执行一条命令
  • EXPOSE - 允许外部人员通过特定端口访问该容器
  • CMD - 此命令会在容器启动时加以执行
  • ENV - 在容器内设定一条环境变量值并用于Drone配置

欲了解更多与Dockerfile相关的设置方案,大家可以参阅Docker官方说明文档。

现在我们已经可以利用以下命令进行镜像构建了:

docker build -t my_drone .

整个过程可能需要几分钟。在构建成功后,我们即可利用这套新镜像运行容器系统。

第二步——启动Drone容器

Drone.io需要存储部分信息,因此我们将使用一个SQLite数据库文件。现在创建一个空文件:

touch drone.sqlite

此文件将在容器启动并运行之后接收来自Drone的数据。

Drone的启动方式非常简单,但我们还需要采取其它几个步骤以确保Drone能够访问我们的主机Docker服务器。最便捷的实现办法就是使用一个分卷,将该主机socket文件与容器socket文件的所处位置进行绑定。具体容器启动命令如下:

docker run -d --name="drone-ci" \
-p 8080:8080 \
-v /var/lib/drone/ \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /home/core/droneio/drone.sqlite:/var/lib/drone/drone.sqlite \
my_drone

下面对其内容进行逐一解释:

  • docker run -d –name=”drone-ci” - 在这部分命令中,我们要求Docker在后台运行此容器,这样我们就不必担心在断开SSH会话后其会被关闭了。我们还为其选择了一个友好的名称,drone-ci,这样就可以利用docker命令进行后续管理了。
  • -p 8080:8080 - 这里我们将主机的端口8080与容器的同一端口进行绑定。如此一来,我们能够在容器运行网络之外对Drone接口进行访问。
  • -v /var/lib/drone - 这部分用于设置一个负责容器内存储的分卷。
  • -v /var/run/docker.sock:/var/run/docker.sock - 通过这种方式,我们将允许Drone.io容器控制主机的Docker系统。我们将该容器的Docker UNIX socket文件位置与实际主机的Docker UNIX socket文件位置进行绑定。换言之,我们要求Drone使用主机CoreOS之上的Docker文件,而非Drone所运行之容器内的文件。之所以这样做,是因为该主机已经安装了Docker,而容器却还没有(意味着Docker容器没有运行嵌套安装的Docker)。
  • -v /home/core/droneio/drone.sqlite:/var/lib/drone/drone.sqlite \ - 将之前创建的空存储文件绑定至数据库内的容器,从而保证全部数据都被保存于其中。此文件存在于容器之外,这样我们就可以利用它实现数据恢复,或者以外部方式对该数据库进行修改。
  • my_drone - 我们利用此前构建完成的镜像来运行这套容器。

运行上述命令,一旦出现错误,请认真检查是否创建了该空数据库文件,且全部相关路径都得到正确输入。

为了确保容器处于运行状态,我们可以进行快速状态检查:

docker ps

输出结果应如下所示:

CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                             NAMES
6eddddd09900        my_drone:latest    "/bin/sh -c '/usr/lo   1 seconds ago       Up 1 seconds        0.0.0.0:8080-&gt;8080/tcp            drone-ci
我的容器无法正常启动!

如果大家运行docker ps但却得不到任何返回结果,请首先确保输入内容全部正确。另外,大家也可以尝试不换行的命令运行方式。另外,确保我们在正确的目录中创建了drone.sqlite空文件。

为了重构容器并再次尝试,我们需要从Docker当中移除故障容器; 否则,其可能引发容器重复命名错误。

利用docker rm drone-ci移除旧容器(注意,我们使用的为此前在命令中包含的容器名称)。随后,尝试运行上一节中提到的“长度惊人”的docker run命令。

如果容器正常启动,但大家无法访问其安装页面,那么可尝试进行重启。使用docker stop drone-ci命令停止容器运行。或者使用docker kill drone-ci命令更为激进地关闭其进程。之后,利用docker start drone-ci命令进行重启。

如果大家需要查阅容器日志信息,可以使用Docker的log命令:

docker logs drone-ci.

第三步——设置Drone

现在我们已经可以利用初始账户设置Drone了。打开网络浏览器并导航至http://YOUR_DROPLET_IP:8080/login。登录界面如下所示:

我们只看到了GitHub,因为它是我们惟一在Dockerfile中设定过的服务。

现在点击GitHub按钮,而后是Authorize application按钮以启动登录与同步流程。

这时我们看到的为Drone主仪表板,大家可以发现GitHub账户中的最近三套库,点击“BROWSE ALL”即可释放完整列表。如果所有库都未能正常显示,请直接点击右上方的“SYNC”。

仪表板的其它功能亦易于上手,大家可以随意尝试。

下面我们需要允许其访问自己的各Git库源。

第五步——从GitHub处获取builds

找到需要添加至Drone CI的库名称并选定。这步操作将激活Drone并向库内添加webhooks。

激活之后,大家会看到空白的库状态页面:

我们可以利用右上方的按钮了解更多高级设置选项。

.drone.yml文件

我们需要在库内建立一个名为.drone.yml的新文件。此文件用于指挥Drone并告知其如何构建并测试GitHub库中的代码。我们可以利用以下方式轻松测试Drone是否设置妥当。

image: dockerfile/nginx
script:
- echo hello world
  • image负责定义我们作为提取源的基础镜像(该镜像可来自公共Docker注册表、专有注册表或者本地构建)。在本示例中,我们使用Nginx镜像。
  • script负责定义Drone需要执行的命令以及执行顺序。大家可以在这里定义多条脚本命令。

  • <具体命令>另起一行(注意进行标签排列)。

此脚本会echo“hello world”以验证Drone处于工作状态。其不会对代码进行任何实际测试。

在实际构建与测试场景当中,大家可能希望让Drone使用Docker镜像以配合现有生产环境,同时需要上述脚本测试库中的代码。

现在将.drone.yml文件提交至库中。大家进行的全部提交操作(包含任何文件)都将触发库中的webhook Drone。到这里,Drone应该已经开始从基础镜像中提取任务并根据脚本运行命令了。

Drone将检测这一新的提交内容,克隆任何与代码相关的变更,而后根据.drone.yml文件中的定义指令进行操作。其将在页面底部显示通知,提醒大家该build正在运行——点击即可查看build状态页面。

整个构建工作大概需要几分钟时间,因为Drone需要从Docker公共注册表内获取镜像。

当构建流程完成后,大家可以点击对应提交以查看更多细节信息。具体内容如下所示:

$ git clone --depth=50 --recursive --branch=master git://github.com/captainshar/dronetest.git /var/cache/drone/src/github.com/captainshar/dronetest
$ git checkout -qf 9908588ae4e4abcba8afb5029baad5c49a835ba4
$ echo hello world
hello world
$ exit 0

大家可能还会看到几条与Perl相关的警示信息——忽略即可。

完成了以上几个步骤后,现在大家已经拥有自己的个人Drone.io工作程序了,其能够构建并测试基于几乎任何语言的项目!

Drone还支持Bithucket与GitLab,而利用oAuth进行的设置流程与GitHub基本一致。大家可能需要编辑Dockerfile并利用正确的环境变更对该容器进行重构:

DRONE_BITBUCKET_CLIENT
DRONE_BITBUCKET_SECRET
DRONE_GITLAB_URL
...

下一步

现在大家已经拥有了能够运行builds的Drone,并可以修改.drone.yml文件以实现更多高级测试。

举例来说,如果大家希望利用Karma或者Mocha等测试架构对一款Node应用进行测试,则可将image部分变更为官方node image,并将script部分变更为执行npm并运行测试。具体内容请参阅Docker注册表以了解适合自己应用需求的具体作法。

如果大家希望玩点更高深的,也可以参阅Drone Wall了解如何为全部build状态建立一套统一的显示面板。

祝各位的Drone之旅一路顺风!

本文来源自DigitalOcean Community。英文原文:How To Perform Continuous Integration Testing with Drone.io on CoreOS and Docker By Aaron Shea

翻译:diradw

drone的简单使用 持续部署是能以自动化方式,频繁而且持续性的,将软件部署到生产环境。使软件产品能够快速迭代。平常部署项目时,都是手动进行部署,流程如下fill:#333;color:#333;color:#333;fill:none;push代码到git服务器上拉取代码使用代码打包镜像推送镜像仓库服务器拉取新镜像停止和移除旧容器启动新容器这一整套部署步骤枯燥又费时。持续部署就是使用工具自动处理整套步骤。代码在提交之后自动执行整套流程将项目部署到生产环境,省去繁琐的人工操作。 阅读详情

相关推荐

Jenkins 学习总结(9)—— Jenkins 有哪些替代方案?

前言 Jenkins 是目前最常用的持续集成工具,拥有近 50% 的市场份额,它还是很多技术团队的第一个使用的自动化工具。但是随着自动化领域的持续发展,Jenkins 逐渐暴露出了一些问题,例如缺乏功能、维护问题、依赖关系和扩展问题等等。这些问题促使我们寻找替代方法。这就是为什么在本文中,我们提供了用于持续集成的最常见的Jenkins替代品列表。 1. BuildMaster Buildmasters是由Inedo研发的Jenkins替代品,它可以使开发者把软件发布到任何环境。该工具为不同的平台提

科技D人生 1168

Drone工具评测

Drone工具评测

m0_46230129的博客 1235

Drone入门到精通

Drone是一个基于容器的现代化持续集成(CI)和持续交付(CD)平台。它采用Go语言开发,具有轻量级、易安装配置、启动快且资源占用少的特点。Drone通过YAML文件进行配置管理,支持多级管道,使得复杂的构建流程得以有序执行。同时,它还提供了丰富的插件系统,满足各种定制化需求。

小杨同学的博客 987

Drone学习总结

Drone学习总结 Drone实现原理 Drone中测试执行过程 Cloud Drone测试 配置OAuth 生成Client ID和Client Secret 配置Application信息 使用github账户登录cloud.drone.io,确认授权 激活需要与drone集成的库 ...

shuizhongmose的专栏 2139

drone-io:简单的GolangVueJS项目来试用Drone CI

无人驾驶飞机 简单的Golang / VueJS项目即可试用Drone CI。

drone-golang:从 Drone.io 发布 golang 项目示例

用于 golang 的 Drone.io 这是从发布 golang 项目的。 获取源代码 运行测试 发送测试覆盖由 由交叉编译 通过二进制文件发布到 Github 发布 配置 在设置选项卡中的drone.io 中的命令上粘贴以下代码, COVERALLS_TOKEN在环境变量上设置GITHUB_TOKEN 、 COVERALLS_TOKEN : # Install go 1.3.1 pushd ~ / curl -s -o go.tar.gz https://storage.googleapis.com/golang/go1.3.1.linux-amd64.tar.gz tar xzf go.tar.gz export GOROOT= ~ /go export PATH= $GOROOT /bin: $PATH go version popd # Get source code

都 2021 年了,你还在用 Jenkins ?赶快看看这些替代方案吧!

点击下方公众号「关注」和「星标」回复“1024”获取独家整理的学习资料!Jenkins 是目前最常用的持续集成工具,拥有近 50% 的市场份额,它还是很多技术团队的第一个使用的自动化工具。...

民工哥的博客 1683

DIY天文摄影:如何用NMP溶剂安全去除佳能CMOS传感器的拜耳滤镜(附详细步骤)

本文为天文摄影爱好者提供了一份详尽的DIY指南,介绍如何使用NMP溶剂安全去除佳能CMOS传感器的拜耳滤镜,将其改造为高灵敏度单色相机。文章深入剖析了NMP溶剂的作用原理与关键风险,并系统性地拆解了从材料准备、分步操作到后期验证的完整实践流程,旨在帮助具备动手能力的爱好者实现深空天体摄影的进阶目标。

w3x4y的博客 310

drone + docker

drone.yml文件编写 中文:https://blog.csdn.net/kikajack/article/details/80503786 官网:https://docs.drone.io/pipeline/docker/syntax/cloning/ ------------------------------drone文件编写 1.字段冒号后面要有一个空格,没有解析错误,可能是为了和内容信息中:区分开来 2. type: runner的type,如docker, kubernetes,ex.

xiaoxiaoyu85的专栏 1148

学习笔记--在线强化学习、离线强化学习、连续强化学习的区别(4)

在连续强化学习中,状态和动作都是连续的,这意味着智能体可以采取无限数量的动作,并且状态空间是连续的,而不是离散的点。- 策略评估和模型选择:在离线学习中,如何有效地评估不同策略和模型的性能,是一个重要的研究问题。- 连续学习和迁移学习:在线学习中,学习者需要不断在不同任务和环境中学习,研究者致力于研究如何将之前学到的知识迁移到新任务中,以实现更高效的学习和决策。- 连续动作选择和优化:在连续动作空间中,智能体对动作的选择是无限的,研究者在连续强化学习中通常关注如何有效地选择连续动作,以达到最优决策策略。

hzlalb的博客 3602

西电微原课设——矩阵式键盘数字密码锁设计

内容要求:根据设定好的密码,采用4x4矩阵键盘实现密码的输入功能。当密码输入正确之后,锁就打开(绿灯亮),10秒之后,锁自动关闭(红灯亮);如果连续输入三次密码不正确,就锁定按键5秒钟,同时发出报警(黄灯闪),5秒后,解除按键锁定,恢复密码输入。...

Polaris的博客 1万+

十大基于Docker的开发工具

随着Docker的发展,Docker的生态圈也越来越成熟,GitHub上出现了很多与Docker相关的开源项目。CenturyLink在其博客上总结了基于Docker的10个开发工具,主要集中在PaaS平台、集群管理、持续集成和Docker的管理工具等四个方面。InfoQ中文站在其基础上进行了整理更新,具体如下。 FlynnFlynn是一个使用Go语言编写的开源PaaS平台,Flynn使...

轻耘智科技CTO 尤胜荣 的专栏 245

大话西游2经典单机版V8:一键架设+GM全功能+仙玉自由修改

本文详细介绍大话西游2经典单机版V8的一键架设教程和GM全功能使用指南,包括仙玉自由修改技巧。该版本无需虚拟机,解压即玩,完美还原官服经典玩法,支持离线运行,是老玩家重温经典和新玩家体验游戏的理想选择。

weixin_27303545的博客 1135

Kubernetes 与云原生 2017 年年终总结及 2018 年展望

云计算技术发展至今已经 10 多个年头,从最开始的硬件虚拟化、IaaS、OpenStack、PaaS、容器化一路演进到 Serverless,技术栈越来越接近应用逻辑。容器实现了应用的分装,方便了应用在不同环境间的迁移,轻量级的特性又使它能够消耗更少的资源而带来更多的便利;但独木难支,容器若只在单节点上运行并不能发挥最大效益,容器编排领域在 2016 年就已成为兵家必争之地。本文以 [Kubern

gitblog_00529的博客 143

DeepStream实战:多路视频AI分析从CPU瓶颈到GPU高吞吐

视频流智能分析在智慧交通和边缘计算中愈发关键,但传统CPU拉流解码加GPU推理的链路,常面临CPU占用过高、GPU利用率低下的窘境。DeepStream作为NVIDIA推出的流式推理框架,基于GStreamer插件生态,以NVMM内存管理让视频数据在GPU侧高效流转,配合NVDEC硬件解码、NvStreamMux多路批处理与TensorRT优化,大幅降低CPU负担并提升多路视频并行吞吐。针对1080p甚至更高分辨率的RTSP流,它能将多路帧汇聚为batch批量推理,从而支撑实时车辆识别、道路分析等生产级应用

weixin_29051245的博客 180

OpenClaw插件开发指南:扩展AI智能体的无限可能

OpenClaw插件开发指南介绍了如何扩展AI智能体的功能。该插件系统支持多种类型(功能、集成、工具、界面、工作流插件),具有模块化、低耦合等优势。开发环境需要安装SDK和工具包,通过plugin.json配置插件信息,主文件实现核心功能。API提供智能体管理、任务执行等接口,示例演示了文本处理插件的创建流程。开发者可基于此框架灵活扩展OpenClaw的能力。

一键难忘的博客 562

使用Docker安装Drone和Gogs实现自动化部署

Drone是基于GO语言开发的持续集成(Continuous integration,CI)引擎,它可以借助Docker容器技术,用于自动化测试与构建,满足持续交付的基本需求,适合小团队开发。Drone具有简洁、轻量级、启动快、资源占用等特点。Jenkins也是CI引擎,它的特点是文档丰富、功能丰富、插件丰富、配置功能强大等特点,但资源占用较高。Drone比Jenkins轻量级,对云原生支持较好。# 官方网址:Gogs是基于GO语言开发的代码仓库管理系统。

make_progress的博客 4242

Silly Tavern酒馆ai角色卡与世界书导入超详细教程!

前几天,我在设置 Silly Tavern 的时候,想导入一个喜欢的角色卡,结果发现不少朋友其实已经下载好了角色资源,但却不知道怎么正确导入使用。这篇文章就作为一份完整的新手向教程,一步步教你如何在 Silly Tavern 中导入角色卡、世界书,并实现与 AI 角色的真实互动。如果你是第一次接触这个功能,建议先收藏慢慢看~点击菜单栏上的 图标,打开角色界面。初始状态下,你应该只看到默认角色 Seraphina。你可以先点击她的头像尝试聊天,也可以导入自己喜欢的角色。点击导入按钮,选择你下载好的角色卡(通

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2万+

Drone.io轻量级CI:适合中小团队的持续集成方案

Drone 使用.drone.ymlsteps:commands:settings:该配置文件具备以下特点:声明式语法:明确表达“做什么”,而非“如何做”模块化组织:支持stepsservicesvolumes等语义化结构条件触发:可基于分支、事件类型(push/tag)动态执行不同流程简单、快速、可控、低成本。“不是每个项目都需要航空母舰,一艘快艇往往更能穿越近海。通过本文的分析可以看出:- 在部署成本上,Drone 几乎零门槛;- 在维护负担。

weixin_42611310的博客 782

Calibre :Standard Verification Rule Format(SVRF) Manual (1-2)

摘要:SVRF规则文件是用于Calibre和ICverify工具的脚本文件,包含层定义、规则检查、注释、预处理指令等元素。规则文件支持全局/局部层定义、隐式层操作,以及条件编译指令(#DEFINE/#IFDEF等)。宏功能(DMACRO/CMACRO)可实现代码复用,支持参数化层操作和嵌套调用。预处理指令支持版本控制(#IFDEFCALIBRE_VERSION)和环境变量默认值设置(#PRAGMAENV)。宏中的层名具有局部作用域,可通过特殊语法实现全局层名指定,LOCAL()修饰符可创建调用作用域内的唯一

u013620135的博客 1347

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Drone - 安装,搭配 GitLab 下的配置和使用

参考资料: Drone 官网地址:https://drone.io Drone 的 GitHub 地址:https://github.com/drone/drone 简介:https://imnerd.org/drone.html Drone 是一个基于 Docker 的持续部署系统,用 Go 语言编写。Drone 本身和所有插件都是镜像,易于使用。 安装 通过 docker-comp...

kikajack的博客 7527

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

我的第一款 Drone 插件

女主宣言本文的作者为奇舞团前端工程师怡红公子,他是高人气开源博客平台 Firekylin (over 1.2k Stars) 的作者,今天他分享的是基于 Nodejs 编写一个 Telegram 消息通知的 Drone.io 插件。本文最先发布于怡红院落,转载已获取作者授权。PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!前言Drone 是一款基于 Docker 的

HULK一线技术杂谈 1862

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Drone+Gitee自动执行构建、测试和发布工作流

Drone+Gitee实现推送代码自动执行构建、测试和发布工作流

m0_69594200的博客 1291

drone1.0 和 drone0.8安装教程

drone 简介 drone是基于docker技术的CI/CD系统,Drone将编译/测试的流程都在docker容器内进行.开发者需要在项目中包含.drone.yml文件,将代码推送到git仓库,drone就能够自动化的进行编译/测试/发布. drone 属于DevOps工具,开发/测试/部署,devops有Jenkins/Drone/Gitlab CI/CD. 为什么不选择Jenkins,是因为...

飞剑神 4843
上一篇: 在Ubuntu 14.04的生产环境上部署一个Symfony应用
下一篇: 在CentOS 7上通过Apache和mod_wsgi运行Django应用
普通网友
博客等级 码龄10年 769粉丝 269原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值