与Docker建造跨平台CI/CD动作
上周,我被头痛击中 - 我们完美调整的lingo.dev github Actions Workflow无法在贡献者的gitlab实例上运行。然后,我意识到,无论平台如何,我实际上都想在任何地方运行相同的自动化。
>因此,我进行了一个任务,以构建在Github,Gitlab和Bitbucket上运行的跨平台CI自动化(也可能还有其他!)。该解决方案最初是一种简单的github操作,但在我们需要支持多个代码托管平台时发展成为功能更强大的东西。
开始简单,我将展示GitHub Action的工作
升级以构建可重复使用的docker image
>最后,我将向您展示如何在每个平台上运行此操作
- >按照步骤构建和运送您的第一个跨平台动作。或为文章添加书签以
- tl; dr请参阅模板存储库???
1。启动简单:在github操作中运行javascript
运行github动作>让我们从最简单的github操作开始 - 一个运行JavaScript文件的操作。首先,在您的存储库的根部创建index.js:
现在创建一个工作流文件.github/workflows/hello.yml:
这个动作将:
console.log("Hello World");
触发到主要分支
name: Hello World on: push: branches: - main jobs: hello: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "20" - name: Say Hello run: node index.js
>设置node.js环境
- 运行脚本
- 使其可重复使用 现在,让我们通过将其移动到单独的存储库来重复使用此操作。使用这些文件创建一个新的github存储库(例如,像我的示例一样hello-world-action):
- index.js(与之前相同):
Action.yml:
- >现在您可以通过在工作流中引用任何存储库中的此操作:
console.log("Hello World");
- 关键差异是:
name: "Hello World Action" description: "A simple action that says hello" runs: using: "node20" main: "index.js"
其他存储库可以使用以下用途来引用它:your-username/hello-world-action@ref
name: Use Hello Action on: push: branches: - main jobs: hello: runs-on: ubuntu-latest steps: - name: Say Hello uses: your-username/hello-world-action@main
2。升级:dockerized打字稿操作
- 现在,让我们创建一个更复杂的操作,以运行打字稿代码。我们需要几个文件:
- >初始化项目并设置打字稿:
>更新您的软件包。
-
然后,将我们的index.js重命名为index.ts使用Typescript代替JavaScript并将其移动到SRC目录。
>创建tsconfig.json以配置打字稿汇编:pnpm init # Creates package.json pnpm add -D typescript # Install TypeScript as dev dependency
登录后复制登录后复制> -
{ "scripts": { "build": "tsc" } }
登录后复制登录后复制
console.log("Hello World");
- >重新定义动作中的动作:yml:
name: Hello World on: push: branches: - main jobs: hello: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "20" - name: Say Hello run: node index.js
在本地运行Docker图像
>要在本地dockerfile中构建并运行图像,您需要Docker Desktop应用程序。然后,假设Docker在本地运行,您可以:
- 构建图像:
console.log("Hello World");
- >运行它:
name: "Hello World Action" description: "A simple action that says hello" runs: using: "node20" main: "index.js"
3。跨平台支持
现在是最有趣的部分 - 在其他平台上运行您的操作。我们需要:
- >构建并将我们的Docker图像推到注册表 >
- >用平台特定的配置引用它
建筑和出版Docker图像
首先,创建一个工作流程以在每个版本上构建和推动Docker映像。我们将使用您的github随附的GitHub容器注册表(GHCR)(公共存储库免费,500MB用于免费计划的私人存储库)。
>
name: Use Hello Action on: push: branches: - main jobs: hello: runs-on: ubuntu-latest steps: - name: Say Hello uses: your-username/hello-world-action@main
github动作
要在另一个存储库的github操作中使用此操作,请在.github/workflows/hello..yml中创建一个工作流文件(请参阅GitHub Actions WorkFlow语法文档):
>
pnpm init # Creates package.json pnpm add -D typescript # Install TypeScript as dev dependency
>仅需在github操作上执行此操作,则无需构建和推动Docker映像。 github操作将直接从操作中指定的dockerfile直接构建docker容器。这更有效,因为它避免了推动和从容器注册表中拉出的额外步骤。但是,如果您打算在Gitlab或Bitbucket等其他CI平台上使用此操作,则需要发布如上图所示的Docker映像。
GitHub的免费计划提供了三个平台之间最慷慨的CI/CD分钟分配。它包括:
- >公共存储库的无限分钟
- >私人存储库的每月2,000分钟
create .gitlab-ci.yml(请参阅Gitlab CI/CD文档):
{ "scripts": { "build": "tsc" } }
Bitbucket管道
create bitbucket-pipelines.yml(请参阅Bitbucket Pipeelines文档):
Bitbucket的免费计划每月仅包括50分钟的构建分钟,而不管存储库是公共还是私人,这使其成为所有三个平台中最低的免费层。
{ "compilerOptions": { "target": "ES2022", "module": "commonjs", "outDir": "./build", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "exclude": ["node_modules", "build", "**/*.test.ts"] }
>由于我们在公共Github容器注册表中发布了Docker映像,因此我们可以在支持Docker Images的任何平台上运行此图像。这是由:
支持的circle ci(docs)
travis ci(docs)
- >让我知道如果您在其他地方运行,我对您的用例感到好奇! >
?你能做什么?
>我们在任何CI平台上为您的Web和移动应用程序运行自动lingo.DEV本地化。在每个提交中,它都使用lingo.dev本地化引擎更新整个存储库中的翻译 - 作为新提交或通过打开拉请请求(DOCS)。
github的示例:
console.log("Hello World");
>无论您使用的代码托管平台如何,您都可以构建可重复使用的操作,并轻松地将它们集成到工作流程中。以下是给您的一些想法:
- >跨平台测试记者(编排端到端测试会话)
- 自定义代码质量检查器(考虑格式,覆盖,测试)
- > >发行说明生成器(在您的网站上发布更改式?)
- >
>
? 奖励:模板存储库>如果您不想阅读文章的其余部分,则可以在此处找到带有所有代码的模板入门存储库。它包含动作 - 您可以在github,gitlab和bitbucket上运行它。
>
https://github.com/mathio/awesome-actory-starter
?提示:克隆回购,使其成为您自己动作的起点:…或者只是从我的模板中创建一个新的存储库。
然后,只需在src/index.ts文件中实现自己的操作逻辑。name: Hello World on: push: branches: - main jobs: hello: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "20" - name: Say Hello run: node index.js登录后复制登录后复制登录后复制结论
>我们已经看到了如何从简单的基于壳的github动作发展到可以在任何地方运行的复杂的打字稿动作。关键要点是:
启动Simple从Shell命令开始,以验证您的自动化逻辑
dockerize您的操作以使其可移植
- >使用容器注册表在平台上分发您的操作
- >在保持docker中的核心逻辑时,调整每个平台的配置
- 这种方法使您可以灵活地在维护单个代码库的同时,在任何地方运行自动化。快乐自动化!
- >我偶尔在Twitter上发布有关技术内容和新的lingo.dev功能的信息 @Mathio28。让我们保持联系。
以上是与Docker建造跨平台CI/CD动作的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...
