 .. Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

 ..   http://www.apache.org/licenses/LICENSE-2.0

 .. Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.



Google Cloud Build Operators
============================

The `Google Cloud Build <https://cloud.google.com/cloud-build/>`__ is a service that executes your builds on Google Cloud Platform
infrastructure. Cloud Build can import source code from Google Cloud Storage,
Cloud Source Repositories, execute a build to your specifications, and produce
artifacts such as Docker containers or Java archives.

Prerequisite Tasks
^^^^^^^^^^^^^^^^^^

.. include::/operators/_partials/prerequisite_tasks.rst

.. _howto/operator:CloudBuildCancelBuildOperator:

CloudBuildCancelBuildOperator
-----------------------------

Cancels a build in progress.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildCancelBuildOperator`

Using the operator
^^^^^^^^^^^^^^^^^^

Cancel a build in progress with the
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildCancelBuildOperator` operator.

.. exampleinclude:: ../../../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_cancel_build]
    :end-before: [END howto_operator_cancel_build]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.cloud_build.CloudBuildCancelBuildOperator`
parameters which allows you to dynamically determine values. The result is saved to :ref:`XCom <concepts:xcom>`, which allows it
to be used by other operators.

.. _howto/operator:CloudBuildCreateBuildOperator:

CloudBuildCreateBuildOperator
-----------------------------

Starts a build with the specified configuration. This generated build ID of the created build, as the result of this operator,
is not idempotent.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildCreateBuildOperator`

Build configuration
^^^^^^^^^^^^^^^^^^^

In order to trigger a build, it is necessary to pass the build configuration.


.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 0
    :start-after: [START howto_operator_gcp_create_build_from_storage_body]
    :end-before: [END howto_operator_gcp_create_build_from_storage_body]

In addition, a build can refer to source stored in `Google Cloud Source Repositories <https://cloud.google.com/source-repositories/docs/>`__.

.. exampleinclude:: ../../../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 0
    :start-after: [START howto_operator_create_build_from_repo_body]
    :end-before: [END howto_operator_create_build_from_repo_body]

Read `Build Configuration Overview <https://cloud.google.com/cloud-build/docs/build-config>`__ to understand all the fields you can include in a build config file.

Using the operator
^^^^^^^^^^^^^^^^^^

Trigger a build is performed with the
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildCreateBuildOperator` operator.

.. exampleinclude:: ../../../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_create_build_from_storage]
    :end-before: [END howto_operator_create_build_from_storage]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.cloud_build.CloudBuildCreateBuildOperator`
parameters which allows you to dynamically determine values. The result is saved to :ref:`XCom <concepts:xcom>`, which allows it
to be used by other operators.

.. exampleinclude:: ../../../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_create_build_from_storage_result]
    :end-before: [END howto_operator_create_build_from_storage_result]

By default, after the build is created, it will wait for the build operation to complete. If there is no need to wait for complete,
you can pass wait=False as example shown below.

.. exampleinclude:: ../../../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_create_build_without_wait]
    :end-before: [END howto_operator_create_build_without_wait]

.. _howto/operator:CloudBuildCreateBuildTriggerOperator:

CloudBuildCreateBuildTriggerOperator
------------------------------------

Creates a new Cloud Build trigger. This generated build trigger ID of the created build trigger, as the result of this operator,
is not idempotent.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildCreateBuildTriggerOperator`

Using the operator
^^^^^^^^^^^^^^^^^^

Creates a new Cloud Build trigger with the
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildCreateBuildTriggerOperator` operator.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_create_build_trigger]
    :end-before: [END howto_operator_create_build_trigger]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.cloud_build.CloudBuildCreateBuildTriggerOperator`
parameters which allows you to dynamically determine values. The result is saved to :ref:`XCom <concepts:xcom>`, which allows it
to be used by other operators.

.. _howto/operator:CloudBuildDeleteBuildTriggerOperator:

CloudBuildDeleteBuildTriggerOperator
------------------------------------

Deletes a Cloud Build trigger by its project ID and trigger ID.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildDeleteBuildTriggerOperator`

Using the operator
^^^^^^^^^^^^^^^^^^

Deletes a new Cloud Build trigger with the
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildDeleteBuildTriggerOperator` operator.

.. exampleinclude:: ../../../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_delete_build_trigger]
    :end-before: [END howto_operator_delete_build_trigger]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.cloud_build.CloudBuildDeleteBuildTriggerOperator`
parameters which allows you to dynamically determine values. The result is saved to :ref:`XCom <concepts:xcom>`, which allows it
to be used by other operators.

.. _howto/operator:CloudBuildGetBuildOperator:

CloudBuildGetBuildOperator
--------------------------

Returns information about a previously requested build.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildGetBuildOperator`

Using the operator
^^^^^^^^^^^^^^^^^^

Returns information about a previously requested build with the
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildGetBuildOperator` operator.

.. exampleinclude:: ../../../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_get_build]
    :end-before: [END howto_operator_get_build]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.cloud_build.CloudBuildGetBuildOperator`
parameters which allows you to dynamically determine values. The result is saved to :ref:`XCom <concepts:xcom>`, which allows it
to be used by other operators.

.. _howto/operator:CloudBuildGetBuildTriggerOperator:

CloudBuildGetBuildTriggerOperator
---------------------------------

Returns information about a Cloud Build trigger.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildGetBuildTriggerOperator`

Using the operator
^^^^^^^^^^^^^^^^^^

Returns information about a Cloud Build trigger with the
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildGetBuildTriggerOperator` operator.

.. exampleinclude:: ../../../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_get_build_trigger]
    :end-before: [END howto_operator_get_build_trigger]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.cloud_build.CloudBuildGetBuildTriggerOperator`
parameters which allows you to dynamically determine values. The result is saved to :ref:`XCom <concepts:xcom>`, which allows it
to be used by other operators.

.. _howto/operator:CloudBuildListBuildTriggersOperator:

CloudBuildListBuildTriggersOperator
-----------------------------------

Lists all the existing Cloud Build triggers.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildListBuildTriggersOperator`

Using the operator
^^^^^^^^^^^^^^^^^^

Lists all the existing Cloud Build triggers with the
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildListBuildTriggersOperator` operator.

.. exampleinclude:: ../../../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_list_build_triggers]
    :end-before: [END howto_operator_list_build_triggers]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.cloud_build.CloudBuildListBuildTriggersOperator`
parameters which allows you to dynamically determine values. The result is saved to :ref:`XCom <concepts:xcom>`, which allows it
to be used by other operators.

.. _howto/operator:CloudBuildListBuildsOperator:

CloudBuildListBuildsOperator
----------------------------

Lists previously requested builds.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildListBuildsOperator`

Using the operator
^^^^^^^^^^^^^^^^^^

Lists previously requested builds with the
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildListBuildsOperator` operator.

.. exampleinclude:: ../../../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_list_builds]
    :end-before: [END howto_operator_list_builds]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.cloud_build.CloudBuildListBuildsOperator`
parameters which allows you to dynamically determine values. The result is saved to :ref:`XCom <concepts:xcom>`, which allows it
to be used by other operators.

.. _howto/operator:CloudBuildRetryBuildOperator:

CloudBuildRetryBuildOperator
----------------------------

Creates a new build based on the specified build. This method creates a new build
using the original build request, which may or may not result in an identical build.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildRetryBuildOperator`

Using the operator
^^^^^^^^^^^^^^^^^^

Creates a new build based on the specified build with the
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildRetryBuildOperator` operator.

.. exampleinclude:: ../../../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_retry_build]
    :end-before: [END howto_operator_retry_build]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.cloud_build.CloudBuildRetryBuildOperator`
parameters which allows you to dynamically determine values. The result is saved to :ref:`XCom <concepts:xcom>`, which allows it
to be used by other operators.

.. _howto/operator:CloudBuildRunBuildTriggerOperator:

CloudBuildRunBuildTriggerOperator
---------------------------------

Runs a trigger at a particular source revision.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildRunBuildTriggerOperator`

Using the operator
^^^^^^^^^^^^^^^^^^

Runs a trigger at a particular source revision with the
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildRunBuildTriggerOperator` operator.

.. exampleinclude:: ../../../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_run_build_trigger]
    :end-before: [END howto_operator_run_build_trigger]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.cloud_build.CloudBuildRunBuildTriggerOperator`
parameters which allows you to dynamically determine values. The result is saved to :ref:`XCom <concepts:xcom>`, which allows it
to be used by other operators.

.. _howto/operator:CloudBuildUpdateBuildTriggerOperator:

CloudBuildUpdateBuildTriggerOperator
------------------------------------

Updates a Cloud Build trigger by its project ID and trigger ID.

For parameter definition, take a look at
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildUpdateBuildTriggerOperator`

Using the operator
^^^^^^^^^^^^^^^^^^

Updates a Cloud Build trigger with the
:class:`~airflow.providers.google.cloud.operators.cloud_build.CloudBuildUpdateBuildTriggerOperator` operator.

.. exampleinclude:: ../../../../airflow/providers/google/cloud/example_dags/example_cloud_build.py
    :language: python
    :dedent: 4
    :start-after: [START howto_operator_create_build_trigger]
    :end-before: [END howto_operator_create_build_trigger]

You can use :ref:`Jinja templating <concepts:jinja-templating>` with
:template-fields:`airflow.providers.google.cloud.operators.cloud_build.CloudBuildUpdateBuildTriggerOperator`
parameters which allows you to dynamically determine values. The result is saved to :ref:`XCom <concepts:xcom>`, which allows it
to be used by other operators.

Reference
^^^^^^^^^

For further information, look at:

* `Client Library Documentation <https://googleapis.dev/python/cloudbuild/latest/index.html>`__
* `Product Documentation <https://cloud.google.com/natural-language/docs/>`__
