Containerized build
This commit is contained in:
committed by
Stephen Marshall
parent
5ff269d2e3
commit
4a3bdf3b53
@@ -61,7 +61,8 @@ before_script:
|
|||||||
- make deps
|
- make deps
|
||||||
- echo -en 'travis_fold:end:deps\\r'
|
- echo -en 'travis_fold:end:deps\\r'
|
||||||
- echo 'Building Developer image...' && echo -en 'travis_fold:start:build-devserver\\r'
|
- echo 'Building Developer image...' && echo -en 'travis_fold:start:build-devserver\\r'
|
||||||
- make build-devserver
|
# Use the containerized build explicitly
|
||||||
|
- make build-devserver-ctr
|
||||||
- echo -en 'travis_fold:end:build-devserver\\r'
|
- echo -en 'travis_fold:end:build-devserver\\r'
|
||||||
- echo 'Building Developer JMS test image...' && echo -en 'travis_fold:start:build-devjmstest\\r'
|
- echo 'Building Developer JMS test image...' && echo -en 'travis_fold:start:build-devjmstest\\r'
|
||||||
- make build-devjmstest
|
- make build-devjmstest
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
# Build stage to build Go code
|
# Build stage to build Go code
|
||||||
###############################################################################
|
###############################################################################
|
||||||
FROM registry.access.redhat.com/devtools/go-toolset-7-rhel7 as builder
|
FROM registry.access.redhat.com/devtools/go-toolset-7-rhel7 as builder
|
||||||
|
# FROM docker.io/centos/go-toolset-7-centos7 as builder
|
||||||
# The URL to download the MQ installer from in tar.gz format
|
# The URL to download the MQ installer from in tar.gz format
|
||||||
# This assumes an archive containing the MQ RPM install packages
|
# This assumes an archive containing the MQ RPM install packages
|
||||||
ARG MQ_URL="https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev912_linux_x86-64.tar.gz"
|
ARG MQ_URL="https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev912_linux_x86-64.tar.gz"
|
||||||
@@ -53,6 +54,7 @@ FROM registry.access.redhat.com/ubi7/ubi-minimal AS mq-server
|
|||||||
# The MQ packages to install - see install-mq.sh for default value
|
# The MQ packages to install - see install-mq.sh for default value
|
||||||
ARG MQ_URL="https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev912_linux_x86-64.tar.gz"
|
ARG MQ_URL="https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev912_linux_x86-64.tar.gz"
|
||||||
ARG MQ_PACKAGES="MQSeriesRuntime-*.rpm MQSeriesServer-*.rpm MQSeriesJava*.rpm MQSeriesJRE*.rpm MQSeriesGSKit*.rpm MQSeriesMsg*.rpm MQSeriesSamples*.rpm MQSeriesWeb*.rpm MQSeriesAMS-*.rpm"
|
ARG MQ_PACKAGES="MQSeriesRuntime-*.rpm MQSeriesServer-*.rpm MQSeriesJava*.rpm MQSeriesJRE*.rpm MQSeriesGSKit*.rpm MQSeriesMsg*.rpm MQSeriesSamples*.rpm MQSeriesWeb*.rpm MQSeriesAMS-*.rpm"
|
||||||
|
#ARG MQ_PACKAGES="ibmmq-server ibmmq-java ibmmq-jre ibmmq-gskit ibmmq-msg-.* ibmmq-samples ibmmq-web ibmmq-ams"
|
||||||
ARG MQM_UID=888
|
ARG MQM_UID=888
|
||||||
LABEL summary="IBM MQ Advanced Server"
|
LABEL summary="IBM MQ Advanced Server"
|
||||||
LABEL description="Simplify, accelerate and facilitate the reliable exchange of data with a security-rich messaging solution — trusted by the world’s most successful enterprises"
|
LABEL description="Simplify, accelerate and facilitate the reliable exchange of data with a security-rich messaging solution — trusted by the world’s most successful enterprises"
|
||||||
@@ -84,7 +86,7 @@ RUN chmod ug+x /usr/local/bin/runmqserver \
|
|||||||
&& chown mqm:root /run/termination-log \
|
&& chown mqm:root /run/termination-log \
|
||||||
&& chmod 0660 /run/termination-log
|
&& chmod 0660 /run/termination-log
|
||||||
# Always use port 1414 for MQ & 9157 for the metrics
|
# Always use port 1414 for MQ & 9157 for the metrics
|
||||||
EXPOSE 1414 9157
|
EXPOSE 1414 9157 9443
|
||||||
ENV LANG=en_US.UTF-8 AMQ_DIAGNOSTIC_MSG_SEVERITY=1 AMQ_ADDITIONAL_JSON_LOG=1 LOG_FORMAT=basic
|
ENV LANG=en_US.UTF-8 AMQ_DIAGNOSTIC_MSG_SEVERITY=1 AMQ_ADDITIONAL_JSON_LOG=1 LOG_FORMAT=basic
|
||||||
USER $MQM_UID
|
USER $MQM_UID
|
||||||
ENTRYPOINT ["runmqserver"]
|
ENTRYPOINT ["runmqserver"]
|
||||||
@@ -131,7 +133,6 @@ COPY incubating/mqadvanced-server-dev/web /etc/mqm/web
|
|||||||
RUN chown -R mqm:mqm /etc/mqm/* \
|
RUN chown -R mqm:mqm /etc/mqm/* \
|
||||||
&& chmod +x /usr/local/bin/runmq* \
|
&& chmod +x /usr/local/bin/runmq* \
|
||||||
&& install --directory --mode 0775 --owner mqm --group root /run/runmqdevserver
|
&& install --directory --mode 0775 --owner mqm --group root /run/runmqdevserver
|
||||||
EXPOSE 9443
|
|
||||||
ENV MQ_BETA_ENABLE_WEB_SERVER=1
|
ENV MQ_BETA_ENABLE_WEB_SERVER=1
|
||||||
USER $MQM_UID
|
USER $MQM_UID
|
||||||
ENTRYPOINT ["runmqdevserver"]
|
ENTRYPOINT ["runmqdevserver"]
|
||||||
92
Makefile
92
Makefile
@@ -38,7 +38,7 @@ MQ_TAG ?=$(MQ_VERSION)-$(ARCH)
|
|||||||
# DOCKER is the Docker command to run. Defaults to "podman" if it's available, otherwise "docker"
|
# DOCKER is the Docker command to run. Defaults to "podman" if it's available, otherwise "docker"
|
||||||
DOCKER ?= $(shell type -p podman || echo docker)
|
DOCKER ?= $(shell type -p podman || echo docker)
|
||||||
# MQ_PACKAGES specifies the MQ packages (.deb or .rpm) to install. Defaults vary on base image.
|
# MQ_PACKAGES specifies the MQ packages (.deb or .rpm) to install. Defaults vary on base image.
|
||||||
MQ_PACKAGES ?=
|
MQ_PACKAGES ?=MQSeriesRuntime-*.rpm MQSeriesServer-*.rpm MQSeriesJava*.rpm MQSeriesJRE*.rpm MQSeriesGSKit*.rpm MQSeriesMsg*.rpm MQSeriesSamples*.rpm MQSeriesWeb*.rpm MQSeriesAMS-*.rpm
|
||||||
# MQM_UID is the UID to use for the "mqm" user
|
# MQM_UID is the UID to use for the "mqm" user
|
||||||
MQM_UID ?= 888
|
MQM_UID ?= 888
|
||||||
|
|
||||||
@@ -69,6 +69,14 @@ SPACE:= $(EMPTY) $(EMPTY)
|
|||||||
# MQ_VERSION_VRM is MQ_VERSION with only the Version, Release and Modifier fields (no Fix field). e.g. 9.1.2 instead of 9.1.2.0
|
# MQ_VERSION_VRM is MQ_VERSION with only the Version, Release and Modifier fields (no Fix field). e.g. 9.1.2 instead of 9.1.2.0
|
||||||
MQ_VERSION_VRM=$(subst $(SPACE),.,$(wordlist 1,3,$(subst .,$(SPACE),$(MQ_VERSION))))
|
MQ_VERSION_VRM=$(subst $(SPACE),.,$(wordlist 1,3,$(subst .,$(SPACE),$(MQ_VERSION))))
|
||||||
|
|
||||||
|
# Set variable if running on a Red Hat Enterprise Linux host
|
||||||
|
ifneq ($(wildcard /etc/redhat-release),)
|
||||||
|
REDHAT_RELEASE = $(shell cat /etc/redhat-release)
|
||||||
|
ifeq "$(findstring Red Hat,$(REDHAT_RELEASE))" "Red Hat"
|
||||||
|
RHEL_HOST = "true"
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
ifneq (,$(findstring Microsoft,$(shell uname -r)))
|
ifneq (,$(findstring Microsoft,$(shell uname -r)))
|
||||||
DOWNLOADS_DIR=$(patsubst /mnt/c%,C:%,$(realpath ./downloads/))
|
DOWNLOADS_DIR=$(patsubst /mnt/c%,C:%,$(realpath ./downloads/))
|
||||||
else
|
else
|
||||||
@@ -182,7 +190,7 @@ test-advancedserver-cover: test/docker/vendor coverage
|
|||||||
tail -q -n +2 ./coverage/unit.cov ./coverage/docker.cov >> ./coverage/combined.cov
|
tail -q -n +2 ./coverage/unit.cov ./coverage/docker.cov >> ./coverage/combined.cov
|
||||||
go tool cover -html=./coverage/combined.cov -o ./coverage/combined.html
|
go tool cover -html=./coverage/combined.cov -o ./coverage/combined.html
|
||||||
|
|
||||||
define docker-build-mq
|
define build-mq
|
||||||
# Create a temporary network to use for the build
|
# Create a temporary network to use for the build
|
||||||
$(DOCKER) network create build
|
$(DOCKER) network create build
|
||||||
# Start a web server to host the MQ downloadable (tar.gz) file
|
# Start a web server to host the MQ downloadable (tar.gz) file
|
||||||
@@ -193,28 +201,48 @@ define docker-build-mq
|
|||||||
--network-alias build \
|
--network-alias build \
|
||||||
--volume $(DOWNLOADS_DIR):/usr/share/nginx/html:ro \
|
--volume $(DOWNLOADS_DIR):/usr/share/nginx/html:ro \
|
||||||
--detach \
|
--detach \
|
||||||
nginx:alpine
|
docker.io/nginx:alpine
|
||||||
# Build the new image
|
# Build the new image
|
||||||
$(DOCKER) build \
|
$(DOCKER) build \
|
||||||
--tag $1:$2 \
|
--tag $1:$2 \
|
||||||
--file $3 \
|
--file $3 \
|
||||||
--network build \
|
--network build \
|
||||||
--build-arg MQ_URL=http://build:80/$4 \
|
--build-arg MQ_URL=http://build:80/$4 \
|
||||||
|
--build-arg MQ_PACKAGES="$(MQ_PACKAGES)" \
|
||||||
--build-arg IMAGE_REVISION="$(IMAGE_REVISION)" \
|
--build-arg IMAGE_REVISION="$(IMAGE_REVISION)" \
|
||||||
--build-arg IMAGE_SOURCE="$(IMAGE_SOURCE)" \
|
--build-arg IMAGE_SOURCE="$(IMAGE_SOURCE)" \
|
||||||
--build-arg IMAGE_TAG="$1:$2" \
|
--build-arg IMAGE_TAG="$1:$2" \
|
||||||
--build-arg MQM_UID=$(MQM_UID) \
|
--build-arg MQM_UID=$(MQM_UID) \
|
||||||
--label version=$7 \
|
--label version=$(MQ_VERSION) \
|
||||||
--label name=$1 \
|
--label name=$1 \
|
||||||
--label build-date=$(shell date +%Y-%m-%dT%H:%M:%S%z) \
|
--label build-date=$(shell date +%Y-%m-%dT%H:%M:%S%z) \
|
||||||
--label release="" \
|
--label release="" \
|
||||||
--label vcs-ref=$(IMAGE_REVISION) \
|
--label vcs-ref=$(IMAGE_REVISION) \
|
||||||
--label vcs-type=git \
|
--label vcs-type=git \
|
||||||
--label vcs-url=$(IMAGE_SOURCE) \
|
--label vcs-url=$(IMAGE_SOURCE) \
|
||||||
--target $8 \
|
--target $5 \
|
||||||
. ; $(DOCKER) kill $(BUILD_SERVER_CONTAINER) && $(DOCKER) network rm build
|
. ; $(DOCKER) kill $(BUILD_SERVER_CONTAINER) && $(DOCKER) network rm build
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define build-mq-ctr
|
||||||
|
buildah/mq-buildah $1 $2 \
|
||||||
|
--file /src/Dockerfile-server \
|
||||||
|
--build-arg MQ_URL="file:///src/downloads/$3" \
|
||||||
|
--build-arg MQ_PACKAGES="$(MQ_PACKAGES)" \
|
||||||
|
--build-arg IMAGE_REVISION="$(IMAGE_REVISION)" \
|
||||||
|
--build-arg IMAGE_SOURCE="$(IMAGE_SOURCE)" \
|
||||||
|
--build-arg IMAGE_TAG="$1:$2" \
|
||||||
|
--build-arg MQM_UID=$(MQM_UID) \
|
||||||
|
--label version=$(MQ_VERSION) \
|
||||||
|
--label name=$1 \
|
||||||
|
--label build-date=$(shell date +%Y-%m-%dT%H:%M:%S%z) \
|
||||||
|
--label release="" \
|
||||||
|
--label vcs-ref=$(IMAGE_REVISION) \
|
||||||
|
--label vcs-type=git \
|
||||||
|
--label vcs-url=$(IMAGE_SOURCE) \
|
||||||
|
--target $4
|
||||||
|
endef
|
||||||
|
|
||||||
DOCKER_SERVER_VERSION=$(shell docker version --format "{{ .Server.Version }}")
|
DOCKER_SERVER_VERSION=$(shell docker version --format "{{ .Server.Version }}")
|
||||||
DOCKER_CLIENT_VERSION=$(shell docker version --format "{{ .Client.Version }}")
|
DOCKER_CLIENT_VERSION=$(shell docker version --format "{{ .Client.Version }}")
|
||||||
.PHONY: docker-version
|
.PHONY: docker-version
|
||||||
@@ -223,33 +251,53 @@ docker-version:
|
|||||||
@test "$(word 1,$(subst ., ,$(DOCKER_SERVER_VERSION)))" -ge "17" || ("$(word 1,$(subst ., ,$(DOCKER_SERVER_VERSION)))" -eq "17" && "$(word 2,$(subst ., ,$(DOCKER_CLIENT_VERSION)))" -ge "05") || (echo "Error: Docker server 17.05 or greater is required" && exit 1)
|
@test "$(word 1,$(subst ., ,$(DOCKER_SERVER_VERSION)))" -ge "17" || ("$(word 1,$(subst ., ,$(DOCKER_SERVER_VERSION)))" -eq "17" && "$(word 2,$(subst ., ,$(DOCKER_CLIENT_VERSION)))" -ge "05") || (echo "Error: Docker server 17.05 or greater is required" && exit 1)
|
||||||
|
|
||||||
.PHONY: build-advancedserver
|
.PHONY: build-advancedserver
|
||||||
build-advancedserver: MQ_SDK_ARCHIVE=$(MQ_ARCHIVE)
|
ifdef RHEL_HOST
|
||||||
build-advancedserver: downloads/$(MQ_ARCHIVE) docker-version #build-golang-sdk-ex
|
# Build using Buildah inside a container on RHEL hosts
|
||||||
|
build-advancedserver: build-advancedserver-ctr
|
||||||
|
else
|
||||||
|
build-advancedserver: build-advancedserver-host
|
||||||
|
endif
|
||||||
|
|
||||||
|
.PHONY: build-advancedserver-host
|
||||||
|
build-advancedserver-host: downloads/$(MQ_ARCHIVE) docker-version
|
||||||
$(info $(SPACER)$(shell printf $(TITLE)"Build $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG)"$(END)))
|
$(info $(SPACER)$(shell printf $(TITLE)"Build $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG)"$(END)))
|
||||||
$(call docker-build-mq,$(MQ_IMAGE_ADVANCEDSERVER),$(MQ_TAG),Dockerfile-server,$(MQ_ARCHIVE),"4486e8c4cc9146fd9b3ce1f14a2dfc5b","IBM MQ Advanced",$(MQ_VERSION),mq-server)
|
$(call build-mq,$(MQ_IMAGE_ADVANCEDSERVER),$(MQ_TAG),Dockerfile-server,$(MQ_ARCHIVE),mq-server)
|
||||||
|
|
||||||
|
.PHONY: buildah-advancedserver-host
|
||||||
|
build-advancedserver-ctr: downloads/$(MQ_ARCHIVE)
|
||||||
|
$(info $(shell printf $(TITLE)"Build $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG) in a container"$(END)))
|
||||||
|
$(call build-mq-ctr,$(MQ_IMAGE_ADVANCEDSERVER),$(MQ_TAG),$(MQ_ARCHIVE),mq-server)
|
||||||
|
|
||||||
.PHONY: build-devserver
|
.PHONY: build-devserver
|
||||||
build-devserver: downloads/$(MQ_ARCHIVE_DEV) docker-version #build-golang-sdk-ex
|
ifdef RHEL_HOST
|
||||||
$(info $(shell printf $(TITLE)"Build $(MQ_IMAGE_DEVSERVER_BASE):$(MQ_TAG)"$(END)))
|
# Build using Buildah inside a container on RHEL hosts
|
||||||
$(call docker-build-mq,$(MQ_IMAGE_DEVSERVER),$(MQ_TAG),Dockerfile-server,$(MQ_ARCHIVE_DEV),"98102d16795c4263ad9ca075190a2d4d","IBM MQ Advanced for Developers (Non-Warranted)",$(MQ_VERSION),mq-dev-server)
|
build-devserver: build-devserver-ctr
|
||||||
|
else
|
||||||
|
build-devserver: build-devserver-host
|
||||||
|
endif
|
||||||
|
|
||||||
|
.PHONY: build-devserver-host
|
||||||
|
build-devserver-host: downloads/$(MQ_ARCHIVE_DEV) docker-version
|
||||||
|
$(info $(shell printf $(TITLE)"Build $(MQ_IMAGE_DEVSERVER):$(MQ_TAG)"$(END)))
|
||||||
|
$(call build-mq,$(MQ_IMAGE_DEVSERVER),$(MQ_TAG),Dockerfile-server,$(MQ_ARCHIVE_DEV),mq-dev-server)
|
||||||
|
|
||||||
|
.PHONY: buildah-devserver-ctr
|
||||||
|
build-devserver-ctr: downloads/$(MQ_ARCHIVE_DEV)
|
||||||
|
$(info $(shell printf $(TITLE)"Build $(MQ_IMAGE_DEVSERVER):$(MQ_TAG) in a container"$(END)))
|
||||||
|
$(call build-mq-ctr,$(MQ_IMAGE_DEVSERVER),$(MQ_TAG),$(MQ_ARCHIVE_DEV),mq-dev-server)
|
||||||
|
|
||||||
.PHONY: build-advancedserver-cover
|
.PHONY: build-advancedserver-cover
|
||||||
build-advancedserver-cover: docker-version
|
build-advancedserver-cover: docker-version
|
||||||
$(DOCKER) build --build-arg BASE_IMAGE=$(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG) -t $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG)-cover -f Dockerfile-server.cover .
|
$(DOCKER) build --build-arg BASE_IMAGE=$(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG) -t $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG)-cover -f Dockerfile-server.cover .
|
||||||
|
|
||||||
.PHONY: build-explorer
|
.PHONY: build-explorer
|
||||||
ifeq "$(findstring ubuntu,$(BASE_IMAGE))" "ubuntu"
|
build-explorer: downloads/$(MQ_ARCHIVE_DEV)
|
||||||
build-explorer: MQ_PACKAGES=ibmmq-explorer
|
$(call build-mq,mq-explorer,latest-$(ARCH),incubating/mq-explorer/Dockerfile,$(MQ_ARCHIVE_DEV),mq-explorer)
|
||||||
else
|
|
||||||
build-explorer: MQ_PACKAGES=MQSeriesRuntime*.rpm MQSeriesJRE*.rpm MQSeriesExplorer*.rpm
|
|
||||||
endif
|
|
||||||
build-explorer: downloads/$(MQ_ARCHIVE_DEV) docker-pull
|
|
||||||
$(call docker-build-mq,mq-explorer:latest-$(ARCH),incubating/mq-explorer/Dockerfile,$(MQ_ARCHIVE_DEV),"98102d16795c4263ad9ca075190a2d4d","IBM MQ Advanced for Developers (Non-Warranted)",$(MQ_VERSION),"ubuntu:16.04")
|
|
||||||
|
|
||||||
.PHONY: docker-pull
|
|
||||||
docker-pull:
|
|
||||||
$(DOCKER) pull $(BASE_IMAGE)
|
|
||||||
|
|
||||||
|
.PHONY: build-sdk
|
||||||
|
build-sdk: downloads/$(MQ_ARCHIVE_DEV)
|
||||||
|
$(info $(shell printf $(TITLE)"Build $(MQ_IMAGE_SDK)"$(END)))
|
||||||
|
$(call build-mq,mq-sdk,$(MQ_TAG),incubating/mq-sdk/Dockerfile,$(MQ_SDK_ARCHIVE),mq-sdk)
|
||||||
|
|
||||||
.PHONY: debug-vars
|
.PHONY: debug-vars
|
||||||
debug-vars:
|
debug-vars:
|
||||||
|
|||||||
23
buildah/Dockerfile
Normal file
23
buildah/Dockerfile
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# © Copyright IBM Corporation 2019
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
# Fedora includes more recent versions of buildah (need buildah V1.7 to get
|
||||||
|
# multi-stage builds to work properly)
|
||||||
|
FROM docker.io/fedora:29
|
||||||
|
RUN yum install -y buildah
|
||||||
|
COPY build.sh /usr/local/bin/build
|
||||||
|
RUN chmod +x /usr/local/bin/build
|
||||||
|
ENV STORAGE_DRIVER=vfs
|
||||||
|
ENV BUILDAH_ISOLATION=chroot
|
||||||
|
ENTRYPOINT ["build"]
|
||||||
41
buildah/build.sh
Normal file
41
buildah/build.sh
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# -*- mode: sh -*-
|
||||||
|
# © Copyright IBM Corporation 2019
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
# Build a container image from a Dockerfile using Buildah
|
||||||
|
# If the Docker socket is available, the image will be pushed to Docker once built.
|
||||||
|
|
||||||
|
readonly IMAGE=$1:$2
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
readonly SRC="/src"
|
||||||
|
readonly OCI_DIR="/var/oci"
|
||||||
|
|
||||||
|
echo "****************************************"
|
||||||
|
echo " Inside the Buildah container"
|
||||||
|
echo "****************************************"
|
||||||
|
set -ex
|
||||||
|
# Build using the supplied options. Always pass the source directory in, and
|
||||||
|
# use it as the build context
|
||||||
|
buildah build-using-dockerfile --tag ${IMAGE} --volume /src:/src "$@" /src
|
||||||
|
|
||||||
|
if [ -e ${OCI_DIR} ]; then
|
||||||
|
buildah push ${IMAGE} oci-archive:${OCI_DIR}/${IMAGE}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e /var/run/docker.sock ]; then
|
||||||
|
buildah push ${IMAGE} docker-daemon:${IMAGE}
|
||||||
|
fi
|
||||||
51
buildah/mq-buildah
Executable file
51
buildah/mq-buildah
Executable file
@@ -0,0 +1,51 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# -*- mode: sh -*-
|
||||||
|
# © Copyright IBM Corporation 2019
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
# Build and run a container image with Buildah installed
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo "Usage: $0 imageName imageTag buildah-options"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
readonly SCRIPT_DIR="$( cd "$(dirname "$0")" ; pwd -P )"
|
||||||
|
readonly DIR=${SCRIPT_DIR}/..
|
||||||
|
readonly BUILDAH_IMAGE=mq-buildah
|
||||||
|
RUN_OPTS="--volume ${DIR}:/src --cap-add SYS_ADMIN --rm --interactive --tty"
|
||||||
|
CMD="docker"
|
||||||
|
|
||||||
|
# If Docker is installed, then map the Docker socket into the container, to
|
||||||
|
# allow buildah to push the resulting image into Docker's image store
|
||||||
|
# WARNING: This means that the buildah container can do anything the "docker"
|
||||||
|
# can do.
|
||||||
|
command -v docker
|
||||||
|
if [[ $? == 0 && -e /var/run/docker.sock ]]; then
|
||||||
|
RUN_OPTS="${RUN_OPTS} --volume /var/run/docker.sock:/var/run/docker.sock"
|
||||||
|
fi
|
||||||
|
|
||||||
|
command -v podman
|
||||||
|
if [[ $? -eq 0 ]]; then
|
||||||
|
CMD="podman"
|
||||||
|
OCI_DIR="/tmp/mq-buildah"
|
||||||
|
mkdir -p ${OCI_DIR}
|
||||||
|
RUN_OPTS="${RUN_OPTS} --volume ${OCI_DIR}:/var/oci"
|
||||||
|
echo "Image archives will be written to ${OCI_DIR}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
${CMD} build --tag ${BUILDAH_IMAGE} --file ${SCRIPT_DIR}/Dockerfile ${SCRIPT_DIR}
|
||||||
|
set -x
|
||||||
|
${CMD} run ${RUN_OPTS} ${BUILDAH_IMAGE} "$@"
|
||||||
@@ -36,6 +36,11 @@ Run `make build-devserver`, which will download the latest version of MQ Advance
|
|||||||
|
|
||||||
You can use the environment variable `MQ_ARCHIVE_DEV` to specify an alternative local file to install from (which must be in the `downloads` directory).
|
You can use the environment variable `MQ_ARCHIVE_DEV` to specify an alternative local file to install from (which must be in the `downloads` directory).
|
||||||
|
|
||||||
|
## Building from a Red Hat Enterprise Linux host
|
||||||
|
Red Hat Enterprise Linux (RHEL) offers a suite of container tools, including Buildah for building container images, and Podman for running containers. Buildah can accept input described in a [Dockerfile](https://docs.docker.com/engine/reference/builder/). This MQ sample uses a multi-stage build, which requires a recent version of Podman, which is not yet available in Red Hat Enterprise Linux V7. Therefore, if you are on a RHEL host, then the `build-devserver` and `build-advancedserver` targets are run using a more recent version of Buildah from inside a container.
|
||||||
|
|
||||||
|
The containerized build process on a RHEL host will write an OCI compliant archive file to `/tmp/mq-buildah`. If a version of Docker is installed on the host, it will also push the image into Docker's internal image registry.
|
||||||
|
|
||||||
## Installed components
|
## Installed components
|
||||||
|
|
||||||
This image includes the core MQ server, Java, language packs, GSKit, and web server. This can be configured by setting the `MQ_PACKAGES` argument to `make`.
|
This image includes the core MQ server, Java, language packs, GSKit, and web server. This can be configured by setting the `MQ_PACKAGES` argument to `make`.
|
||||||
@@ -12,29 +12,33 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM ubuntu:16.04
|
FROM registry.access.redhat.com/ubi7/ubi-minimal AS mq-explorer
|
||||||
|
|
||||||
# The URL to download the MQ installer from in tar.gz format
|
# The URL to download the MQ installer from in tar.gz format
|
||||||
ARG MQ_URL=https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev911_ubuntu_x86-64.tar.gz
|
ARG MQ_URL="https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev912_linux_x86-64.tar.gz"
|
||||||
|
|
||||||
# The MQ packages to install
|
# The MQ packages to install
|
||||||
ARG MQ_PACKAGES
|
ENV MQ_PACKAGES="MQSeriesRuntime*.rpm MQSeriesJRE*.rpm MQSeriesExplorer*.rpm"
|
||||||
|
|
||||||
ARG MQM_UID=999
|
ARG MQM_UID=888
|
||||||
|
|
||||||
RUN export DEBIAN_FRONTEND=noninteractive \
|
RUN microdnf install -y --nodocs gtk2 libXtst \
|
||||||
&& apt-get update \
|
&& microdnf clean all
|
||||||
&& apt-get install -y \
|
|
||||||
libgtk2.0-0 \
|
|
||||||
libxtst6
|
|
||||||
|
|
||||||
ADD install-mq.sh /usr/local/bin/
|
ADD install-mq.sh /usr/local/bin/
|
||||||
|
|
||||||
|
# Install MQ Explorer. To avoid a "text file busy" error here, we sleep before installing.
|
||||||
|
# Need to re-instate the `/var/mqm` directory after installation, to avoid MQ
|
||||||
|
# errors with some commands (e.g. `dspmqver`)
|
||||||
RUN chmod u+x /usr/local/bin/install-mq.sh \
|
RUN chmod u+x /usr/local/bin/install-mq.sh \
|
||||||
&& install-mq.sh
|
&& sleep 1 \
|
||||||
|
&& install-mq.sh $MQM_UID \
|
||||||
|
&& rm -rf /var/mqm \
|
||||||
|
&& /opt/mqm/bin/crtmqdir -f -s
|
||||||
|
|
||||||
ENV LANG=en_US.UTF-8
|
ENV LANG=en_US.UTF-8
|
||||||
|
|
||||||
# Run as mqm (999)
|
# Run as mqm
|
||||||
USER 999
|
USER $MQM_UID
|
||||||
|
|
||||||
ENTRYPOINT ["MQExplorer"]
|
ENTRYPOINT ["MQExplorer"]
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
# © Copyright IBM Corporation 2018, 2019
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
ARG BASE_IMAGE=mq-sdk:9.1.1.0-x86_64-ubuntu-16.04
|
|
||||||
|
|
||||||
FROM $BASE_IMAGE
|
|
||||||
|
|
||||||
COPY incubating/mq-golang-sdk/install-golang.sh /usr/local/bin
|
|
||||||
|
|
||||||
ENV GO_VERSION=1.10
|
|
||||||
|
|
||||||
ENV PATH="${PATH}:/usr/lib/go-${GO_VERSION}/bin:/go/bin:/usr/local/go/bin" \
|
|
||||||
CGO_CFLAGS="-I/opt/mqm/inc/" \
|
|
||||||
CGO_LDFLAGS_ALLOW="-Wl,-rpath.*" \
|
|
||||||
GOPATH="/go"
|
|
||||||
|
|
||||||
# Install the Go compiler and Git
|
|
||||||
RUN chmod +x /usr/local/bin/install-golang.sh \
|
|
||||||
&& sleep 1 \
|
|
||||||
&& install-golang.sh
|
|
||||||
|
|
||||||
WORKDIR $GOPATH
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
# IBM MQ Software Developer Kit (SDK) with Go
|
|
||||||
|
|
||||||
This image contains the MQ SDK, Git, the Go compiler, and the `build-essential` package (which includes GNU C and C++ compilers plus other essential tools like `make`).
|
|
||||||
|
|
||||||
This image doesn't contain any Go code for MQ. You can add a CGO wrapper for the MQ C client, for example [mq-golang](https://github.com/ibm-messaging/mq-golang), via your vendor directory, or directly using `go get`.
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# -*- mode: sh -*-
|
|
||||||
# © Copyright IBM Corporation 2018
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
# Fail on any non-zero return code
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
test -f /usr/bin/yum && RHEL=true || RHEL=false
|
|
||||||
test -f /usr/bin/apt-get && UBUNTU=true || UBUNTU=false
|
|
||||||
|
|
||||||
if ($UBUNTU); then
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
|
||||||
# Use a reduced set of apt repositories.
|
|
||||||
# This ensures no unsupported code gets installed, and makes the build faster
|
|
||||||
source /etc/os-release
|
|
||||||
# Figure out the correct apt URL based on the CPU architecture
|
|
||||||
CPU_ARCH=$(uname -p)
|
|
||||||
if [ ${CPU_ARCH} == "x86_64" ]; then
|
|
||||||
APT_URL="http://archive.ubuntu.com/ubuntu/"
|
|
||||||
else
|
|
||||||
APT_URL="http://ports.ubuntu.com/ubuntu-ports/"
|
|
||||||
fi
|
|
||||||
# Use a reduced set of apt repositories.
|
|
||||||
# This ensures no unsupported code gets installed, and makes the build faster
|
|
||||||
echo "deb ${APT_URL} ${UBUNTU_CODENAME} main restricted" > /etc/apt/sources.list
|
|
||||||
echo "deb ${APT_URL} ${UBUNTU_CODENAME}-updates main restricted" >> /etc/apt/sources.list
|
|
||||||
echo "deb ${APT_URL} ${UBUNTU_CODENAME}-backports main restricted universe" >> /etc/apt/sources.list;
|
|
||||||
echo "deb ${APT_URL} ${UBUNTU_CODENAME}-security main restricted" >> /etc/apt/sources.list
|
|
||||||
|
|
||||||
apt-get update
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
golang-${GO_VERSION} \
|
|
||||||
git \
|
|
||||||
ca-certificates
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ($RHEL); then
|
|
||||||
# Install additional packages required by MQ, this install process and the runtime scripts
|
|
||||||
yum -y install \
|
|
||||||
git \
|
|
||||||
curl \
|
|
||||||
tar \
|
|
||||||
gcc
|
|
||||||
|
|
||||||
cd /tmp
|
|
||||||
curl -LO https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz
|
|
||||||
tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remove any orphaned packages
|
|
||||||
$UBUNTU && apt-get autoremove -y
|
|
||||||
|
|
||||||
# Clean up cached files
|
|
||||||
$UBUNTU && rm -rf /var/lib/apt/lists/*
|
|
||||||
$RHEL && yum -y clean all
|
|
||||||
$RHEL && rm -rf /var/cache/yum/*
|
|
||||||
|
|
||||||
# Make the GOLANG directories
|
|
||||||
mkdir -p $GOPATH/src $GOPATH/bin
|
|
||||||
chmod -R 777 $GOPATH
|
|
||||||
@@ -12,19 +12,19 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
ARG BASE_IMAGE=ubuntu:16.04
|
FROM registry.access.redhat.com/rhscl/devtoolset-7-toolchain-rhel7 AS mq-sdk
|
||||||
|
#FROM docker.io/centos/devtoolset-7-toolchain-centos7 AS mq-sdk
|
||||||
FROM $BASE_IMAGE
|
|
||||||
|
|
||||||
# The URL to download the MQ installer from in tar.gz format
|
# The URL to download the MQ installer from in tar.gz format
|
||||||
# This assumes an archive containing the MQ Debian (.deb) install packages
|
# This assumes an archive containing the MQ Debian (.deb) install packages
|
||||||
ARG MQ_URL
|
ARG MQ_URL
|
||||||
|
|
||||||
# The packages to install in install-mq.sh
|
# The packages to install in install-mq.sh
|
||||||
ARG MQ_PACKAGES
|
ENV MQ_PACKAGES="MQSeriesRuntime-*.rpm MQSeriesSDK-*.rpm MQSeriesSamples*.rpm"
|
||||||
|
|
||||||
ARG MQM_UID=999
|
ENV MQM_UID=888
|
||||||
|
|
||||||
|
USER 0
|
||||||
COPY install-mq.sh /usr/local/bin/
|
COPY install-mq.sh /usr/local/bin/
|
||||||
|
|
||||||
# Install MQ. To avoid a "text file busy" error here, we sleep before installing.
|
# Install MQ. To avoid a "text file busy" error here, we sleep before installing.
|
||||||
@@ -35,3 +35,4 @@ RUN chmod u+x /usr/local/bin/install-mq.sh \
|
|||||||
&& install-mq.sh $MQM_UID \
|
&& install-mq.sh $MQM_UID \
|
||||||
&& rm -rf /var/mqm \
|
&& rm -rf /var/mqm \
|
||||||
&& /opt/mqm/bin/crtmqdir -f -s
|
&& /opt/mqm/bin/crtmqdir -f -s
|
||||||
|
USER 1001
|
||||||
@@ -23,12 +23,6 @@ test -f /usr/bin/microdnf && MICRODNF=true || MICRODNF=false
|
|||||||
test -f /usr/bin/rpm && RPM=true || RPM=false
|
test -f /usr/bin/rpm && RPM=true || RPM=false
|
||||||
test -f /usr/bin/apt-get && UBUNTU=true || UBUNTU=false
|
test -f /usr/bin/apt-get && UBUNTU=true || UBUNTU=false
|
||||||
|
|
||||||
# If MQ_PACKAGES isn't specifically set, then choose a valid set of defaults
|
|
||||||
if [ -z "$MQ_PACKAGES" ]; then
|
|
||||||
$UBUNTU && MQ_PACKAGES="ibmmq-server ibmmq-java ibmmq-jre ibmmq-gskit ibmmq-msg-.* ibmmq-samples ibmmq-ams"
|
|
||||||
$RPM && MQ_PACKAGES="MQSeriesRuntime-*.rpm MQSeriesServer-*.rpm MQSeriesJava*.rpm MQSeriesJRE*.rpm MQSeriesGSKit*.rpm MQSeriesMsg*.rpm MQSeriesSamples*.rpm MQSeriesAMS-*.rpm"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ($UBUNTU); then
|
if ($UBUNTU); then
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
# Use a reduced set of apt repositories.
|
# Use a reduced set of apt repositories.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# © Copyright IBM Corporation 2018
|
# © Copyright IBM Corporation 2018, 2019
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
# Application build environment (Maven)
|
# Application build environment (Maven)
|
||||||
###############################################################################
|
###############################################################################
|
||||||
FROM maven:3-ibmjava as builder
|
FROM docker.io/maven:3-ibmjava as builder
|
||||||
COPY pom.xml /usr/src/mymaven/
|
COPY pom.xml /usr/src/mymaven/
|
||||||
WORKDIR /usr/src/mymaven
|
WORKDIR /usr/src/mymaven
|
||||||
# Download dependencies separately, so Docker caches them
|
# Download dependencies separately, so Docker caches them
|
||||||
@@ -30,7 +30,7 @@ RUN find /usr/src/mymaven
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
# Application runtime (JRE only, no build environment)
|
# Application runtime (JRE only, no build environment)
|
||||||
###############################################################################
|
###############################################################################
|
||||||
FROM ibmjava:8-jre
|
FROM docker.io/ibmjava:8-jre
|
||||||
COPY --from=builder /usr/src/mymaven/target/*.jar /opt/app/
|
COPY --from=builder /usr/src/mymaven/target/*.jar /opt/app/
|
||||||
COPY --from=builder /usr/src/mymaven/target/lib/*.jar /opt/app/
|
COPY --from=builder /usr/src/mymaven/target/lib/*.jar /opt/app/
|
||||||
ENTRYPOINT ["java", "-classpath", "/opt/app/*", "org.junit.platform.console.ConsoleLauncher", "-p", "com.ibm.mqcontainer.test", "--details", "verbose"]
|
ENTRYPOINT ["java", "-classpath", "/opt/app/*", "org.junit.platform.console.ConsoleLauncher", "-p", "com.ibm.mqcontainer.test", "--details", "verbose"]
|
||||||
|
|||||||
Reference in New Issue
Block a user