2021-07-01 10:14:06 +02:00
---
slug: /learn/106-cloudrun
---
2021-07-05 12:40:45 +02:00
# Dagger 106: deploy to Cloud Run
2021-07-01 10:14:06 +02:00
2021-07-05 12:40:45 +02:00
This tutorial illustrates how to use Dagger to build, push and deploy Docker images to Cloud Run.
2021-07-01 10:14:06 +02:00
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
2021-07-05 12:40:45 +02:00
## Initialize a Dagger Workspace and Environment
2021-06-09 12:01:27 +02:00
2021-07-05 12:40:45 +02:00
### (optional) Setup example app
2021-06-09 12:01:27 +02:00
2021-07-05 12:40:45 +02:00
You will need the local copy of the [Dagger examples repository ](https://github.com/dagger/examples ) used in previous guides
2021-06-09 12:01:27 +02:00
2021-07-05 12:40:45 +02:00
```shell
git clone https://github.com/dagger/examples
```
2021-06-09 12:01:27 +02:00
2021-07-02 03:57:43 +02:00
Make sure that all commands are being run from the todoapp directory:
2021-06-09 12:01:27 +02:00
2021-07-05 12:40:45 +02:00
```shell
cd examples/todoapp
```
2021-06-09 12:01:27 +02:00
2021-07-05 12:40:45 +02:00
### (optional) Initialize a Cue module
2021-06-09 12:01:27 +02:00
2021-07-02 03:57:43 +02:00
This guide will use the same directory as the root of the Dagger workspace and the root of the Cue module, but you can create your Cue module anywhere inside the Dagger workspace.
2021-06-09 12:01:27 +02:00
2021-07-05 12:40:45 +02:00
```shell
cue mod init
```
2021-06-09 12:01:27 +02:00
2021-07-05 12:40:45 +02:00
### Organize your package
2021-06-09 12:01:27 +02:00
2021-07-05 12:40:45 +02:00
Let's create a new directory for our Cue package:
2021-06-09 12:01:27 +02:00
2021-07-05 12:40:45 +02:00
```shell
2021-07-02 03:57:43 +02:00
mkdir gcpcloudrun
2021-07-05 12:40:45 +02:00
```
2021-06-09 12:01:27 +02:00
2021-07-05 12:40:45 +02:00
### Create a basic plan
2021-06-09 12:01:27 +02:00
2021-07-02 03:57:43 +02:00
```cue title="todoapp/gcpcloudrun/source.cue"
2021-07-05 12:40:45 +02:00
package gcpcloudrun
2021-06-09 12:01:27 +02:00
2021-07-05 12:40:45 +02:00
import (
"alpha.dagger.io/dagger"
"alpha.dagger.io/docker"
"alpha.dagger.io/gcp"
"alpha.dagger.io/gcp/cloudrun"
"alpha.dagger.io/gcp/gcr"
)
2021-07-01 10:14:06 +02:00
2021-07-05 12:40:45 +02:00
// Source code of the sample application
src: dagger.#Artifact & dagger.#Input
// GCR full image name
imageRef: string & dagger.#Input
image: docker.#Build & {
2021-07-05 12:43:26 +02:00
source: src
2021-07-05 12:40:45 +02:00
}
gcpConfig: gcp.#Config
creds: gcr.#Credentials & {
2021-07-05 12:43:26 +02:00
config: gcpConfig
2021-07-05 12:40:45 +02:00
}
push: docker.#Push & {
2021-07-05 12:43:26 +02:00
target: imageRef
source: image
auth: {
username: creds.username
secret: creds.secret
}
2021-07-05 12:40:45 +02:00
}
deploy: cloudrun.#Service & {
2021-07-05 12:43:26 +02:00
config: gcpConfig
image: push.ref
2021-07-05 12:40:45 +02:00
}
```
## Set up the environment
### Create a new environment
Now that your Cue package is ready, let's create an environment to run it:
```shell
2021-07-02 03:57:43 +02:00
dagger new 'gcpcloudrun' -m gcpcloudrun
2021-07-05 12:40:45 +02:00
```
### Configure user inputs
```shell
dagger input dir src . -e gcpcloudrun
dagger input text deploy.name todoapp -e gcpcloudrun
dagger input text imageRef gcr.io/< your-project > /todoapp -e gcpcloudrun
dagger input text gcpConfig.region us-west2 -e gcpcloudrun
dagger input text gcpConfig.project < your-project > -e gcpcloudrun
dagger input secret gcpConfig.serviceKey -f ./gcp-sa-key.json -e gcpcloudrun
```
## Deploy
2021-07-02 03:57:43 +02:00
Now that everything is set correctly, let's deploy on Cloud Run:
2021-07-05 12:40:45 +02:00
```shell
dagger up -e gcpcloudrun
```