[coreboot-gerrit] Change in coreboot[master]: util/docker: Update makefile for servers and local use

Martin Roth (Code Review) gerrit at coreboot.org
Tue Apr 4 01:50:02 CEST 2017


Martin Roth has submitted this change and it was merged. ( https://review.coreboot.org/18004 )

Change subject: util/docker: Update makefile for servers and local use
......................................................................


util/docker: Update makefile for servers and local use

- Add some variables to allow server customizations.
- Verify that coreboot images and containers exist before trying to
remove them.
- Add a couple of convenience targets: clean & cleanall to remove
coreboot containers and images or ALL containers and images.
- Add docker-what-jenkins-does target to run a test build locally inside
a docker image.
- Add docker-jenkins-server target to test the server configuration and
run the jenkins docker image.
- Add docker-jenkins-shell and docker-shell targets to run the
coreboot-sdk and coreboot-jenkins-server images.
- Update the help.

Change-Id: I1896f33e7eddfe3248f44ae780de65ce50d5dd99
Signed-off-by: Martin Roth <gaumless at gmail.com>
Reviewed-on: https://review.coreboot.org/18004
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer at coreboot.org>
---
M util/docker/Makefile
1 file changed, 104 insertions(+), 8 deletions(-)

Approvals:
  Stefan Reinauer: Looks good to me, approved
  build bot (Jenkins): Verified



diff --git a/util/docker/Makefile b/util/docker/Makefile
index 7df6851..ef43d37 100644
--- a/util/docker/Makefile
+++ b/util/docker/Makefile
@@ -16,6 +16,18 @@
 export crossgcc_version=$(shell $(top)/util/crossgcc/buildgcc --version | grep 'cross toolchain' | sed 's/^.*\sv//' | sed 's/\s.*$$//')
 export DOCKER:=$(shell $(SHELL) -c "command -v docker")
 
+# Local port to forward to the jenkins image for the test server
+export COREBOOT_JENKINS_PORT?=49151
+
+# Local cache directory - for storing files shared with the docker image
+export COREBOOT_JENKINS_CACHE_DIR?=/srv/docker/coreboot-builder/cache
+
+# Local ccache directory
+export COREBOOT_JENKINS_CCACHE_DIR?=/srv/docker/coreboot-builder/ccache
+
+# Name of the jenkins container
+export COREBOOT_JENKINS_CONTAINER?=coreboot_jenkins
+
 # Version of the jenkins / sdk container
 export COREBOOT_CONTAINER_VERSION?=$(crossgcc_version)
 
@@ -58,10 +70,26 @@
 	fi
 
 clean-coreboot-containers: docker-killall
-	$(DOCKER) rm $(docker ps -a | grep 'coreboot' | sed 's|\s.*$||')
+	@if [ -n "$$($(DOCKER) ps -a | grep 'coreboot')" ]; then \
+		$(DOCKER) rm $$($(DOCKER) ps -a | grep 'coreboot' | sed 's|\s.*$$||'); \
+	fi
 
 clean-coreboot-images: docker-killall
-	$(DOCKER) rmi $(docker images | grep coreboot | sed 's|^\S\+\s\+\S\+\s\+||' | sed 's|\s.*$||')
+	@if [ -n "$$($(DOCKER) images | grep 'coreboot')" ]; then \
+		$(DOCKER) rmi $$($(DOCKER) images | grep coreboot | sed 's|^\S\+\s\+\S\+\s\+||' | sed 's|\s.*$$||'); \
+	fi
+
+docker-clean: clean-coreboot-containers
+	@$(MAKE) clean-coreboot-images
+
+docker-cleanall:
+	@if [ -n "$$($(DOCKER) ps -a | grep -v "CONTAINER")" ]; then \
+		$(DOCKER) kill $$($(DOCKER) ps -a | grep -v "CONTAINER" | sed 's|\s.*$$||'); \
+		$(DOCKER) rm $$($(DOCKER) ps -a | grep -v "CONTAINER" | sed 's|\s.*$$||'); \
+	fi
+	@if [ -n "$$($(DOCKER) images | grep -v "REPOSITORY")" ]; then \
+		$(DOCKER) rmi $$($(DOCKER) images | grep -v "REPOSITORY" | tr -s ' ' | cut -f3 -d ' '); \
+	fi
 
 docker-build-coreboot: test-docker
 	$(DOCKER) run -u root -it -v $(top):/home/coreboot/coreboot \
@@ -83,26 +111,94 @@
 	@echo "Exiting now will leave built files owned by root"
 	sudo chown -R $$(whoami):$$(id -gn $$(whoami)) $(top)
 
+docker-what-jenkins-does: test-docker
+	$(DOCKER) run -u root -it -v $(top):/home/coreboot/coreboot \
+		--rm coreboot/coreboot-sdk:$(COREBOOT_CONTAINER_VERSION) \
+		/bin/bash -c "cd /home/coreboot/coreboot && \
+		make clean && make what-jenkins-does CPUS=$(CPUS)"
+
+docker-jenkins-server: test-docker
+	@if [ ! -d "$(COREBOOT_JENKINS_CACHE_DIR)" ]; then \
+		printf "\nError: %s does not exist.\n" "$(COREBOOT_JENKINS_CACHE_DIR)"; \
+		printf "Please run:\nsudo mkdir -p %s\n\n" "$(COREBOOT_JENKINS_CACHE_DIR)"; \
+		false; \
+	fi
+	@if ! touch "$(COREBOOT_JENKINS_CACHE_DIR)/testfile" 2>/dev/null; then \
+		printf "\nError: Cannot create file in %s." "$(COREBOOT_JENKINS_CACHE_DIR)"; \
+		printf "Please run:\nsudo chown -R $(whoami):$(whoami) %s\n\n" "$(COREBOOT_JENKINS_CACHE_DIR)"; \
+	else \
+		 rm -f "$(COREBOOT_JENKINS_CACHE_DIR)/testfile"; \
+	fi
+	@if [ ! -d "$(COREBOOT_JENKINS_CCACHE_DIR)" ]; then \
+		printf "\nError: %s does not exist.\n" "$(COREBOOT_JENKINS_CCACHE_DIR)"; \
+		printf "Please run:\nsudo mkdir -p %s\n\n" "$(COREBOOT_JENKINS_CCACHE_DIR)"; \
+		false; \
+	fi
+	@if ! touch "$(COREBOOT_JENKINS_CCACHE_DIR)/testfile" 2>/dev/null; then \
+		printf "\nError: Cannot create file in %s." "$(COREBOOT_JENKINS_CCACHE_DIR)"; \
+		printf 'Please run:\nsudo chown -R $$(whoami):$$(whoami) %s\n\n' "$(COREBOOT_JENKINS_CCACHE_DIR)"; \
+	else \
+		rm -f "$(COREBOOT_JENKINS_CCACHE_DIR)/testfile"; \
+	fi
+	$(DOCKER) run -d --privileged --restart=always \
+		-p $(COREBOOT_JENKINS_PORT):49151 \
+		-v $(COREBOOT_JENKINS_CACHE_DIR):/data/cache \
+		-v $(COREBOOT_JENKINS_CCACHE_DIR):/home/coreboot/.ccache \
+		--name=$(COREBOOT_JENKINS_CONTAINER) \
+		coreboot/coreboot-jenkins-node:$(COREBOOT_CONTAINER_VERSION)
+
+docker-jenkins-shell: test-docker
+	@if [ ! -d $(COREBOOT_JENKINS_CACHE_DIR) ]; then printf "\nError: %s does not exist.\nPlease run:\nsudo mkdir -p %s\n\n" "$(COREBOOT_JENKINS_CACHE_DIR)" "$(COREBOOT_JENKINS_CACHE_DIR)"; false; fi
+	@if [ ! -d $(COREBOOT_JENKINS_CCACHE_DIR) ]; then printf "\nError: %s does not exist.\nPlease run:\nsudo mkdir -p %s\n\n" "$(COREBOOT_JENKINS_CCACHE_DIR)" "$(COREBOOT_JENKINS_CCACHE_DIR)"; false; fi
+	$(DOCKER) run -u root -it --privileged \
+		--entrypoint="/bin/bash" \
+		-p $(COREBOOT_JENKINS_PORT):49151 \
+		-v $(top):/home/coreboot/coreboot \
+		-v $(COREBOOT_JENKINS_CACHE_DIR):/data/cache \
+		-v $(COREBOOT_JENKINS_CCACHE_DIR):/home/coreboot/.ccache \
+		--name=$(COREBOOT_JENKINS_CONTAINER) \
+		--rm coreboot/coreboot-jenkins-node:$(COREBOOT_CONTAINER_VERSION)
+
+docker-shell: USER=coreboot
+docker-shell: test-docker
+	$(DOCKER) run -u $(USER) -it \
+		-w /home/coreboot/coreboot \
+		-v $(top):/home/coreboot/coreboot \
+		--rm coreboot/coreboot-sdk:$(COREBOOT_CONTAINER_VERSION) \
+		/bin/bash -l
+
 help:
 	@echo "Commands for working with docker images:"
 	@echo "  coreboot-sdk                 - Build coreboot-sdk container"
 	@echo "  upload-coreboot-sdk          - Upload coreboot-sdk to hub.docker.com"
 	@echo "  coreboot-jenkins-node        - Build coreboot-jenkins-node container"
 	@echo "  upload-coreboot-jenkins-node - Upload coreboot-jenkins-node to hub.docker.com"
-	@echo "  clean-coreboot-containers    - remove all docker coreboot containers"
-	@echo "  clean-coreboot-images        - remove all docker coreboot images"
+	@echo "  clean-coreboot-containers    - Remove all docker coreboot containers"
+	@echo "  clean-coreboot-images        - Remove all docker coreboot images"
+	@echo "  clean-docker                 - Remove docker coreboot containers & images"
 	@echo
 	@echo "Commands for using docker images"
-	@echo "  docker-build-coreboot <BUILD_CMD=target>  - Build coreboot under coreboot-sdk"
-	@echo "  docker-abuild <ABUILD_ARGS='-a -B'>       - Run abuild under coreboot-sdk"
+	@echo "  docker-build-coreboot        - Build coreboot under coreboot-sdk"
+	@echo "      <BUILD_CMD=target> "
+	@echo "  docker-abuild                - Run abuild under coreboot-sdk"
+	@echo "      <ABUILD_ARGS='-a -B'>"
+	@echo "  docker-what-jenkins-does     - Run 'what-jenkins-does' target"
+	@echo "  docker-shell                 - Bash prompt in coreboot-jenkins-node"
+	@echo "      <USER=root or USER=coreboot>"
+	@echo "  docker-jenkins-server        - Run coreboot-jenkins-node image (for server)"
 	@echo
 	@echo "Variables:"
-	@echo "  COREBOOT_CONTAINER_VERSION = $(COREBOOT_CONTAINER_VERSION)"
-	@echo "  DOCKER_COMMIT = $(DOCKER_COMMIT)"
+	@echo "  COREBOOT_JENKINS_PORT=$(COREBOOT_JENKINS_PORT)"
+	@echo "  COREBOOT_JENKINS_CACHE_DIR=$(COREBOOT_JENKINS_CACHE_DIR)"
+	@echo "  COREBOOT_JENKINS_CCACHE_DIR=$(COREBOOT_JENKINS_CCACHE_DIR)"
+	@echo "  COREBOOT_JENKINS_CONTAINER=$(COREBOOT_JENKINS_CONTAINER)"
+	@echo "  COREBOOT_CONTAINER_VERSION=$(COREBOOT_CONTAINER_VERSION)"
+	@echo "  DOCKER_COMMIT=$(DOCKER_COMMIT)"
 
 .PHONY: test-docker test-docker-login
 .PHONY: coreboot-jenkins-node upload-coreboot-jenkins-node
 .PHONY: coreboot-sdk upload-coreboot-sdk
 .PHONY: clean-coreboot-containers clean-coreboot-images
 .PHONY: docker-abuild
+.PHONY: docker-what-jenkins-does docker-shell docker-jenkins-server
 .PHONY: help

-- 
To view, visit https://review.coreboot.org/18004
To unsubscribe, visit https://review.coreboot.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I1896f33e7eddfe3248f44ae780de65ce50d5dd99
Gerrit-PatchSet: 7
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Owner: Martin Roth <martinroth at google.com>
Gerrit-Reviewer: Martin Roth <martinroth at google.com>
Gerrit-Reviewer: Paul Menzel <paulepanter at users.sourceforge.net>
Gerrit-Reviewer: Philipp Deppenwiese <zaolin.daisuki at gmail.com>
Gerrit-Reviewer: Philippe Mathieu-Daudé <philippe.mathieu.daude at gmail.com>
Gerrit-Reviewer: Stefan Reinauer <stefan.reinauer at coreboot.org>
Gerrit-Reviewer: build bot (Jenkins)



More information about the coreboot-gerrit mailing list