上周,我被头痛击中 - 我们完美调整的lingo.dev github Actions Workflow无法在贡献者的gitlab实例上运行。然后,我意识到,无论平台如何,我实际上都想在任何地方运行相同的自动化。
>因此,我进行了一个任务,以构建在Github,Gitlab和Bitbucket上运行的跨平台CI自动化(也可能还有其他!)。该解决方案最初是一种简单的github操作,但在我们需要支持多个代码托管平台时发展成为功能更强大的东西。
我将带您完成确切的过程:开始简单,我将展示GitHub Action的工作
升级以构建可重复使用的docker image
>最后,我将向您展示如何在每个平台上运行此操作
1。启动简单:在github操作中运行javascript
运行github动作>让我们从最简单的github操作开始 - 一个运行JavaScript文件的操作。首先,在您的存储库的根部创建index.js:
这个动作将:
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环境
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打字稿操作
>更新您的软件包。
pnpm init # Creates package.json pnpm add -D typescript # Install TypeScript as dev dependency
{ "scripts": { "build": "tsc" } }
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
>要在本地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"
现在是最有趣的部分 - 在其他平台上运行您的操作。我们需要:
首先,创建一个工作流程以在每个版本上构建和推动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/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分钟分配。它包括:
{ "scripts": { "build": "tsc" } }
Bitbucket管道
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的任何平台上运行此图像。这是由:
支持的travis ci(docs)
>我们在任何CI平台上为您的Web和移动应用程序运行自动lingo.DEV本地化。在每个提交中,它都使用lingo.dev本地化引擎更新整个存储库中的翻译 - 作为新提交或通过打开拉请请求(DOCS)。
github的示例:
console.log("Hello World");
>
? 奖励:模板存储库>
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动作发展到可以在任何地方运行的复杂的打字稿动作。关键要点是:
dockerize您的操作以使其可移植
以上是与Docker建造跨平台CI/CD动作的详细内容。更多信息请关注PHP中文网其他相关文章!