diff --git a/.github/workflows/build_images.yml b/.github/workflows/build_images.yml index 3ad6e77..36305d7 100644 --- a/.github/workflows/build_images.yml +++ b/.github/workflows/build_images.yml @@ -51,10 +51,10 @@ jobs: - name: Read images_version file id: getversion run: echo "::set-output name=version::$(cat images_version)" - - name: Release - uses: avakar/tag-and-release@v1 - with: - tag_name: v${{ steps.getversion.outputs.version }} - release_name: release_${{ steps.getversion.outputs.version }} - env: - GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} +# - name: Release +# uses: avakar/tag-and-release@v1 +# with: +# tag_name: v${{ steps.getversion.outputs.version }} +# release_name: release_${{ steps.getversion.outputs.version }} +# env: +# GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} diff --git a/dockerfiles/base-build/Dockerfile-gnu b/dockerfiles/base-build/Dockerfile-gnu index 87b07c1..e45b19c 100644 --- a/dockerfiles/base-build/Dockerfile-gnu +++ b/dockerfiles/base-build/Dockerfile-gnu @@ -3,6 +3,7 @@ ARG images_version FROM flow123d/base-gnu:${images_version} MAINTAINER Jan Hybs ARG images_version +ARG boost_version # Environment variables are part of the images. # We will use the same base boost package when selectiong specific parts of the BOOST for the install image. @@ -14,7 +15,7 @@ ARG images_version # 2 /usr/bin/gcc-7 7 manual mode # 3 /usr/bin/gcc-8 8 manual mode # 4 /usr/bin/gcc-9 9 manual mode -ARG DEFAULT_GCC=/usr/bin/gcc-9 +ARG DEFAULT_GCC=/usr/bin/gcc-11 # [g++] # 0 /usr/bin/g++-9 9 auto mode @@ -22,13 +23,13 @@ ARG DEFAULT_GCC=/usr/bin/gcc-9 # 2 /usr/bin/g++-7 7 manual mode # 3 /usr/bin/g++-8 8 manual mode # 4 /usr/bin/g++-9 9 manual mode -ARG DEFAULT_GXX=/usr/bin/g++-9 +ARG DEFAULT_GXX=/usr/bin/g++-11 # [c++] # 0 /usr/bin/g++ 20 auto mode # 1 /usr/bin/clang++ 10 manual mode # 2 /usr/bin/g++ 20 manual mode -ARG DEFAULT_CXX=/usr/bin/g++-9 +ARG DEFAULT_CXX=/usr/bin/g++-11 # install basic set of tools and pandoc tools @@ -42,25 +43,23 @@ RUN sudo apt-get update && sudo apt-get install -y \ man \ tree \ gfortran \ - gcc-7 g++-7 \ - gcc-8 g++-8 \ - gcc-9 g++-9 \ + gcc-11 g++-11 \ clang \ gdbserver \ valgrind \ oprofile \ pandoc \ ccache \ - libboost1.71-dev \ - libboost-program-options1.71-dev \ - libboost-serialization1.71-dev \ - libboost-regex1.71-dev \ - libboost-filesystem1.71-dev \ + libboost${boost_version}-dev \ + libboost-program-options${boost_version}-dev \ + libboost-serialization${boost_version}-dev \ + libboost-regex${boost_version}-dev \ + libboost-filesystem${boost_version}-dev \ libblas-dev \ liblapack-dev \ lib32z1-dev \ libpugixml-dev \ - libpython3.9-dev + libpython3-dev # install doxygen and graphviz, latex diff --git a/dockerfiles/base/Dockerfile-gnu b/dockerfiles/base/Dockerfile-gnu index 49cb44c..a18f1f2 100644 --- a/dockerfiles/base/Dockerfile-gnu +++ b/dockerfiles/base/Dockerfile-gnu @@ -1,6 +1,7 @@ # BASE Dockerfile for running flow123d -FROM ubuntu:20.04 +FROM ubuntu:22.04 ARG images_version +ARG boost_version MAINTAINER Jan Březina, Jan Hybš @@ -26,19 +27,19 @@ RUN apt-get update && apt-get install -y \ less \ tzdata \ perl \ - python3.9 \ + python3 \ python3-pip \ openssh-client \ libpsm2-dev \ - libboost-program-options1.71.0 \ - libboost-serialization1.71.0 \ - libboost-regex1.71.0 \ - libboost-filesystem1.71.0 \ + libboost-program-options${boost_version} \ + libboost-serialization${boost_version} \ + libboost-regex${boost_version} \ + libboost-filesystem${boost_version} \ libblas3 \ liblapack3 \ lib32z1 \ libpugixml1v5 \ - libpython3.9 \ + libpython3-stdlib \ python3-numpy \ python3-venv \ libxinerama-dev \ diff --git a/dockerfiles/flow-dev-gnu/Dockerfile b/dockerfiles/flow-dev-gnu/Dockerfile index 637ae7a..492a4a0 100644 --- a/dockerfiles/flow-dev-gnu/Dockerfile +++ b/dockerfiles/flow-dev-gnu/Dockerfile @@ -1,13 +1,67 @@ -# FLOW-LIBS-DEV-DBG Dockerfile for running flow123d +# BASE-BUILD Dockerfile for running flow123d ARG images_version +FROM flow123d/base-build-gnu:${images_version} as libs-build ARG BUILD_TYPE -ARG source_image -FROM ${source_image} as builder +# TODO: +# COPY invalidates all layers even if the chance takes place only in configuration of a single library +# Resolution: +# - break into multiple stages one for each library, copy only relevant directory +# - merge with flow-dev-gnu +# auxiliary build image +# just build libraries Dbug or Release using ${BUILD_TYPE} variable + +RUN mkdir /build +COPY libs-build-gnu/common_cmake.mk /build/common_cmake.mk +COPY libs-build-gnu/common_configure.mk /build/common_configure.mk + + +### YAMLCPP +COPY libs-build-gnu/yamlcpp /build/yamlcpp +ARG ver_yamlcpp +# Need to copy these into ../libs-dbg/Docrefile +RUN echo "*** building YAMLCPP ***"; \ + make -C /build/yamlcpp build_type=${BUILD_TYPE} version=$ver_yamlcpp install + +### ARMADILO +COPY libs-build-gnu/armadillo /build/armadillo +ARG ver_armadillo +RUN echo "*** building Armadillo ***"; \ + make -C /build/armadillo build_type=${BUILD_TYPE} version=$ver_armadillo install + +### MPICH +COPY libs-build-gnu/mpich /build/mpich +ARG ver_mpich +RUN echo "*** building MPICH ***"; \ + make -C /build/mpich build_type=${BUILD_TYPE} version=$ver_mpich install + +### PETSC +COPY libs-build-gnu/petsc /build/petsc +ARG ver_petsc +ARG ver_hypre +RUN echo "*** building PETSC ***"; \ + make -C /build/petsc build_type=${BUILD_TYPE} mpich_lib=mpich_${ver_mpich} version=${ver_petsc} hypre_version=${ver_hypre} install + +### BDDCML +COPY libs-build-gnu/bddcml /build/bddcml +ARG ver_bddcml +RUN echo "*** building BDDCML ***"; \ + make -C /build/bddcml build_type=${BUILD_TYPE} version=${ver_bddcml} mpich_lib=mpich_${ver_mpich} petsc_lib=petsc_${ver_petsc} install + +### PERMON +COPY libs-build-gnu/permon /build/permon +ARG ver_permon +RUN echo "*** building PERMON ***"; \ + make -C /build/permon build_type=${BUILD_TYPE} version=${ver_permon} petsc_lib=petsc_${ver_petsc} install + + + +################################## +# Target flow-dev-gnu image ARG images_version -FROM flow123d/base-build-gnu:${images_version} -MAINTAINER Jan Hybs +FROM flow123d/base-build-gnu:${images_version} as flow-dev-gnu +MAINTAINER Jan Brezina ARG images_version ARG BUILD_TYPE @@ -20,15 +74,50 @@ ARG ver_bddcml ARG ver_permon # install libraries -COPY --from=builder /usr/local/yamlcpp_$ver_yamlcpp /usr/local/yamlcpp_$ver_yamlcpp -COPY --from=builder /usr/local/armadillo_${ver_armadillo} /usr/local/armadillo_${ver_armadillo} -COPY --from=builder /usr/local/mpich_${ver_mpich} /usr/local/mpich_${ver_mpich} -COPY --from=builder /usr/local/petsc_${ver_petsc} /usr/local/petsc_${ver_petsc} -COPY --from=builder /usr/local/bddcml_${ver_bddcml} /usr/local/bddcml_${ver_bddcml} -COPY --from=builder /usr/local/permon_${ver_permon} /usr/local/permon_${ver_permon} +COPY --from=libs-build /usr/local/yamlcpp_$ver_yamlcpp /usr/local/yamlcpp_$ver_yamlcpp +COPY --from=libs-build /usr/local/armadillo_${ver_armadillo} /usr/local/armadillo_${ver_armadillo} +COPY --from=libs-build /usr/local/mpich_${ver_mpich} /usr/local/mpich_${ver_mpich} +COPY --from=libs-build /usr/local/petsc_${ver_petsc} /usr/local/petsc_${ver_petsc} +COPY --from=libs-build /usr/local/bddcml_${ver_bddcml} /usr/local/bddcml_${ver_bddcml} +COPY --from=libs-build /usr/local/permon_${ver_permon} /usr/local/permon_${ver_permon} RUN sudo apt-get update && sudo apt-get install -y --no-install-recommends \ python3-vtk7 RUN echo ${BUILD_TYPE} ${images_version} >/.dockerversion + +################################### +# Target install-gnu image + + +ARG images_version +FROM flow123d/base-gnu:${images_version} as install-gnu +MAINTAINER Jan Brezina + +ARG images_version +ARG BUILD_TYPE=Release + + +ARG ver_yamlcpp +ARG ver_armadillo +ARG ver_mpich +ARG ver_petsc +ARG ver_bddcml +ARG ver_permon + +# install libraries +COPY --from=libs-build /usr/local/yamlcpp_$ver_yamlcpp /usr/local/yamlcpp_$ver_yamlcpp +COPY --from=libs-build /usr/local/armadillo_${ver_armadillo} /usr/local/armadillo_${ver_armadillo} +COPY --from=libs-build /usr/local/mpich_${ver_mpich} /usr/local/mpich_${ver_mpich} +COPY --from=libs-build /usr/local/petsc_${ver_petsc} /usr/local/petsc_${ver_petsc} +COPY --from=libs-build /usr/local/bddcml_${ver_bddcml} /usr/local/bddcml_${ver_bddcml} +COPY --from=libs-build /usr/local/permon_${ver_permon} /usr/local/permon_${ver_permon} + +RUN echo ${BUILD_TYPE} ${images_version} >/.dockerversion; \ + echo /usr/local/mpich_${ver_mpich}/bin/mpicc >/.mpiccpath; \ + ln -s /usr/local/${ver_mpich}/bin/mpirun /usr/bin/mpirun; \ + ln -s /usr/local/${ver_mpich}/bin/mpicc /usr/bin/mpicc; \ + ln -s /usr/local/${ver_mpich}/bin/mpicc /usr/bin/mpicxx; \ + ln -s /usr/local/${ver_mpich}/bin/mpicc /usr/bin/mpif90; \ + ln -s /usr/local/${ver_mpich}/bin/mpicc /usr/bin/mpifort diff --git a/dockerfiles/libs-gnu/libs-build-gnu/armadillo/Makefile b/dockerfiles/flow-dev-gnu/libs-build-gnu/armadillo/Makefile similarity index 100% rename from dockerfiles/libs-gnu/libs-build-gnu/armadillo/Makefile rename to dockerfiles/flow-dev-gnu/libs-build-gnu/armadillo/Makefile diff --git a/dockerfiles/libs-gnu/libs-build-gnu/bddcml/Makefile b/dockerfiles/flow-dev-gnu/libs-build-gnu/bddcml/Makefile similarity index 99% rename from dockerfiles/libs-gnu/libs-build-gnu/bddcml/Makefile rename to dockerfiles/flow-dev-gnu/libs-build-gnu/bddcml/Makefile index 0f43265..00258f8 100644 --- a/dockerfiles/libs-gnu/libs-build-gnu/bddcml/Makefile +++ b/dockerfiles/flow-dev-gnu/libs-build-gnu/bddcml/Makefile @@ -9,7 +9,7 @@ base_name=bddcml-$(version) clear=false -build_root=/libs-build-gnu +build_root=/build build_dir = $(build_root)/$(library)/build_$(build_type) # package_dir = $(build_root)/packages # package_name = $(library)_$(build_type) diff --git a/dockerfiles/libs-gnu/libs-build-gnu/bddcml/bddcml_make_inc.common b/dockerfiles/flow-dev-gnu/libs-build-gnu/bddcml/bddcml_make_inc.common similarity index 100% rename from dockerfiles/libs-gnu/libs-build-gnu/bddcml/bddcml_make_inc.common rename to dockerfiles/flow-dev-gnu/libs-build-gnu/bddcml/bddcml_make_inc.common diff --git a/dockerfiles/libs-gnu/libs-build-gnu/bddcml/blopex_make_inc.common b/dockerfiles/flow-dev-gnu/libs-build-gnu/bddcml/blopex_make_inc.common similarity index 100% rename from dockerfiles/libs-gnu/libs-build-gnu/bddcml/blopex_make_inc.common rename to dockerfiles/flow-dev-gnu/libs-build-gnu/bddcml/blopex_make_inc.common diff --git a/dockerfiles/libs-gnu/libs-build-gnu/common_cmake.mk b/dockerfiles/flow-dev-gnu/libs-build-gnu/common_cmake.mk similarity index 99% rename from dockerfiles/libs-gnu/libs-build-gnu/common_cmake.mk rename to dockerfiles/flow-dev-gnu/libs-build-gnu/common_cmake.mk index d58b81f..5f3b3a7 100644 --- a/dockerfiles/libs-gnu/libs-build-gnu/common_cmake.mk +++ b/dockerfiles/flow-dev-gnu/libs-build-gnu/common_cmake.mk @@ -10,7 +10,7 @@ package_name ?= $(library)_$(build_type) -build_root=/libs-build-gnu +build_root=/build build_dir = $(build_root)/$(library)/build_$(build_type) # package_dir = $(build_root)/packages # package=$(package_dir)/$(package_name).tar.gz diff --git a/dockerfiles/libs-gnu/libs-build-gnu/common_configure.mk b/dockerfiles/flow-dev-gnu/libs-build-gnu/common_configure.mk similarity index 96% rename from dockerfiles/libs-gnu/libs-build-gnu/common_configure.mk rename to dockerfiles/flow-dev-gnu/libs-build-gnu/common_configure.mk index 65b77e9..9f2416e 100644 --- a/dockerfiles/libs-gnu/libs-build-gnu/common_configure.mk +++ b/dockerfiles/flow-dev-gnu/libs-build-gnu/common_configure.mk @@ -9,7 +9,7 @@ # 'package-name' - optional, default is $(library) -build_root=/libs-build-gnu +build_root=/build package_name ?= $(library)_$(build_type) build_dir = $(build_root)/$(library)/build_$(build_type) @@ -39,13 +39,14 @@ $(CURDIR)/$(install_file): wget $(url) $(build_dir)/configure: clean_build $(CURDIR)/$(install_file) - if [ ! -d $(build_dir) ]; then \ + if [ ! -d $(build_dir) -o ! -x $(build_dir)/configure ]; then \ cmake -E tar x $(install_file); \ mv $(base_name) build_$(build_type); \ fi lib_makefile=$(build_dir)/Makefile $(lib_makefile): $(build_dir)/configure + ls $(build_dir) cd $(build_dir) && ./configure --prefix=$(install_prefix) $(configure_options) diff --git a/dockerfiles/libs-gnu/libs-build-gnu/mpich/Makefile b/dockerfiles/flow-dev-gnu/libs-build-gnu/mpich/Makefile similarity index 74% rename from dockerfiles/libs-gnu/libs-build-gnu/mpich/Makefile rename to dockerfiles/flow-dev-gnu/libs-build-gnu/mpich/Makefile index bae59ce..5beaa07 100644 --- a/dockerfiles/libs-gnu/libs-build-gnu/mpich/Makefile +++ b/dockerfiles/flow-dev-gnu/libs-build-gnu/mpich/Makefile @@ -5,9 +5,13 @@ url=http://flow.nti.tul.cz/libraries/mpich-${version}.tar.gz base_name=mpich-$(version) conf_opt_Debug= \ + FFLAGS=-fallow-argument-mismatch \ + FCFLAGS=-fallow-argument-mismatch \ --with-device=ch4:ofi conf_opt_Release= \ + FFLAGS=-fallow-argument-mismatch \ + FCFLAGS=-fallow-argument-mismatch \ --enable-fast=O3,ndebug \ --disable-error-checking \ --without-timing \ diff --git a/dockerfiles/libs-gnu/libs-build-gnu/permon/Makefile b/dockerfiles/flow-dev-gnu/libs-build-gnu/permon/Makefile similarity index 99% rename from dockerfiles/libs-gnu/libs-build-gnu/permon/Makefile rename to dockerfiles/flow-dev-gnu/libs-build-gnu/permon/Makefile index ed89a9f..257dd9f 100644 --- a/dockerfiles/libs-gnu/libs-build-gnu/permon/Makefile +++ b/dockerfiles/flow-dev-gnu/libs-build-gnu/permon/Makefile @@ -9,7 +9,7 @@ base_name=$(library)-$(version) clear=true -build_root=/libs-build-gnu +build_root=/build build_dir = $(build_root)/$(library)/build_$(build_type) # package_dir = $(build_root)/packages # package_name = $(library)_$(build_type) diff --git a/dockerfiles/libs-gnu/libs-build-gnu/petsc/Makefile b/dockerfiles/flow-dev-gnu/libs-build-gnu/petsc/Makefile similarity index 99% rename from dockerfiles/libs-gnu/libs-build-gnu/petsc/Makefile rename to dockerfiles/flow-dev-gnu/libs-build-gnu/petsc/Makefile index 660bd5e..b992361 100644 --- a/dockerfiles/libs-gnu/libs-build-gnu/petsc/Makefile +++ b/dockerfiles/flow-dev-gnu/libs-build-gnu/petsc/Makefile @@ -10,7 +10,7 @@ base_name=petsc-$(version) package_name = $(library)_$(build_type) clear=false -build_root=/libs-build-gnu +build_root=/build build_dir = $(build_root)/$(library)/build_$(build_type) package_dir = $(build_root)/packages n_jobs = 5 diff --git a/dockerfiles/libs-gnu/libs-build-gnu/yamlcpp/Makefile b/dockerfiles/flow-dev-gnu/libs-build-gnu/yamlcpp/Makefile similarity index 71% rename from dockerfiles/libs-gnu/libs-build-gnu/yamlcpp/Makefile rename to dockerfiles/flow-dev-gnu/libs-build-gnu/yamlcpp/Makefile index 57bd3c7..388ae30 100644 --- a/dockerfiles/libs-gnu/libs-build-gnu/yamlcpp/Makefile +++ b/dockerfiles/flow-dev-gnu/libs-build-gnu/yamlcpp/Makefile @@ -1,8 +1,8 @@ # Simple makefile for building and packaging project Yaml cpp library=yamlcpp -url=https://flow.nti.tul.cz/libraries/yaml-cpp-yaml-cpp-$(version).zip -base_name=yaml-cpp-yaml-cpp-$(version) +url=https://flow.nti.tul.cz/libraries/yaml-cpp-$(version).zip +base_name=yaml-cpp-$(version) cmake_options="-DYAML_BUILD_SHARED_LIBS=ON" # In order to combine staticaly linked yamlcpp with dynamicaly linked res of the code. @@ -10,7 +10,6 @@ CXX_FLAGS=-fPIC # TODO: shared yamplcpp - include ../common_cmake.mk diff --git a/dockerfiles/install-gnu/Dockerfile b/dockerfiles/install-gnu/Dockerfile deleted file mode 100644 index 50ceece..0000000 --- a/dockerfiles/install-gnu/Dockerfile +++ /dev/null @@ -1,36 +0,0 @@ -# FLOW-LIBS-DEV-DBG Dockerfile for running flow123d -ARG images_version -ARG source_image -FROM ${source_image} as builder - - -ARG images_version -FROM flow123d/base-gnu:${images_version} -MAINTAINER Jan Brezina - -ARG images_version -ARG BUILD_TYPE=Release - - -ARG ver_yamlcpp -ARG ver_armadillo -ARG ver_mpich -ARG ver_petsc -ARG ver_bddcml -ARG ver_permon - -# install libraries -COPY --from=builder /usr/local/yamlcpp_$ver_yamlcpp /usr/local/yamlcpp_$ver_yamlcpp -COPY --from=builder /usr/local/armadillo_${ver_armadillo} /usr/local/armadillo_${ver_armadillo} -COPY --from=builder /usr/local/mpich_${ver_mpich} /usr/local/mpich_${ver_mpich} -COPY --from=builder /usr/local/petsc_${ver_petsc} /usr/local/petsc_${ver_petsc} -COPY --from=builder /usr/local/bddcml_${ver_bddcml} /usr/local/bddcml_${ver_bddcml} -COPY --from=builder /usr/local/permon_${ver_permon} /usr/local/permon_${ver_permon} - -RUN echo ${BUILD_TYPE} ${images_version} >/.dockerversion; \ - echo /usr/local/mpich_${ver_mpich}/bin/mpicc >/.mpiccpath; \ - ln -s /usr/local/${ver_mpich}/bin/mpirun /usr/bin/mpirun; \ - ln -s /usr/local/${ver_mpich}/bin/mpicc /usr/bin/mpicc; \ - ln -s /usr/local/${ver_mpich}/bin/mpicc /usr/bin/mpicxx; \ - ln -s /usr/local/${ver_mpich}/bin/mpicc /usr/bin/mpif90; \ - ln -s /usr/local/${ver_mpich}/bin/mpicc /usr/bin/mpifort diff --git a/dockerfiles/libs-gnu/Dockerfile b/dockerfiles/libs-gnu/Dockerfile deleted file mode 100644 index 6ae58e0..0000000 --- a/dockerfiles/libs-gnu/Dockerfile +++ /dev/null @@ -1,41 +0,0 @@ -# BASE-BUILD Dockerfile for running flow123d -ARG images_version -FROM flow123d/base-build-gnu:${images_version} -MAINTAINER Jan Hybs -ARG BUILD_TYPE - -# auxiliary build image -# just build libraries Dbug or Release using ${BUILD_TYPE} variable -COPY libs-build-gnu /libs-build-gnu - -# Need to copy these into ../libs-dbg/Docrefile -ARG ver_yamlcpp -ARG ver_armadillo -ARG ver_mpich -ARG ver_petsc -ARG ver_hypre -ARG ver_bddcml -ARG ver_permon - -RUN echo "*** building YAMLCPP ***"; \ - make -C libs-build-gnu/yamlcpp build_type=${BUILD_TYPE} version=$ver_yamlcpp install - -RUN echo "*** building Armadillo ***"; \ - make -C libs-build-gnu/armadillo build_type=${BUILD_TYPE} version=$ver_armadillo install - - -RUN echo "*** building MPICH ***"; \ - make -C libs-build-gnu/mpich build_type=${BUILD_TYPE} version=$ver_mpich install - - -RUN echo "*** building PETSC ***"; \ - make -C libs-build-gnu/petsc build_type=${BUILD_TYPE} mpich_lib=mpich_${ver_mpich} version=${ver_petsc} hypre_version=${ver_hypre} install - - -RUN echo "*** building BDDCML ***"; \ - make -C libs-build-gnu/bddcml build_type=${BUILD_TYPE} version=${ver_bddcml} mpich_lib=mpich_${ver_mpich} petsc_lib=petsc_${ver_petsc} install - - -RUN echo "*** building Permon ***"; \ - make -C libs-build-gnu/permon build_type=${BUILD_TYPE} version=${ver_permon} petsc_lib=petsc_${ver_petsc} install -#make build_type=Debug version=3.15.0 petsc_lib=petsc_3.15.1 install diff --git a/images_version b/images_version index 1454f6e..c4e41f9 100644 --- a/images_version +++ b/images_version @@ -1 +1 @@ -4.0.1 +4.0.3 diff --git a/makefile b/makefile index 4ea1895..c24702b 100644 --- a/makefile +++ b/makefile @@ -12,14 +12,14 @@ build=docker build --build-arg images_version=$(images_version) build_gnu=$(build) -f Dockerfile-gnu build_intel=$(build) -f Dockerfile-intel run=docker run -v ${PWD}/$(build_dir):/build_dir -w /build_dir -versions=--build-arg ver_yamlcpp=0.6.3 \ - --build-arg ver_armadillo=10.5.2 \ - --build-arg ver_mpich=3.4.2 \ - --build-arg ver_petsc=3.17.0 \ - --build-arg ver_hypre=2.24.0 \ +versions=--build-arg ver_yamlcpp=0e6e28d \ + --build-arg ver_armadillo=12.2.0 \ + --build-arg ver_mpich=4.0.3 \ + --build-arg ver_petsc=v3.18.6 \ + --build-arg ver_hypre=2.25.0 \ --build-arg ver_bddcml=2.6 \ - --build-arg ver_permon=3.17.0 - + --build-arg ver_permon=3.18.0 +ver_boost=--build-arg boost_version=1.74 # TODO: write versions available into the image and use autoamticaly in Flow123d configuration @@ -32,11 +32,11 @@ versions=--build-arg ver_yamlcpp=0.6.3 \ .PHONY: img-base-intel img-base-intel: dockerfiles/base/Dockerfile-intel dockerfiles/base/entrypoint.sh - cd dockerfiles/base && $(build_intel) --tag flow123d/base-intel:$(images_version) . + cd dockerfiles/base && $(build_intel) $(ver_boost) --tag flow123d/base-intel:$(images_version) . .PHONY: img-base-build-intel img-base-build-intel: img-base-intel dockerfiles/base-build/Dockerfile-intel - cd dockerfiles/base-build && $(build_intel) --tag flow123d/base-build-intel:$(images_version) . + cd dockerfiles/base-build && $(build_intel) $(ver_boost) --tag flow123d/base-build-intel:$(images_version) . libs_dbg:=libs-build-intel-dbg .PHONY: libs-build-intel-dbg @@ -71,30 +71,37 @@ img-install-intel: img-base-intel $(libs_rel) .PHONY: img-base-gnu img-base-gnu: dockerfiles/base/Dockerfile-gnu dockerfiles/base/entrypoint.sh - cd dockerfiles/base && $(build_gnu) --tag flow123d/base-gnu:$(images_version) . + cd dockerfiles/base && $(build_gnu) $(ver_boost) --tag flow123d/base-gnu:$(images_version) . .PHONY: img-base-build-gnu img-base-build-gnu: img-base-gnu dockerfiles/base-build/Dockerfile-gnu - cd dockerfiles/base-build && $(build_gnu) --tag flow123d/base-build-gnu:$(images_version) . + cd dockerfiles/base-build && $(build_gnu) $(ver_boost) --tag flow123d/base-build-gnu:$(images_version) . +build_gnu_dbg:=cd dockerfiles/flow-dev-gnu && $(build) $(versions) --build-arg BUILD_TYPE=Debug libs_dbg:=libs-build-gnu-dbg .PHONY: $(libs_dbg) -$(libs_dbg): img-base-build-gnu dockerfiles/libs-gnu/Dockerfile - cd dockerfiles/libs-gnu && $(build) $(versions) --build-arg BUILD_TYPE=Debug --tag flow123d/$(libs_dbg):$(images_version) . +$(libs_dbg): img-base-build-gnu dockerfiles/flow-dev-gnu/Dockerfile + $(build_gnu_dbg) --target libs-build --tag flow123d/$(libs_dbg):$(images_version) . .PHONY: img-flow-dev-gnu-dbg img-flow-dev-gnu-dbg: $(libs_dbg) dockerfiles/flow-dev-gnu/Dockerfile - cd dockerfiles/flow-dev-gnu && $(build) $(versions) --build-arg BUILD_TYPE=Debug --build-arg source_image=flow123d/$(libs_dbg):$(images_version) --tag flow123d/flow-dev-gnu-dbg:$(images_version) . + $(build_gnu_dbg) --build-arg source_image=flow123d/$(libs_dbg):$(images_version) --target flow-dev-gnu --tag flow123d/flow-dev-gnu-dbg:$(images_version) . +build_gnu_rel:=cd dockerfiles/flow-dev-gnu && $(build) $(versions) --build-arg BUILD_TYPE=Release libs_rel:=libs-build-gnu-rel .PHONY: $(libs_rel) -$(libs_rel): img-base-build-gnu dockerfiles/libs-gnu/Dockerfile - cd dockerfiles/libs-gnu && $(build) $(versions) --build-arg BUILD_TYPE=Release --tag flow123d/$(libs_rel):$(images_version) . +$(libs_rel): img-base-build-gnu dockerfiles/flow-dev-gnu/Dockerfile + $(build_gnu_rel) --target libs-build --tag flow123d/$(libs_rel):$(images_version) . .PHONY: img-flow-dev-gnu-rel img-flow-dev-gnu-rel: $(libs_rel) dockerfiles/flow-dev-gnu/Dockerfile - cd dockerfiles/flow-dev-gnu && $(build) $(versions) --build-arg BUILD_TYPE=Release --build-arg source_image=flow123d/$(libs_rel):$(images_version) --tag flow123d/flow-dev-gnu-rel:$(images_version) . + $(build_gnu_rel) --build-arg source_image=flow123d/$(libs_rel):$(images_version) --target flow-dev-gnu --tag flow123d/flow-dev-gnu-rel:$(images_version) . + +.PHONY: img-install-gnu +img-install-gnu: img-base-gnu $(libs_rel) dockerfiles/flow-dev-gnu/Dockerfile + $(build_gnu_rel) --build-arg source_image=flow123d/$(libs_rel):$(images_version) --target install-gnu --tag flow123d/install-gnu:$(images_version) . + # .PHONY: img-flow-dev-gnu-profile # img-flow-dev-gnu-profile: img-flow-dev-gnu-rel # cd dockerfiles/flow-dev-profile && $(build) --build-arg source_image=flow123d/flow-dev-gnu-rel:$(images_version) --tag flow123d/flow-dev-gnu-profile:$(images_version) . @@ -103,9 +110,6 @@ img-flow-dev-gnu-rel: $(libs_rel) dockerfiles/flow-dev-gnu/Dockerfile .PHONY: flow-dev-gnu flow-dev-gnu: img-install-gnu img-flow-dev-gnu-dbg img-flow-dev-gnu-rel # img-flow-dev-gnu-profile --PHONY: img-install-gnu -img-install-gnu: img-base-gnu $(libs_rel) - cd dockerfiles/install-gnu && $(build) $(versions) --build-arg source_image=flow123d/$(libs_rel):$(images_version) --tag flow123d/install-gnu:$(images_version) . # Push all public images. diff --git a/server/ubuntu-16.04.0/Dockerfile b/server/ubuntu-16.04.0/Dockerfile deleted file mode 100644 index 711b431..0000000 --- a/server/ubuntu-16.04.0/Dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -FROM ubuntu:16.04 -MAINTAINER Jan Hybs - -# add link for bash -RUN rm /bin/sh && ln -s /bin/bash /bin/sh - -# install sudo (for 16.04) -RUN apt-get update && apt-get install -y sudo - - -# preq -RUN sudo apt-get update && sudo apt-get install -y - nano \ - wget \ - git \ - apt-transport-https \ - ca-certificates \ - apparmor \ - man \ - python \ - git \ - python-pip - - -# install docker -# alt way to install wget -qO- https://get.docker.com/ | sh -RUN sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D -RUN echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" > /etc/apt/sources.list.d/docker.list -RUN sudo apt-get update -RUN sudo apt-get purge lxc-docker -RUN sudo apt-cache policy docker-engine -RUN sudo apt-get install docker-engine - - -# install jenkins -RUN wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - -RUN sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' -RUN sudo apt-get update -RUN sudo apt-get install -y jenkins \ No newline at end of file diff --git a/server/ubuntu-16.04.1/Dockerfile b/server/ubuntu-16.04.1/Dockerfile deleted file mode 100644 index 8fddf1b..0000000 --- a/server/ubuntu-16.04.1/Dockerfile +++ /dev/null @@ -1,33 +0,0 @@ -FROM ubuntu:16.04 -MAINTAINER Jan Hybs - -# add link for bash -RUN rm /bin/sh && ln -s /bin/bash /bin/sh - -# install sudo (for 16.04) -RUN apt-get update && apt-get install -y sudo - - -# preq -RUN sudo apt-get update && sudo apt-get install -y \ - nano \ - wget \ - git \ - apt-transport-https \ - ca-certificates \ - apparmor \ - man \ - python \ - git \ - python-pip - - -# install docker -RUN sudo apt-get install -y docker.io - - -# install jenkins -RUN wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - -RUN sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' -RUN sudo apt-get update -RUN sudo apt-get install -y jenkins \ No newline at end of file diff --git a/server/ubuntu-16.04.2/Dockerfile b/server/ubuntu-16.04.2/Dockerfile deleted file mode 100755 index 12818fc..0000000 --- a/server/ubuntu-16.04.2/Dockerfile +++ /dev/null @@ -1,47 +0,0 @@ -FROM ubuntu:16.04 -MAINTAINER Jan Hybs - -# add link for bash -RUN rm /bin/sh && ln -s /bin/bash /bin/sh - -# install sudo (for 16.04) -RUN apt-get update && apt-get install -y sudo - - -# preq -RUN sudo apt-get update && sudo apt-get install -y \ - nano \ - wget \ - git \ - apt-transport-https \ - ca-certificates \ - apparmor \ - man \ - python \ - git \ - python-pip - - -# install docker -# alt way to install -# RUN wget -qO- https://get.docker.com/ | sh - - -# install jenkins -RUN wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - -RUN sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' -RUN sudo apt-get update -RUN sudo apt-get install -y jenkins - -# copy files -# COPY plugins.sh /usr/local/bin/plugins.sh -# COPY install-plugins.sh /usr/local/bin/install-plugins.sh -# COPY jenkins-support /usr/local/bin/jenkins-support -# COPY jenkins.sh /usr/local/bin/jenkins.sh -# -# # install curl and zip -# RUN sudo apt-get install -y curl zip -# ENV JENKINS_UC https://updates.jenkins.io -# -# # install plugins -# RUN /usr/local/bin/install-plugins.sh jenkins-multijob view-job-filters github build-name-setter envinject cloudbees-folder \ No newline at end of file diff --git a/server/ubuntu-16.04.2/install-plugins.sh b/server/ubuntu-16.04.2/install-plugins.sh deleted file mode 100755 index d626a52..0000000 --- a/server/ubuntu-16.04.2/install-plugins.sh +++ /dev/null @@ -1,192 +0,0 @@ -#!/bin/bash - -# Resolve dependencies and download plugins given on the command line -# -# FROM jenkins -# RUN install-plugins.sh docker-slaves github-branch-source - -set -o pipefail - -REF_DIR=${REF:-/usr/share/jenkins/ref/plugins} -FAILED="$REF_DIR/failed-plugins.txt" - -. /usr/local/bin/jenkins-support - -function getLockFile() { - echo -n "$REF_DIR/${1}.lock" -} - -function getArchiveFilename() { - echo -n "$REF_DIR/${1}.jpi" -} - -function download() { - local plugin originalPlugin version lock ignoreLockFile - plugin="$1" - version="${2:-latest}" - ignoreLockFile="$3" - lock="$(getLockFile "$plugin")" - - if [[ $ignoreLockFile ]] || mkdir "$lock" &>/dev/null; then - if ! doDownload "$plugin" "$version"; then - # some plugin don't follow the rules about artifact ID - # typically: docker-plugin - originalPlugin="$plugin" - plugin="${plugin}-plugin" - if ! doDownload "$plugin" "$version"; then - echo "Failed to download plugin: $originalPlugin or $plugin" >&2 - echo "Not downloaded: ${originalPlugin}" >> "$FAILED" - return 1 - fi - fi - - if ! checkIntegrity "$plugin"; then - echo "Downloaded file is not a valid ZIP: $(getArchiveFilename "$plugin")" >&2 - echo "Download integrity: ${plugin}" >> "$FAILED" - return 1 - fi - - resolveDependencies "$plugin" - fi -} - -function doDownload() { - local plugin version url jpi - plugin="$1" - version="$2" - jpi="$(getArchiveFilename "$plugin")" - - # If plugin already exists and is the same version do not download - if test -f "$jpi" && unzip -p "$jpi" META-INF/MANIFEST.MF | tr -d '\r' | grep "^Plugin-Version: ${version}$" > /dev/null; then - echo "Using provided plugin: $plugin" - return 0 - fi - - url="$JENKINS_UC/download/plugins/$plugin/$version/${plugin}.hpi" - - echo "Downloading plugin: $plugin from $url" - curl --connect-timeout 5 --retry 5 --retry-delay 0 --retry-max-time 60 -s -f -L "$url" -o "$jpi" - return $? -} - -function checkIntegrity() { - local plugin jpi - plugin="$1" - jpi="$(getArchiveFilename "$plugin")" - - zip -T "$jpi" >/dev/null - return $? -} - -function resolveDependencies() { - local plugin jpi dependencies - plugin="$1" - jpi="$(getArchiveFilename "$plugin")" - - # ^M below is a control character, inserted by typing ctrl+v ctrl+m - dependencies="$(unzip -p "$jpi" META-INF/MANIFEST.MF | sed -e 's# -##g' | tr '\n' '|' | sed -e 's#| ##g' | tr '|' '\n' | grep "^Plugin-Dependencies: " | sed -e 's#^Plugin-Dependencies: ##')" - - if [[ ! $dependencies ]]; then - echo " > $plugin has no dependencies" - return - fi - - echo " > $plugin depends on $dependencies" - - IFS=',' read -a array <<< "$dependencies" - - for d in "${array[@]}" - do - plugin="$(cut -d':' -f1 - <<< "$d")" - if [[ $d == *"resolution:=optional"* ]]; then - echo "Skipping optional dependency $plugin" - else - pluginInstalled="$(echo "${bundledPlugins}" | grep "^${plugin}:")" - pluginInstalled="${pluginInstalled//[$'\r']}" - if ! [ -z "${pluginInstalled}" ]; then - versionInstalled=$(versionFromPlugin "${pluginInstalled}") - versionToInstall=$(versionFromPlugin "${d}") - if versionLT "${versionInstalled}" "${versionToInstall}"; then - echo "Upgrading bundled dependency $d ($versionToInstall > $versionInstalled)" - download "$plugin" "$versionToInstall" & - else - echo "Skipping already bundled dependency $d ($versionToInstall <= $versionInstalled)" - fi - else - download "$plugin" "$(versionFromPlugin "${d}")" & - fi - fi - done - wait -} - -function bundledPlugins() { - local JENKINS_WAR=/usr/share/jenkins/jenkins.war - if [ -f $JENKINS_WAR ] - then - TEMP_PLUGIN_DIR=/tmp/plugintemp.$$ - for i in `jar tf $JENKINS_WAR | egrep '[^detached-]plugins.*\..pi' | sort` - do - rm -fr $TEMP_PLUGIN_DIR - mkdir -p $TEMP_PLUGIN_DIR - PLUGIN=`basename $i|cut -f1 -d'.'` - (cd $TEMP_PLUGIN_DIR;jar xf $JENKINS_WAR "$i";jar xvf $TEMP_PLUGIN_DIR/$i META-INF/MANIFEST.MF >/dev/null 2>&1) - VER=`egrep -i Plugin-Version "$TEMP_PLUGIN_DIR/META-INF/MANIFEST.MF"|cut -d\: -f2|sed 's/ //'` - echo "$PLUGIN:$VER" - done - rm -fr $TEMP_PLUGIN_DIR - else - rm -f $TEMP_ALREADY_INSTALLED - echo "ERROR file not found: $JENKINS_WAR" - exit 1 - fi -} - -function versionFromPlugin() { - local plugin=$1 - if [[ $plugin =~ .*:.* ]]; then - echo "${plugin##*:}" - else - echo "latest" - fi - -} - -main() { - local plugin version - - mkdir -p "$REF_DIR" || exit 1 - - # Create lockfile manually before first run to make sure any explicit version set is used. - echo "Creating initial locks..." - for plugin in "$@"; do - mkdir "$(getLockFile "${plugin%%:*}")" - done - - echo -e "\nAnalyzing war..." - bundledPlugins="$(bundledPlugins)" - - echo -e "\nDownloading plugins..." - for plugin in "$@"; do - version="" - - if [[ $plugin =~ .*:.* ]]; then - version=$(versionFromPlugin "${plugin}") - plugin="${plugin%%:*}" - fi - - download "$plugin" "$version" "true" & - done - wait - - if [[ -f $FAILED ]]; then - echo -e "\nSome plugins failed to download!\n$(<"$FAILED")" >&2 - exit 1 - fi - - echo -e "\nCleaning up locks" - rm -r "$REF_DIR"/*.lock -} - -main "$@" \ No newline at end of file diff --git a/server/ubuntu-16.04.2/jenkins-support b/server/ubuntu-16.04.2/jenkins-support deleted file mode 100755 index 6174b86..0000000 --- a/server/ubuntu-16.04.2/jenkins-support +++ /dev/null @@ -1,127 +0,0 @@ -#!/bin/bash -e - -# compare if version1 < version2 -versionLT() { - local v1; v1=$(echo $1 | cut -d '-' -f 1 ) - local q1; q1=$(echo $1 | cut -s -d '-' -f 2- ) - local v2; v2=$(echo $2 | cut -d '-' -f 1 ) - local q2; q2=$(echo $2 | cut -s -d '-' -f 2- ) - if [ "$v1" = "$v2" ]; then - if [ "$q1" = "$q2" ]; then - return 1 - else - if [ -z "$q1" ]; then - return 1 - else - if [ -z "$q2" ]; then - return 0 - else - [ "$q1" = "`echo -e "$q1\n$q2" | sort -V | head -n1`" ] - fi - fi - fi - else - [ "$v1" = "`echo -e "$v1\n$v2" | sort -V | head -n1`" ] - fi -} - -# returns a plugin version from a plugin archive -get_plugin_version() { - local archive; archive=$1 - local version; version=$(unzip -p $archive META-INF/MANIFEST.MF | grep "^Plugin-Version: " | sed -e 's#^Plugin-Version: ##') - version=${version%%[[:space:]]} - echo $version -} - -# Copy files from /usr/share/jenkins/ref into $JENKINS_HOME -# So the initial JENKINS-HOME is set with expected content. -# Don't override, as this is just a reference setup, and use from UI -# can then change this, upgrade plugins, etc. -copy_reference_file() { - f="${1%/}" - b="${f%.override}" - rel="${b:23}" - version_marker="${rel}.version_from_image" - dir=$(dirname "${b}") - local action; - local reason; - local container_version; - local image_version; - local marker_version; - local log; log=false - if [[ ${rel} == plugins/*.jpi ]]; then - container_version=$(get_plugin_version $JENKINS_HOME/${rel}) - image_version=$(get_plugin_version ${f}) - if [[ -e $JENKINS_HOME/${version_marker} ]]; then - marker_version=$(cat $JENKINS_HOME/${version_marker}) - if versionLT $marker_version $container_version; then - action="SKIPPED" - reason="Installed version ($container_version) has been manually upgraded from initial version ($marker_version)" - log=true - else - if [[ "$image_version" == "$container_version" ]]; then - action="SKIPPED" - reason="Version from image is the same as the installed version $image_version" - else - if versionLT $image_version $container_version; then - action="SKIPPED" - log=true - reason="Image version ($image_version) is older than installed version ($container_version)" - else - action="UPGRADED" - log=true - reason="Image version ($image_version) is newer than installed version ($container_version)" - fi - fi - fi - else - if [[ -n "$TRY_UPGRADE_IF_NO_MARKER" ]]; then - if [[ "$image_version" == "$container_version" ]]; then - action="SKIPPED" - reason="Version from image is the same as the installed version $image_version (no marker found)" - # Add marker for next time - echo $image_version > $JENKINS_HOME/${version_marker} - else - if versionLT $image_version $container_version; then - action="SKIPPED" - log=true - reason="Image version ($image_version) is older than installed version ($container_version) (no marker found)" - else - action="UPGRADED" - log=true - reason="Image version ($image_version) is newer than installed version ($container_version) (no marker found)" - fi - fi - fi - fi - if [[ ! -e $JENKINS_HOME/${rel} || "$action" == "UPGRADED" || $f = *.override ]]; then - action=${action:-"INSTALLED"} - log=true - mkdir -p "$JENKINS_HOME/${dir:23}" - cp -r "${f}" "$JENKINS_HOME/${rel}"; - # pin plugins on initial copy - touch "$JENKINS_HOME/${rel}.pinned" - echo $image_version > $JENKINS_HOME/${version_marker} - reason=${reason:-$image_version} - else - action=${action:-"SKIPPED"} - fi - else - if [[ ! -e $JENKINS_HOME/${rel} || $f = *.override ]] - then - action="INSTALLED" - log=true - mkdir -p "$JENKINS_HOME/${dir:23}" - cp -r "${f}" "$JENKINS_HOME/${rel}"; - else - action="SKIPPED" - fi - fi - if [[ -n "$VERBOSE" || "$log" == "true" ]]; then - if [ -z "$reason" ]; then - echo "$action $rel" >> "$COPY_REFERENCE_FILE_LOG" - else - echo "$action $rel : $reason" >> "$COPY_REFERENCE_FILE_LOG" - fi - fi -} \ No newline at end of file diff --git a/server/ubuntu-16.04.2/jenkins.sh b/server/ubuntu-16.04.2/jenkins.sh deleted file mode 100755 index 49ec276..0000000 --- a/server/ubuntu-16.04.2/jenkins.sh +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/bash -e - -: ${JENKINS_HOME:="/var/jenkins_home"} -touch "${COPY_REFERENCE_FILE_LOG}" || (echo "Can not write to ${COPY_REFERENCE_FILE_LOG}. Wrong volume permissions?" && exit 1) -echo "--- Copying files at $(date)" >> "$COPY_REFERENCE_FILE_LOG" -find /usr/share/jenkins/ref/ -type f -exec bash -c ". /usr/local/bin/jenkins-support; copy_reference_file '{}'" \; - -# if `docker run` first argument start with `--` the user is passing jenkins launcher arguments -if [[ $# -lt 1 ]] || [[ "$1" == "--"* ]]; then - eval "exec java $JAVA_OPTS -jar /usr/share/jenkins/jenkins.war $JENKINS_OPTS \"\$@\"" -fi - -# As argument is not jenkins, assume user want to run his own process, for sample a `bash` shell to explore this image -exec "$@" \ No newline at end of file diff --git a/server/ubuntu-16.04.2/plugins.sh b/server/ubuntu-16.04.2/plugins.sh deleted file mode 100755 index 3c99ff2..0000000 --- a/server/ubuntu-16.04.2/plugins.sh +++ /dev/null @@ -1,126 +0,0 @@ -#! /bin/bash - -# Parse a support-core plugin -style txt file as specification for jenkins plugins to be installed -# in the reference directory, so user can define a derived Docker image with just : -# -# FROM jenkins -# COPY plugins.txt /plugins.txt -# RUN /usr/local/bin/plugins.sh /plugins.txt -# -# Note: Plugins already installed are skipped -# - -set -e - -echo "WARN: plugins.sh is deprecated, please switch to install-plugins.sh" - -if [ -z "$1" ] -then - echo " -USAGE: - Parse a support-core plugin -style txt file as specification for jenkins plugins to be installed - in the reference directory, so user can define a derived Docker image with just : - - FROM jenkins - COPY plugins.txt /plugins.txt - RUN /usr/local/bin/plugins.sh /plugins.txt - - Note: Plugins already installed are skipped - -" - exit 1 -else - JENKINS_INPUT_JOB_LIST=$1 - if [ ! -f $JENKINS_INPUT_JOB_LIST ] - then - echo "ERROR File not found: $JENKINS_INPUT_JOB_LIST" - exit 1 - fi -fi - -# the war includes a # of plugins, to make the build efficient filter out -# the plugins so we dont install 2x - there about 17! -if [ -d $JENKINS_HOME ] -then - TEMP_ALREADY_INSTALLED=$JENKINS_HOME/preinstalled.plugins.$$.txt -else - echo "ERROR $JENKINS_HOME not found" - exit 1 -fi - -JENKINS_PLUGINS_DIR=/var/jenkins_home/plugins -if [ -d $JENKINS_PLUGINS_DIR ] -then - echo "Analyzing: $JENKINS_PLUGINS_DIR" - for i in `ls -pd1 $JENKINS_PLUGINS_DIR/*|egrep '\/$'` - do - JENKINS_PLUGIN=`basename $i` - JENKINS_PLUGIN_VER=`egrep -i Plugin-Version "$i/META-INF/MANIFEST.MF"|cut -d\: -f2|sed 's/ //'` - echo "$JENKINS_PLUGIN:$JENKINS_PLUGIN_VER" - done > $TEMP_ALREADY_INSTALLED -else - JENKINS_WAR=/usr/share/jenkins/jenkins.war - if [ -f $JENKINS_WAR ] - then - echo "Analyzing war: $JENKINS_WAR" - TEMP_PLUGIN_DIR=/tmp/plugintemp.$$ - for i in `jar tf $JENKINS_WAR | egrep '[^detached-]plugins.*\..pi' | sort` - do - rm -fr $TEMP_PLUGIN_DIR - mkdir -p $TEMP_PLUGIN_DIR - PLUGIN=`basename $i|cut -f1 -d'.'` - (cd $TEMP_PLUGIN_DIR;jar xf $JENKINS_WAR "$i";jar xvf $TEMP_PLUGIN_DIR/$i META-INF/MANIFEST.MF >/dev/null 2>&1) - VER=`egrep -i Plugin-Version "$TEMP_PLUGIN_DIR/META-INF/MANIFEST.MF"|cut -d\: -f2|sed 's/ //'` - echo "$PLUGIN:$VER" - done > $TEMP_ALREADY_INSTALLED - rm -fr $TEMP_PLUGIN_DIR - else - rm -f $TEMP_ALREADY_INSTALLED - echo "ERROR file not found: $JENKINS_WAR" - exit 1 - fi -fi - -REF=/usr/share/jenkins/ref/plugins -mkdir -p $REF -COUNT_PLUGINS_INSTALLED=0 -while read spec || [ -n "$spec" ]; do - - plugin=(${spec//:/ }); - [[ ${plugin[0]} =~ ^# ]] && continue - [[ ${plugin[0]} =~ ^\s*$ ]] && continue - [[ -z ${plugin[1]} ]] && plugin[1]="latest" - - if [ -z "$JENKINS_UC_DOWNLOAD" ]; then - JENKINS_UC_DOWNLOAD=$JENKINS_UC/download - fi - - if ! grep -q "${plugin[0]}:${plugin[1]}" $TEMP_ALREADY_INSTALLED - then - echo "Downloading ${plugin[0]}:${plugin[1]}" - curl --retry 3 --retry-delay 5 -sSL -f ${JENKINS_UC_DOWNLOAD}/plugins/${plugin[0]}/${plugin[1]}/${plugin[0]}.hpi -o $REF/${plugin[0]}.jpi - unzip -qqt $REF/${plugin[0]}.jpi - COUNT_PLUGINS_INSTALLED=`expr $COUNT_PLUGINS_INSTALLED + 1` - else - echo " ... skipping already installed: ${plugin[0]}:${plugin[1]}" - fi -done < $JENKINS_INPUT_JOB_LIST - -echo "---------------------------------------------------" -if [ $COUNT_PLUGINS_INSTALLED -gt 0 ] -then - echo "INFO: Successfully installed $COUNT_PLUGINS_INSTALLED plugins." - - if [ -d $JENKINS_PLUGINS_DIR ] - then - echo "INFO: Please restart the container for changes to take effect!" - fi -else - echo "INFO: No changes, all plugins previously installed." - -fi -echo "---------------------------------------------------" - -#cleanup -rm $TEMP_ALREADY_INSTALLED -exit 0 \ No newline at end of file