1
0
mirror of synced 2026-01-03 06:02:23 -05:00
Files
airbyte/docs/contributing-to-airbyte/resources/developing-on-docker.md
Marcos Marx 62ee7026e6 Docs: update contributing guides (#27812)
* changes

* update how to pr and readme

* update contributeing guides

* update code of conduct text

* update submit new connector

* submit new connector doc

* make one line for submit new conn find request

* improve words
2023-06-30 15:00:15 -06:00

80 lines
3.5 KiB
Markdown

# Developing on Docker
## Incrementality
The docker build is fully incremental for the platform build, which means that it will only build an image if it is needed. We need to keep it that
way.
The top level `build.gradle` file defines several convenient tasks for building a docker image.
1) The `copyGeneratedTar` task copies a generated TAR file from a default location into the default location used by the [docker plugin](https://github.com/bmuschko/gradle-docker-plugin).
2) The `buildDockerImage` task is a convenience class for configuring the above linked docker plugin that centralizes configuration logic commonly found in our dockerfiles.
3) Makes the `buildDockerImage` task depend on the Gradle `assemble` task.
These tasks are created in a subproject if the subproject has a `gradle.properties` file with the `dockerImageName` property. This property sets the built docker image's name.
## Adding a new docker build
Once you have a `Dockerfile`, generating the docker image is done in the following way:
1. Create a `gradle.properties` file in the subproject with the `dockerImageName` property set to the docker image name.
For example:
```groovy
// In the gradle.properties file.
dockerImageName=cron
```
2. If this is a subproject producing a TAR, take advantage of the pre-provided task by configuring the build docker task to
depend on the copy TAR task in the subproject's build.gradle.
For example:
```groovy
tasks.named("buildDockerImage") {
dependsOn copyGeneratedTar
}
```
3. If this is a subproject with a more custom copy strategy, define your own task to copy the necessary files and configure
the build docker task to depend on this custom copy task in the subproject's build.gradle.
```groovy
task copyScripts(type: Copy) {
dependsOn copyDocker
from('scripts')
into 'build/docker/bin/scripts'
}
tasks.named("buildDockerImage") {
dependsOn copyScripts
}
```
## Building the docker images
The gradle task `generate-docker` allows to build all the docker images.
## Handling the OSS version
The docker images that are running using a jar need to the latest published OSS version on master. Here is how it is handle:
### Existing modules
The version should already be present. If a new version is published while a PR is open, it should generate a conflict, that will prevent you from
merging the review. There are scenarios where it is going to generate and error (The Dockerfile is moved for example), the way to avoid any issue
is to:
- Check the `.env` file to make sure that the latest version align with the version in the PR
- Merge the `master` branch in the PR and make sure that the build is working right before merging.
If the version don't align, it will break the remote `master` build.
The version will be automatically replace with new version when releasing the OSS version using the `.bumpversion.cfg`.
### New module
This is trickier than handling the version of an existing module.
First your docker file generating an image need to be added to the `.bumpversion.cfg`. For each and every version you want to build with, the
docker image will need to be manually tag and push until the PR is merge. The reason is that the build has a check to know if all the potential
docker images are present in the docker repository. It is done the following way:
```shell
docker tag 7d94ea2ad657 airbyte/temporal:0.30.35-alpha
docker push airbyte/temporal:0.30.35-alpha
```
The image ID can be retrieved using `docker images` or the docker desktop UI.