CircleCI Config SDK 試してみる
これ
Introducing the CircleCI Config SDK | CircleCI
概要
新しいCircleCI Config SDKがオープンソースのTypeScriptライブラリとして利用できるようになったことをお知らせします。開発者はTypeScriptとJavaScriptを使用してCircleCI config.ymlファイルを書き、管理できるようになりました。
本格的なプログラミング言語のエコシステムと柔軟性に慣れている開発者にとって、YAMLは制限や威圧感を感じることがあります。Config SDK を使えば、タイプセーフでアノテーションされた JavaScript から YAML 設定を定義し、生成することができます。パッケージ管理を利用して、設定コードの一部をモジュール化し、再利用することも可能です。
CircleCIのdynamic configと組み合わせることで、Config SDKは実行時にconfigを動的に構築し、Gitリポジトリの状態や外部API、あるいは曜日など、さまざまな要因に基づいて実行する内容を選択できるようになります。
Getting started
この例では、同じフレームワークを使用して構築され、一般に同じCI設定を必要とする複数のNode.jsプロジェクトを管理することを想定しています。そこで、すべてのプロジェクトが使用し、一元的に管理および更新できる設定「テンプレート」を構築することにしました。すべてのNodeプロジェクトのための完璧な設定ファイルを生成するNPMパッケージを作成し、公開することにします。
config template パッケージをビルドし、それを使用するパイプラインをビルドしてみましょう。
セットアップ
ローカルでnpmパッケージを作る。
この例ではJSを用いる模様。
npm init -y
npm i @circleci/circleci-config-sdk
circleci/circleci-config-sdk パッケージを使うと、JavaScript で CircleCI の config ファイルを定義することができるようになります。単純にコンフィグを定義してエクスポートすることもできますが、ダイナミックコンフィグを利用して、代わりに関数をエクスポートすることもできます。この例では、シンプルに、デプロイのためのタグパラメータと、設定ファイルをエクスポートする場所を選択するためのパスパラメータを受け取る設定生成関数を作成することにします。
Create the app
index.jsを作成し、CircleCI Config SDKパッケージとNodeのfsパッケージをインポートして、コンフィグをファイルに書き出せるようにします。
const CircleCI = require("@circleci/circleci-config-sdk");
const fs = require('fs');
次に、Config SDKを使用して、設定ファイルのコンポーネントの構築を開始します。TypeScriptベースのライブラリを使用しているため、コードヒント、型定義、ドキュメント、自動補完を受け取ることができることにお気づきでしょう。
このブログのGetting Started、一元管理できる「テンプレート」の作成を目的としてるからnpmパッケージをpublishしたりと正直重い。
初めはもっと簡単なので良いと思うんだけど
リポジトリのExampleがシンプルでわかりやすい。
const CircleCI = require('@circleci/circleci-config-sdk');
// Instantiate new Config
const myConfig = new CircleCI.Config();
// Create new Workflow
const myWorkflow = new CircleCI.Workflow('myWorkflow');
myConfig.addWorkflow(myWorkflow);
// Create an executor instance
// Executors are used directly in jobs
// and do not need to be added to the config separately
const nodeExecutor = new CircleCI.executors.DockerExecutor('cimg/node:lts');
// Create Job and add it to the config
const nodeTestJob = new CircleCI.Job('node-test', nodeExecutor);
myConfig.addJob(nodeTestJob);
// Add steps to job
nodeTestJob
.addStep(new CircleCI.commands.Checkout())
.addStep(
new CircleCI.commands.Run({
command: 'npm install',
name: 'NPM Install',
}),
)
.addStep(
new CircleCI.commands.Run({
command: 'npm run test',
name: 'Run tests',
}),
);
// Add Jobs to Workflow
myWorkflow.addJob(nodeTestJob);
// The `stringify()` function on `CircleCI.Config` will return the CircleCI YAML equivalent.
const MyYamlConfig = myConfig.stringify();
console.log(MyYamlConfig); // 追加
実行結果
# This configuration has been automatically generated by the CircleCI Config SDK.
# For more information, see https://github.com/CircleCI-Public/circleci-config-sdk-ts
# SDK Version: 0.0.0-development
version: 2.1
setup: false
jobs:
node-test:
docker:
- image: cimg/node:lts
resource_class: medium
steps:
- checkout
- run:
command: npm install
name: NPM Install
- run:
command: npm run test
name: Run tests
workflows:
myWorkflow:
jobs:
- node-test
こういうのはやっぱ宣言的に書きたいなとなって途中で投げてしまった。
kesinさんが良いスクラップを作ってくれてたので、こちらを見てください。
CircleCI Config SDKの学習と感想