Starlark

Updated 2 years ago by Admin

Droneは、yaml構成の代わりにStarlarkスクリプトをサポートします。 Starlarkは、構成言語として使用することを目的としたPythonの派生言語です。この言語は、Bazelビルドツール用にGoogleによって開発されています。

Starlarkは、真のスクリプト言語の恩恵を受ける複雑な構成のプロジェクトを対象としています。


使用法

Starlark構成ファイルを使用するには、システム管理者がDroneサーバのStarlarkサポートを 有効にする必要があります。

gitリポジトリのルートに.drone.starファイルを作成することで、個々のプロジェクトにStarlarkを使用できます。次に、リポジトリ設定画面から、それに応じてリポジトリ構成ファイルを更新します。


構造

Starlarkスクリプトは、スクリプトのmainメソッドから1つまたは複数のパイプラインオブジェクトを返します。パイプラインオブジェクトは、yamlパイプラインと同じ構造を使用します。実際、内部では、返されたオブジェクトは直接yamlドキュメントに変換されます。

Starlarkスクリプトの例:

1  def main(ctx):
2 return {
3 "kind": "pipeline",
4 "name": "build",
5 "steps": [
6 {
7 "name": "build",
8 "image": "alpine",
9 "commands": [
10 "echo hello world"
11 ]
12 }
13 ]
14 }

同等のYaml構成:

1  ---
2 kind: pipeline
3 name: build
4
5 steps:
6 - name: build
7 image: alpine
8 commands:
9 - echo hello world

パイプライン構成を返す構成スクリプトの例を次に示します。返されるパイプラインオブジェクトは、yamlで定義されたパイプラインと同じ構造を使用することに注意してください。

1  def main(ctx):
2 return {
3 "kind": "pipeline",
4 "name": "build",
5 "steps": [
6 {
7 "name": "build",
8 "image": "alpine",
9 "commands": [
10 "echo hello world"
11 ]
12 }
13 ]
14 }

main関数は配列を返すこともできます。以下の例では、amd64用とarm用の2つのパイプラインを作成します。

1  def main(ctx):
2 return [
3 step("amd64"),
4 step("arm64"),
5 ]
6
7 def step(arch):
8 return {
9 "kind": "pipeline",
10 "name": "build-%s" % arch,
11 "steps": [
12 {
13 "name": "build",
14 "image": "alpine",
15 "commands": [
16 "echo hello world"
17 ]
18 }
19 ]
20 }

上記の例は、関数とスクリプトを使用して、繰り返しなしで構成を構築する方法も示しています。


環境

Starlarkスクリプトのmainメソッドは、コンテキストパラメータを受け入れます。コンテキストパラメータは、パイプライン構成を動的に構築するために使用できるリポジトリとビルドメタデータへのアクセスを提供します。

1  def main(ctx):
2 if ctx.build.event == "tag":
3 return pipeline_for_release(ctx)
4 else:
5 return pipeline(ctx)

triggerスタンザを使用してパイプラインオブジェクトを作成whenスタンザを使用してパイプラインステップを作成できることに注意してください。


ツーリング

コマンドラインツールを使用して、Starlark構成ファイルをyamlに自動的に変換できます。これは、ローカルテストに役立ちます。

$ drone starlark convert --stdout

kind: pipeline
name: default

steps:
- name: build
image: alpine
commands: [ echo hello world ]


How did we do?