目录
create bitbucket-pipelines.yml(请参阅Bitbucket Pipeelines文档):
首页 web前端 js教程 与Docker建造跨平台CI/CD动作

与Docker建造跨平台CI/CD动作

Jan 30, 2025 am 12:31 AM

上周,我被头痛击中 - 我们完美调整的lingo.dev github Actions Workflow无法在贡献者的gitlab实例上运行。然后,我意识到,无论平台如何,我实际上都想在任何地方运行相同的自动化。

>因此,我进行了一个任务,以构建在Github,Gitlab和Bitbucket上运行的跨平台CI自动化(也可能还有其他!)。该解决方案最初是一种简单的github操作,但在我们需要支持多个代码托管平台时发展成为功能更强大的东西。 Building Cross-Platform CI/CD Actions with Docker

我将带您完成确切的过程:

开始简单,我将展示GitHub Action的工作

升级以构建可重复使用的docker image

>最后,我将向您展示如何在每个平台上运行此操作
  1. >按照步骤构建和运送您的第一个跨平台动作。或为文章添加书签以
  2. 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环境

    运行脚本
  1. 使其可重复使用
  2. 现在,让我们通过将其移动到单独的存储库来重复使用此操作。使用这些文件创建一个新的github存储库(例如,像我的示例一样hello-world-action):
  3. index.js(与之前相同):

Action.yml:

  1. >现在您可以通过在工作流中引用任何存储库中的此操作:>
console.log("Hello World");

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
    关键差异是:
动作以自己的存储库生活
name: "Hello World Action"
description: "A simple action that says hello"
runs:
  using: "node20"
  main: "index.js"

登录后复制
登录后复制
Action.yml定义如何运行动作


其他存储库可以使用以下用途来引用它: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打字稿操作

    现在,让我们创建一个更复杂的操作,以运行打字稿代码。我们需要几个文件:
  1. >初始化项目并设置打字稿:

>更新您的软件包。

  1. 然后,将我们的index.js重命名为index.ts使用Typescript代替JavaScript并将其移动到SRC目录。


    pnpm init                # Creates package.json
    pnpm add -D typescript   # Install TypeScript as dev dependency
    
    
    登录后复制
    登录后复制
    >创建tsconfig.json以配置打字稿汇编:>

  2. 创建一个dockerfile:
    {
      "scripts": {
        "build": "tsc"
      }
    }
    
    
    登录后复制
    登录后复制
console.log("Hello World");

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  1. >重新定义动作中的动作: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在本地运行,您可以:

  1. 构建图像:
console.log("Hello World");

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  1. >运行它:
name: "Hello World Action"
description: "A simple action that says hello"
runs:
  using: "node20"
  main: "index.js"

登录后复制
登录后复制

3。跨平台支持

现在是最有趣的部分 - 在其他平台上运行您的操作。我们需要:

  1. >构建并将我们的Docker图像推到注册表
  2. >
  3. >用平台特定的配置引用它

建筑和出版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分钟
GitLab CI配置

create .gitlab-ci.yml(请参阅Gitlab CI/CD文档):>


>您的gitlab免费计划包括每月400 CI/C的计算分钟,无论存储库是公共的还是私人的。
{
  "scripts": {
    "build": "tsc"
  }
}

登录后复制
登录后复制
>

Bitbucket管道

create bitbucket-pipelines.yml(请参阅Bitbucket Pipeelines文档):


Bitbucket的免费计划每月仅包括50分钟的构建分钟,而不管存储库是公共还是私人,这使其成为所有三个平台中最低的免费层。

其他CI/CD平台
{
  "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

?提示:克隆回购,使其成为您自己动作的起点:

…或者只是从我的模板中创建一个新的存储库。
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

登录后复制
登录后复制
登录后复制
然后,只需在src/index.ts文件中实现自己的操作逻辑。

结论

>我们已经看到了如何从简单的基于壳的github动作发展到可以在任何地方运行的复杂的打字稿动作。关键要点是:

启动Simple从Shell命令开始,以验证您的自动化逻辑

dockerize您的操作以使其可移植
  1. >使用容器注册表在平台上分发您的操作
  2. >在保持docker中的核心逻辑时,调整每个平台的配置
  3. 这种方法使您可以灵活地在维护单个代码库的同时,在任何地方运行自动化。快乐自动化!
  4. >我偶尔在Twitter上发布有关技术内容和新的lingo.dev功能的信息 @Mathio28。让我们保持联系。
>

以上是与Docker建造跨平台CI/CD动作的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

前端热敏纸小票打印遇到乱码问题怎么办? 前端热敏纸小票打印遇到乱码问题怎么办? Apr 04, 2025 pm 02:42 PM

前端热敏纸小票打印的常见问题与解决方案在前端开发中,小票打印是一个常见的需求。然而,很多开发者在实...

神秘的JavaScript:它的作用以及为什么重要 神秘的JavaScript:它的作用以及为什么重要 Apr 09, 2025 am 12:07 AM

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

谁得到更多的Python或JavaScript? 谁得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

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

JavaScript难以学习吗? JavaScript难以学习吗? Apr 03, 2025 am 12:20 AM

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

如何实现视差滚动和元素动画效果,像资生堂官网那样?
或者:
怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? 如何实现视差滚动和元素动画效果,像资生堂官网那样? 或者: 怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? Apr 04, 2025 pm 05:36 PM

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

JavaScript的演变:当前的趋势和未来前景 JavaScript的演变:当前的趋势和未来前景 Apr 10, 2025 am 09:33 AM

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

如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? 如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? Apr 04, 2025 pm 05:09 PM

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

console.log输出结果差异:两次调用为何不同? console.log输出结果差异:两次调用为何不同? Apr 04, 2025 pm 05:12 PM

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

See all articles