Merge pull request #256 from parrobe/releasetag
Add image tag into info output, add ability to print info output on d…
This commit is contained in:
@@ -22,10 +22,11 @@ FROM $BUILDER_IMAGE as builder
|
|||||||
WORKDIR /go/src/github.com/ibm-messaging/mq-container/
|
WORKDIR /go/src/github.com/ibm-messaging/mq-container/
|
||||||
ARG IMAGE_REVISION="Not specified"
|
ARG IMAGE_REVISION="Not specified"
|
||||||
ARG IMAGE_SOURCE="Not specified"
|
ARG IMAGE_SOURCE="Not specified"
|
||||||
|
ARG IMAGE_TAG="Not specified"
|
||||||
COPY cmd/ ./cmd
|
COPY cmd/ ./cmd
|
||||||
COPY internal/ ./internal
|
COPY internal/ ./internal
|
||||||
COPY vendor/ ./vendor
|
COPY vendor/ ./vendor
|
||||||
RUN go build -ldflags "-X \"main.ImageCreated=$(date --iso-8601=seconds)\" -X \"main.ImageRevision=$IMAGE_REVISION\" -X \"main.ImageSource=$IMAGE_SOURCE\"" ./cmd/runmqserver/
|
RUN go build -ldflags "-X \"main.ImageCreated=$(date --iso-8601=seconds)\" -X \"main.ImageRevision=$IMAGE_REVISION\" -X \"main.ImageSource=$IMAGE_SOURCE\" -X \"main.ImageTag=$IMAGE_TAG\"" ./cmd/runmqserver/
|
||||||
RUN go build ./cmd/chkmqready/
|
RUN go build ./cmd/chkmqready/
|
||||||
RUN go build ./cmd/chkmqhealthy/
|
RUN go build ./cmd/chkmqhealthy/
|
||||||
# Run all unit tests
|
# Run all unit tests
|
||||||
|
|||||||
@@ -205,6 +205,7 @@ define docker-build-mq
|
|||||||
--build-arg BUILDER_IMAGE=$(MQ_IMAGE_GOLANG_SDK) \
|
--build-arg BUILDER_IMAGE=$(MQ_IMAGE_GOLANG_SDK) \
|
||||||
--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" \
|
||||||
--label IBM_PRODUCT_ID=$4 \
|
--label IBM_PRODUCT_ID=$4 \
|
||||||
--label IBM_PRODUCT_NAME=$5 \
|
--label IBM_PRODUCT_NAME=$5 \
|
||||||
--label IBM_PRODUCT_VERSION=$6 \
|
--label IBM_PRODUCT_VERSION=$6 \
|
||||||
@@ -236,7 +237,7 @@ build-devserver: MQ_SDK_ARCHIVE=$(MQ_ARCHIVE_DEV)
|
|||||||
build-devserver: downloads/$(MQ_ARCHIVE_DEV) docker-version build-golang-sdk-ex
|
build-devserver: downloads/$(MQ_ARCHIVE_DEV) docker-version build-golang-sdk-ex
|
||||||
$(info $(shell printf $(TITLE)"Build $(MQ_IMAGE_DEVSERVER_BASE)"$(END)))
|
$(info $(shell printf $(TITLE)"Build $(MQ_IMAGE_DEVSERVER_BASE)"$(END)))
|
||||||
$(call docker-build-mq,$(MQ_IMAGE_DEVSERVER_BASE),Dockerfile-server,$(MQ_ARCHIVE_DEV),"98102d16795c4263ad9ca075190a2d4d","IBM MQ Advanced for Developers (Non-Warranted)",$(MQ_VERSION))
|
$(call docker-build-mq,$(MQ_IMAGE_DEVSERVER_BASE),Dockerfile-server,$(MQ_ARCHIVE_DEV),"98102d16795c4263ad9ca075190a2d4d","IBM MQ Advanced for Developers (Non-Warranted)",$(MQ_VERSION))
|
||||||
$(DOCKER) build --tag $(MQ_IMAGE_DEVSERVER) --build-arg IMAGE_SOURCE="$(IMAGE_SOURCE)" --build-arg IMAGE_REVISION="$(IMAGE_REVISION)" --build-arg BASE_IMAGE=$(MQ_IMAGE_DEVSERVER_BASE) --build-arg BUILDER_IMAGE=$(MQ_IMAGE_GOLANG_SDK) --file incubating/mqadvanced-server-dev/Dockerfile .
|
$(DOCKER) build --tag $(MQ_IMAGE_DEVSERVER) --build-arg IMAGE_SOURCE="$(IMAGE_SOURCE)" --build-arg IMAGE_REVISION="$(IMAGE_REVISION)" --build-arg IMAGE_TAG="$(MQ_IMAGE_DEVSERVER)" --build-arg BASE_IMAGE=$(MQ_IMAGE_DEVSERVER_BASE) --build-arg BUILDER_IMAGE=$(MQ_IMAGE_GOLANG_SDK) --file incubating/mqadvanced-server-dev/Dockerfile .
|
||||||
|
|
||||||
.PHONY: build-advancedserver-cover
|
.PHONY: build-advancedserver-cover
|
||||||
build-advancedserver-cover: docker-version
|
build-advancedserver-cover: docker-version
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"flag"
|
||||||
"os"
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
@@ -29,12 +30,31 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func doMain() error {
|
func doMain() error {
|
||||||
|
var infoFlag = flag.Bool("info", false, "Display debug info, then exit")
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
// Configure the logger so we can output messages
|
||||||
name, nameErr := name.GetQueueManagerName()
|
name, nameErr := name.GetQueueManagerName()
|
||||||
mf, err := configureLogger(name)
|
mf, err := configureLogger(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logTermination(err)
|
logTermination(err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check whether they only want debug info
|
||||||
|
if *infoFlag {
|
||||||
|
logVersionInfo()
|
||||||
|
logConfig()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
err = verifySingleProcess()
|
||||||
|
if err != nil {
|
||||||
|
// We don't do the normal termination here as it would create a termination file.
|
||||||
|
log.Error(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if nameErr != nil {
|
if nameErr != nil {
|
||||||
logTermination(err)
|
logTermination(err)
|
||||||
return err
|
return err
|
||||||
|
|||||||
63
cmd/runmqserver/process.go
Normal file
63
cmd/runmqserver/process.go
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
© 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.
|
||||||
|
*/
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/ibm-messaging/mq-container/internal/command"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Verifies that we are the main or only instance of this program
|
||||||
|
func verifySingleProcess() error {
|
||||||
|
programName, err := determineExecutable()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Failed to determine name of this program - %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify that there is only one runmqserver
|
||||||
|
_, err = verifyOnlyOne(programName)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("You cannot run more than one instance of this program")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verifies that there is only one instance running of the given program name.
|
||||||
|
func verifyOnlyOne(programName string) (int, error) {
|
||||||
|
out, _, _ := command.Run("ps", "-e", "--format", "cmd")
|
||||||
|
//if this goes wrong then assume we are the only one
|
||||||
|
numOfProg := strings.Count(out, programName)
|
||||||
|
if numOfProg != 1 {
|
||||||
|
return numOfProg, fmt.Errorf("Expected there to be only 1 instance of %s but found %d", programName, numOfProg)
|
||||||
|
}
|
||||||
|
return numOfProg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determines the name of the currently running executable.
|
||||||
|
func determineExecutable() (string, error) {
|
||||||
|
file, err := os.Executable()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, exec := filepath.Split(file)
|
||||||
|
return exec, nil
|
||||||
|
}
|
||||||
@@ -29,6 +29,8 @@ var (
|
|||||||
ImageRevision = "Not specified"
|
ImageRevision = "Not specified"
|
||||||
// ImageSource is the URL to get source code for building the image
|
// ImageSource is the URL to get source code for building the image
|
||||||
ImageSource = "Not specified"
|
ImageSource = "Not specified"
|
||||||
|
// ImageTag is the tag of the image
|
||||||
|
ImageTag = "Not specified"
|
||||||
)
|
)
|
||||||
|
|
||||||
func logDateStamp() {
|
func logDateStamp() {
|
||||||
@@ -43,6 +45,10 @@ func logGitCommit() {
|
|||||||
log.Printf("Image source: %v", ImageSource)
|
log.Printf("Image source: %v", ImageSource)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func logImageTag() {
|
||||||
|
log.Printf("Image tag: %v", ImageTag)
|
||||||
|
}
|
||||||
|
|
||||||
func logMQVersion() {
|
func logMQVersion() {
|
||||||
mqVersion, _, err := command.Run("dspmqver", "-b", "-f", "2")
|
mqVersion, _, err := command.Run("dspmqver", "-b", "-f", "2")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -67,5 +73,6 @@ func logVersionInfo() {
|
|||||||
logDateStamp()
|
logDateStamp()
|
||||||
logGitRepo()
|
logGitRepo()
|
||||||
logGitCommit()
|
logGitCommit()
|
||||||
|
logImageTag()
|
||||||
logMQVersion()
|
logMQVersion()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,12 +21,13 @@ ARG BUILDER_IMAGE=mq-golang-sdk:9.1.1.0-x86_64-ubuntu-16.04
|
|||||||
FROM $BUILDER_IMAGE as builder
|
FROM $BUILDER_IMAGE as builder
|
||||||
ARG IMAGE_REVISION="Not specified"
|
ARG IMAGE_REVISION="Not specified"
|
||||||
ARG IMAGE_SOURCE="Not specified"
|
ARG IMAGE_SOURCE="Not specified"
|
||||||
|
ARG IMAGE_TAG="Not specified"
|
||||||
WORKDIR /go/src/github.com/ibm-messaging/mq-container/
|
WORKDIR /go/src/github.com/ibm-messaging/mq-container/
|
||||||
COPY cmd/ ./cmd
|
COPY cmd/ ./cmd
|
||||||
COPY internal/ ./internal
|
COPY internal/ ./internal
|
||||||
COPY vendor/ ./vendor
|
COPY vendor/ ./vendor
|
||||||
# Re-build runmqserver, with code tagged with 'mqdev' enabled
|
# Re-build runmqserver, with code tagged with 'mqdev' enabled
|
||||||
RUN go build -ldflags "-X \"main.ImageCreated=$(date --iso-8601=seconds)\" -X \"main.ImageRevision=$IMAGE_REVISION\" -X \"main.ImageSource=$IMAGE_SOURCE\"" --tags 'mqdev' ./cmd/runmqserver
|
RUN go build -ldflags "-X \"main.ImageCreated=$(date --iso-8601=seconds)\" -X \"main.ImageRevision=$IMAGE_REVISION\" -X \"main.ImageSource=$IMAGE_SOURCE\" -X \"main.ImageTag=$IMAGE_TAG\"" --tags 'mqdev' ./cmd/runmqserver
|
||||||
RUN go build ./cmd/runmqdevserver/
|
RUN go build ./cmd/runmqdevserver/
|
||||||
# Run all unit tests
|
# Run all unit tests
|
||||||
RUN go test -v ./cmd/runmqdevserver/...
|
RUN go test -v ./cmd/runmqdevserver/...
|
||||||
|
|||||||
Reference in New Issue
Block a user