From e926f4aaccd7dad8e8154211a3b5aed6517fe718 Mon Sep 17 00:00:00 2001 From: Lakshya Singh Date: Tue, 7 Nov 2023 19:15:20 +0530 Subject: [PATCH] ci: add gitlab ci for docker compose - split into multiple jobs - specify tags for runner large - use buildx and add separate builder default has no cache - build image from cache and push to registry - compose use tag and pull - use cache tag for reuse - https://github.com/moby/buildkit/issues/1981 - https://github.com/moby/buildkit/issues/3730 - use cache-to and cache-from with registry/cache - add dockerignore to prevent rebuild on git changes - use individual builders - add step for docker compose up - update readme - update dockerignore - add gitignore - use script reduce duplicate code - cache from and to in build, compose use cache - dont push images just use cache - build in compose step from cache Signed-off-by: Lakshya Singh --- .dockerignore | 9 ++++++ .gitignore | 1 + .gitlab-ci.yml | 57 +++++++++++++++++++++++++++++++++++ README.md | 2 +- scripts/build_from_cache.sh | 8 +++++ scripts/build_image_cache.sh | 10 ++++++ {hooks => scripts}/pre-commit | 0 7 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100755 scripts/build_from_cache.sh create mode 100755 scripts/build_image_cache.sh rename {hooks => scripts}/pre-commit (100%) diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..fed5c56 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/docker-compose* +**/Dockerfile* +**/*.Dockerfile +LICENSE +README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..8a8808f --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,57 @@ +stages: + - build + - test + +default: + image: docker:24.0.7 + services: + - docker:24.0.7-dind + before_script: + - docker version + - docker compose version + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + +variables: + VLS_CONTAINER_REGISTRY: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME + CACHE: $CI_REGISTRY_IMAGE/cache + CACHE_TAG: $CI_COMMIT_REF_SLUG + IMAGE_TAG: $CI_COMMIT_SHA + +build_bitcoin: + tags: [ saas-linux-large-amd64 ] + stage: build + script: + - ./scripts/build_image_cache.sh bitcoind +build_core_lightning: + tags: [ saas-linux-large-amd64 ] + stage: build + script: + - ./scripts/build_image_cache.sh lightningd +build_txoo: + tags: [ saas-linux-medium-amd64 ] + stage: build + script: + - ./scripts/build_image_cache.sh txood +build_vls: + tags: [ saas-linux-large-amd64 ] + stage: build + script: + - ./scripts/build_image_cache.sh vlsd +compose: + tags: [ saas-linux-medium-amd64 ] + stage: test + variables: + BUILDER: compose_builder + before_script: + - docker volume create bitcoin_data + - docker volume create lightning_data + - docker volume create txoo_data + - docker volume create vls_data + - docker buildx create --name=$BUILDER --use + script: + - echo "IMAGE_TAG=${IMAGE_TAG}" > .env + - ./scripts/build_from_cache.sh bitcoind + - ./scripts/build_from_cache.sh lightningd + - ./scripts/build_from_cache.sh txood + - ./scripts/build_from_cache.sh vlsd + - docker compose --profile vls up -d --wait --wait-timeout 120 --build diff --git a/README.md b/README.md index 7bea844..fcede27 100644 --- a/README.md +++ b/README.md @@ -187,7 +187,7 @@ docker container exec lightningd-test lightning-cli --testnet summary - [x] standalone docker image for `lightningd` - [x] standalone docker image for `bitcoind` - [ ] supporting signet -- [ ] Profile configuration to run `vls` +- [x] Profile configuration to run `vls` - [ ] Healthcheck for `txoo` - [ ] Healthcheck for `vls` - [ ] Lightning Storage Server Dockerfile and Compose Service diff --git a/scripts/build_from_cache.sh b/scripts/build_from_cache.sh new file mode 100755 index 0000000..2f50344 --- /dev/null +++ b/scripts/build_from_cache.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +set -ex + +SERVICE=$1 + +cd $SERVICE +docker build --load --builder $BUILDER --cache-from $CACHE/$SERVICE:$CACHE_TAG -t $SERVICE:$IMAGE_TAG . diff --git a/scripts/build_image_cache.sh b/scripts/build_image_cache.sh new file mode 100755 index 0000000..bbab802 --- /dev/null +++ b/scripts/build_image_cache.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +set -ex + +SERVICE=$1 + +docker buildx create --name=$SERVICE --use +cd $SERVICE + +docker build --load --builder=$SERVICE --cache-to type=registry,ref=$CACHE/$SERVICE:$CACHE_TAG --cache-from $CACHE/$SERVICE:$CACHE_TAG -t $SERVICE:$IMAGE_TAG . diff --git a/hooks/pre-commit b/scripts/pre-commit similarity index 100% rename from hooks/pre-commit rename to scripts/pre-commit