上週,我被頭痛擊中 - 我們完美調整的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中文網其他相關文章!