Closed10

CircleCI Config SDK 試してみる

Futa HirakobaFuta Hirakoba

これ

Introducing the CircleCI Config SDK | CircleCI
https://circleci.com/blog/config-sdk/

Futa HirakobaFuta Hirakoba

概要

新しいCircleCI Config SDKがオープンソースのTypeScriptライブラリとして利用できるようになったことをお知らせします。開発者はTypeScriptとJavaScriptを使用してCircleCI config.ymlファイルを書き、管理できるようになりました。

本格的なプログラミング言語のエコシステムと柔軟性に慣れている開発者にとって、YAMLは制限や威圧感を感じることがあります。Config SDK を使えば、タイプセーフでアノテーションされた JavaScript から YAML 設定を定義し、生成することができます。パッケージ管理を利用して、設定コードの一部をモジュール化し、再利用することも可能です。

CircleCIのdynamic configと組み合わせることで、Config SDKは実行時にconfigを動的に構築し、Gitリポジトリの状態や外部API、あるいは曜日など、さまざまな要因に基づいて実行する内容を選択できるようになります。

Futa HirakobaFuta Hirakoba

Getting started

この例では、同じフレームワークを使用して構築され、一般に同じCI設定を必要とする複数のNode.jsプロジェクトを管理することを想定しています。そこで、すべてのプロジェクトが使用し、一元的に管理および更新できる設定「テンプレート」を構築することにしました。すべてのNodeプロジェクトのための完璧な設定ファイルを生成するNPMパッケージを作成し、公開することにします。

config template パッケージをビルドし、それを使用するパイプラインをビルドしてみましょう。

Futa HirakobaFuta Hirakoba

セットアップ

ローカルでnpmパッケージを作る。
この例ではJSを用いる模様。

Futa HirakobaFuta Hirakoba

circleci/circleci-config-sdk パッケージを使うと、JavaScript で CircleCI の config ファイルを定義することができるようになります。単純にコンフィグを定義してエクスポートすることもできますが、ダイナミックコンフィグを利用して、代わりに関数をエクスポートすることもできます。この例では、シンプルに、デプロイのためのタグパラメータと、設定ファイルをエクスポートする場所を選択するためのパスパラメータを受け取る設定生成関数を作成することにします。

Futa HirakobaFuta Hirakoba

Create the app

index.jsを作成し、CircleCI Config SDKパッケージとNodeのfsパッケージをインポートして、コンフィグをファイルに書き出せるようにします。

const CircleCI = require("@circleci/circleci-config-sdk");
const fs = require('fs');

次に、Config SDKを使用して、設定ファイルのコンポーネントの構築を開始します。TypeScriptベースのライブラリを使用しているため、コードヒント、型定義、ドキュメント、自動補完を受け取ることができることにお気づきでしょう。

Futa HirakobaFuta Hirakoba

このブログのGetting Started、一元管理できる「テンプレート」の作成を目的としてるからnpmパッケージをpublishしたりと正直重い。

初めはもっと簡単なので良いと思うんだけど

Futa HirakobaFuta Hirakoba

リポジトリのExampleがシンプルでわかりやすい。
https://github.com/CircleCI-Public/circleci-config-sdk-ts/tree/d9db6697630ca78bccc73a18180f00412f87c5e3

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
このスクラップは2022/10/11にクローズされました