Minggu lepas saya terkena sakit kepala - aliran kerja Lingo.Dev GitHub yang sempurna tidak dapat dijalankan pada contoh Gitlab penyumbang. Kemudian saya menyedari bahawa saya sebenarnya ingin menjalankan automasi yang sama di mana -mana, tanpa mengira platform.
Jadi saya meneruskan usaha untuk membina automasi CI cross-platform yang berjalan di GitHub, Gitlab, dan Bitbucket (dan mungkin juga yang lain!). Penyelesaian ini bermula sebagai tindakan GitHub yang mudah tetapi berkembang menjadi sesuatu yang lebih kuat apabila kita perlu menyokong pelbagai platform hosting kod.
saya akan membimbing anda melalui proses yang tepat:
Ikuti langkah-langkah untuk membina dan menghantar tindakan silang platform pertama anda. Atau penanda artikel untuk kemudian.
tl; dr melihat repositori templat ???
mari kita mulakan dengan tindakan GitHub yang paling mudah - yang menjalankan fail JavaScript. Pertama, buat indeks.js dalam akar repositori anda:
console.log("Hello World");
Sekarang buat fail aliran kerja .Github/aliran kerja/hello.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
Tindakan ini akan:
Sekarang, mari kita buat tindakan ini boleh diguna semula dengan memindahkannya ke repositori yang berasingan. Buat repositori GitHub baru (mis., Hello-world-action seperti contoh saya di sini) dengan fail-fail ini:
console.log("Hello World");
name: "Hello World Action" description: "A simple action that says hello" runs: using: "node20" main: "index.js"
Sekarang anda boleh menggunakan tindakan ini di mana -mana repositori dengan merujuknya dalam aliran kerja anda:
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
perbezaan utama ialah:
Sekarang, mari kita buat tindakan yang lebih canggih yang menjalankan kod TypeScript. Kami memerlukan beberapa fail:
Inisialisasi projek dan sediakan TypeScript:
pnpm init # Creates package.json pnpm add -D typescript # Install TypeScript as dev dependency
Kemas kini pakej.json anda untuk menambah skrip binaan:
{ "scripts": { "build": "tsc" } }
kemudian menamakan semula index.js kami ke index.ts untuk menggunakan TypeScript dan bukannya JavaScript dan gerakkannya ke direktori SRC.
Buat tsconfig.json untuk mengkonfigurasi kompilasi TypeScript:
{ "compilerOptions": { "target": "ES2022", "module": "commonjs", "outDir": "./build", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "exclude": ["node_modules", "build", "**/*.test.ts"] }
Buat dockerfile:
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
Untuk membina dan menjalankan imej yang ditakrifkan di Dockerfile secara tempatan, anda memerlukan aplikasi desktop Docker. Kemudian, dengan mengandaikan Docker berjalan secara tempatan, anda boleh:
console.log("Hello World");
name: "Hello World Action" description: "A simple action that says hello" runs: using: "node20" main: "index.js"
kini datang bahagian yang paling menarik - menjalankan tindakan anda pada platform lain. Kita perlu:
Pertama, buat aliran kerja untuk membina dan menolak imej Docker pada setiap pelepasan. Kami akan menggunakan GitHub Container Registry (GHCR) yang dilengkapi dengan GitHub anda (percuma untuk repositori awam, 500MB untuk repositori swasta dalam pelan percuma).
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
Untuk menggunakan tindakan ini dalam tindakan github repositori lain, buat fail aliran kerja di .github/aliran kerja/hello.yml (lihat GitHub Actions Workflow Syntax Documentation):
pnpm init # Creates package.json pnpm add -D typescript # Install TypeScript as dev dependency
Jika anda perlu menjalankan tindakan ini pada tindakan GitHub sahaja, tidak perlu membina dan menolak imej Docker. Tindakan GitHub akan membina bekas Docker secara langsung dari Dockerfile yang dinyatakan dalam fail Action.yml anda pada setiap aliran kerja yang dijalankan. Ini lebih cekap kerana ia mengelakkan langkah -langkah tambahan untuk menolak dan menarik dari pendaftaran kontena. Walau bagaimanapun, jika anda merancang untuk menggunakan tindakan ini pada platform CI lain seperti GitLab atau Bitbucket, anda perlu menerbitkan imej Docker seperti yang ditunjukkan di atas.
Pelan percuma Github menawarkan peruntukan minit CI/CD yang paling murah hati di kalangan tiga platform. Ia termasuk:
{ "scripts": { "build": "tsc" } }
Bitbucket Pipelines
{ "compilerOptions": { "target": "ES2022", "module": "commonjs", "outDir": "./build", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "exclude": ["node_modules", "build", "**/*.test.ts"] }
Sejak kami menerbitkan imej Docker kami dalam pendaftaran kontena GitHub awam, kami boleh menjalankan ini di mana -mana platform yang menyokong imej Docker. Ini disokong oleh:
Circle Ci (Docs)
Kami membina tindakan untuk menjalankan lokalisasi lingo.dev automatik untuk aplikasi web dan mudah alih anda di mana -mana platform CI. Pada setiap komit ia mengemas kini terjemahan di seluruh repositori anda menggunakan enjin lokalisasi lingo.dev - sama ada sebagai komit baru atau dengan membuka permintaan tarik (docs).
Contoh untuk GitHub:
console.log("Hello World");
anda boleh membina tindakan yang boleh diguna semula dan mudah mengintegrasikannya ke dalam aliran kerja anda tanpa mengira platform hosting kod yang anda gunakan. Berikut adalah beberapa idea untuk anda:
apa yang akan anda gunakan untuknya?
Jika anda tidak merasa seperti membaca artikel yang lain, anda boleh mencari repositori starter templat dengan semua kod di sini. Ia mengandungi tindakan - anda boleh menjalankannya di GitHub, Gitlab dan Bitbucket.
https://github.com/mathio/awesome-action-starter
? Petua: Klon repo dan jadikannya titik permulaan untuk tindakan anda sendiri:
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.jsSalin selepas log masukSalin selepas log masukSalin selepas log masuk... atau hanya buat repositori baru dari templat saya.
kemudian melaksanakan logik tindakan anda sendiri dalam fail src/index.ts.
Kami telah melihat bagaimana untuk berkembang dari tindakan GitHub berasaskan shell yang mudah ke tindakan typescript yang canggih yang boleh berjalan di mana-mana sahaja. Pengambilan kunci adalah:
Pendekatan ini memberi anda fleksibiliti untuk menjalankan automasi anda di mana -mana sahaja sambil mengekalkan asas kod tunggal. Selamat mengautomasikan!
Atas ialah kandungan terperinci Membina Tindakan CI/CD Cross-Platform dengan Docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!