先週、頭痛に見舞われました。完全に調整されたLingo.dev Githubアクションワークフローは、寄稿者のGitLabインスタンスで実行できませんでした。それから私は、プラットフォームに関係なく、どこでも同じ自動化を実行したいと本当に気づきました。
それで、私はGitHub、Gitlab、およびBitbucketで実行されるクロスプラットフォームCIオートメーションを構築するための探求に進みました(そして、おそらく他のものも!)。ソリューションは単純なGitHubアクションとして始まりましたが、複数のコードホスティングプラットフォームをサポートする必要がある場合、より強力なものに進化しました。正確なプロセスについて説明します:
tl; drテンプレートリポジトリを参照してください???
GitHubアクションを実行します1. Simpleの開始:GitHubアクションでJavaScriptを実行します
Workflowファイルを作成します。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
リポジトリをチェックしてください
console.log("Hello World");
name: "Hello World Action" description: "A simple action that says hello" runs: using: "node20" main: "index.js"
アクションは、独自のリポジトリ
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
その他のリポジトリは、使用を使用してそれを参照できます
パッケージを更新して、ビルドスクリプトを追加してください:
pnpm init # Creates package.json pnpm add -D typescript # Install TypeScript as dev dependency
その後、index.jsをindex.tsに変更して、javascriptの代わりにtypescriptを使用し、srcディレクトリに移動します。
{ "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デスクトップアプリが必要です。次に、Dockerがローカルで実行されていると仮定すると、:
console.log("Hello World");
name: "Hello World Action" description: "A simple action that says hello" runs: using: "node20" main: "index.js"
今では、最も興味深い部分が登場します - 他のプラットフォームでアクションを実行します。必要なのは
です最初に、すべてのリリースでDocker画像を構築およびプッシュするワークフローを作成します。 GitHub(Public Repositories用は無料、無料プランのプライベートリポジトリ用500MB)に付属のGitHub Containerレジストリ(GHCR)を使用します。
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
pnpm init # Creates package.json pnpm add -D typescript # Install TypeScript as dev dependency
Githubの無料プランは、3つのプラットフォーム間で最も寛大なCI/CD分の割り当てを提供します。含まれています:
公開リポジトリの無制限の議事録
{ "scripts": { "build": "tsc" } }
BitBucket-Pipelines.ymlを作成します(BitBucket Pipelinesドキュメントを参照):
Bitbucketの無料プランには、リポジトリがパブリックまたはプライベートであるかどうかに関係なく、1か月あたり50分間のビルド分が含まれているため、3つのプラットフォームすべての中で最も低いフリー層になります。
{ "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画像をサポートする任意のプラットフォームでこれを実行できます。これは次のとおりです
travis ci(docs)
CIプラットフォームでWebおよびモバイルアプリの自動Lingo.DEVローカリゼーションを実行するアクションを構築しました。コミットごとに、Lingo.devローカリゼーションエンジンを使用してリポジトリ全体の翻訳を更新します - 新しいコミットとして、またはプルリクエスト(docs)を開くことによって。
githubの例:
console.log("Hello World");
? ボーナス:テンプレートリポジトリ
https://github.com/mathio/awesome-action-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ログイン後にコピーログイン後にコピーログイン後にコピー結論 シンプルなシェルベースのGitHubアクションから、どこでも実行できる洗練されたタイプスクリプトアクションに進化する方法を見てきました。重要なポイントは次のとおりです
アクションを作成して、ポータブルにします
以上がDockerを使用してクロスプラットフォームCI/CDアクションを構築しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。