Skip to content
This repository has been archived by the owner on Sep 26, 2019. It is now read-only.

Commit

Permalink
Push builds of master as docker development images (#1200)
Browse files Browse the repository at this point in the history
  • Loading branch information
Errorific authored Apr 1, 2019
1 parent d1b9f2c commit 92f8493
Show file tree
Hide file tree
Showing 10 changed files with 461 additions and 5 deletions.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@
*.ttf binary
*.woff binary
*.woff2 binary
goss-linux-amd64 binary
42 changes: 37 additions & 5 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ if (env.BRANCH_NAME == "master") {
])
}

def docker_image = 'docker:18.06.0-ce-dind'
def docker_image_dind = 'docker:18.06.0-ce-dind'
def docker_image = 'docker:18.06.0-ce'
def build_image = 'pegasyseng/pantheon-build:0.0.5-jdk11'

def abortPreviousBuilds() {
Expand Down Expand Up @@ -50,7 +51,7 @@ try {
def stage_name = "Unit tests node: "
node {
checkout scm
docker.image(docker_image).withRun('--privileged') { d ->
docker.image(docker_image_dind).withRun('--privileged') { d ->
docker.image(build_image).inside("--link ${d.id}:docker") {
try {
stage(stage_name + 'Prepare') {
Expand All @@ -65,6 +66,8 @@ try {
archiveArtifacts 'build/reports/**'
archiveArtifacts 'build/distributions/**'

stash allowEmpty: true, includes: 'build/distributions/pantheon-*.tar.gz', name: 'distTarBall'

junit '**/build/test-results/**/*.xml'
}
}
Expand All @@ -74,7 +77,7 @@ try {
def stage_name = "Reference tests node: "
node {
checkout scm
docker.image(docker_image).withRun('--privileged') { d ->
docker.image(docker_image_dind).withRun('--privileged') { d ->
docker.image(build_image).inside("--link ${d.id}:docker") {
try {
stage(stage_name + 'Prepare') {
Expand All @@ -98,7 +101,7 @@ try {
def stage_name = "Integration tests node: "
node {
checkout scm
docker.image(docker_image).withRun('--privileged') { d ->
docker.image(docker_image_dind).withRun('--privileged') { d ->
docker.image(build_image).inside("--link ${d.id}:docker") {
try {
stage(stage_name + 'Prepare') {
Expand Down Expand Up @@ -131,7 +134,7 @@ try {
def stage_name = "Acceptance tests node: "
node {
checkout scm
docker.image(docker_image).withRun('--privileged') { d ->
docker.image(docker_image_dind).withRun('--privileged') { d ->
docker.image(build_image).inside("--link ${d.id}:docker") {
try {
stage(stage_name + 'Prepare') {
Expand All @@ -152,6 +155,35 @@ try {
}
}
}
if (env.BRANCH_NAME == "master") {
node {
checkout scm
unstash 'distTarBall'
docker.image(docker_image_dind).withRun('--privileged') { d ->
docker.image(docker_image).inside("-e DOCKER_HOST=tcp://docker:2375 --link ${d.id}:docker") {
stage('build image') {
sh "cd docker && cp ../build/distributions/pantheon-*.tar.gz ."
pantheon = docker.build("pegasyseng/pantheon-develop:develop", "docker")
}
try {
stage('test image') {
sh "apk add bash"
sh "mkdir -p docker/reports"
sh "cd docker && bash test.sh pegasyseng/pantheon-develop:develop"
}
} finally {
junit 'docker/reports/*.xml'
sh "rm -rf docker/reports"
}
stage('push image') {
docker.withRegistry('https://registry.hub.docker.com', 'dockerhub-pegasysengci') {
pantheon.push()
}
}
}
}
}
}
} catch (e) {
currentBuild.result = 'FAILURE'
} finally {
Expand Down
1 change: 1 addition & 0 deletions docker/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pantheon-*.tar.gz
21 changes: 21 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
FROM openjdk:11.0.2-jre-slim-stretch

COPY pantheon-*.tar.gz /tmp/.
RUN tar xzf /tmp/pantheon-*.tar.gz -C /tmp && \
rm /tmp/pantheon-*.tar.gz && \
mv /tmp/pantheon-* /opt/pantheon


RUN mkdir /var/lib/pantheon
RUN mkdir /etc/pantheon/
COPY entrypoint.sh /opt/pantheon/pantheon-entrypoint.sh
RUN chmod +x /opt/pantheon/pantheon-entrypoint.sh

WORKDIR /var/lib/pantheon
VOLUME ["/var/lib/pantheon"]

EXPOSE 8545 8546 30303

ENV PANTHEON_OPTS="-Dpantheon.docker=true"

ENTRYPOINT ["/opt/pantheon/pantheon-entrypoint.sh"]
205 changes: 205 additions & 0 deletions docker/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
#!/bin/bash

set -e

if ! { [ "${1#-}" != "$1" ] || [ "$#" == 0 ] || [ "$1" == "blocks" ] || [ "$1" == "public-key" ] || [ "$1" == "password" ]; }; then
exec "$@"
fi

p2plistenset=false
rpclistenset=false
wslistenset=false

for i in "$@"; do
case "$i" in
--rpc-http-host) rpclistenset=true ;;
--rpc-http-host=*) rpclistenset=true ;;
--rpc-http-port) rpclistenset=true ;;
--rpc-http-port=*) rpclistenset=true ;;
--rpc-ws-host) wslistenset=true ;;
--rpc-ws-host=*) wslistenset=true ;;
--rpc-ws-port) wslistenset=true ;;
--rpc-ws-port=*) wslistenset=true ;;
--p2p-host) p2plistenset=true ;;
--p2p-host=*) p2plistenset=true ;;
--p2p-port) p2plistenset=true ;;
--p2p-port=*) p2plistenset=true ;;
esac
done

if $p2plistenset ; then
echo "ERROR: p2p host and port cannot be set by argument under docker, define your custom port by mapping it into the containers 30303 port"
exit 1
else
set -- "--p2p-host=0.0.0.0" "$@"
set -- "--p2p-port=30303" "$@"
fi

if $rpclistenset ; then
echo "ERROR: rpc http host and port cannot be set by argument under docker, define your custom port by mapping it into the containers 8545 port"
exit 1
else
set -- "--rpc-http-host=0.0.0.0" "$@"
set -- "--rpc-http-port=8545" "$@"
fi

if $wslistenset ; then
echo "ERROR: rpc ws host and port cannot be set by argument under docker, define your custom port by mapping it into the containers 8546 port"
exit 1
else
set -- "--rpc-ws-host=0.0.0.0" "$@"
set -- "--rpc-ws-port=8546" "$@"
fi

if [ "$P2P_ENABLED" == "false" ] || [ "$P2P_ENABLED" == "0" ]; then
set -- "--p2p-enabled=false" "$@"
fi

if [ "$DISCOVERY_ENABLED" == "false" ] || [ "$DISCOVERY_ENABLED" == "0" ]; then
set -- "--discovery-enabled=false" "$@"
fi

if [[ ! -z "$BOOTNODES" ]]; then
set -- "--bootnodes=$BOOTNODES" "$@"
fi

if [[ ! -z "$MAX_PEERS" ]]; then
set -- "$@" "--max-peers=$MAX_PEERS"
fi

if [[ ! -z "$BANNED_NODE_IDS" ]]; then
set -- "--banned-node-ids=$BANNED_NODE_IDS" "$@"
fi

if [[ ! -z "$BANNED_NODE_ID" ]]; then
set -- "--banned-node-id=$BANNED_NODE_ID" "$@"
fi

if [[ ! -z "$SYNC_MODE" ]]; then
set -- "--sync-mode=$SYNC_MODE" "$@"
fi

if [[ ! -z "$NETWORK" ]]; then
set -- "--network=$NETWORK" "$@"
fi

if [[ ! -z "$NETWORK_ID" ]]; then
set -- "--network-id=$NETWORK_ID" "$@"
fi

if [ "$RPC_HTTP_ENABLED" == "true" ] || [ "$RPC_HTTP_ENABLED" == "1" ]; then
set -- "--rpc-http-enabled=true" "$@"
fi

if [[ ! -z "$RPC_HTTP_CORS_ORIGINS" ]]; then
set -- "--rpc-http-cors-origins=$RPC_HTTP_CORS_ORIGINS" "$@"
fi

if [[ ! -z "$RPC_HTTP_API" ]]; then
set -- "--rpc-http-api=$RPC_HTTP_API" "$@"
fi

if [[ ! -z "$RPC_HTTP_APIS" ]]; then
set -- "--rpc-http-apis=$RPC_HTTP_APIS" "$@"
fi

if [ "$RPC_WS_ENABLED" == "true" ] || [ "$RPC_WS_ENABLED" == "1" ]; then
set -- "--rpc-ws-enabled=true" "$@"
fi

if [[ ! -z "$RPC_WS_API" ]]; then
set -- "--rpc-ws-api=$RPC_WS_API" "$@"
fi

if [[ ! -z "$RPC_WS_APIS" ]]; then
set -- "--rpc-ws-apis=$RPC_WS_APIS" "$@"
fi

if [[ ! -z "$RPC_WS_REFRESH_DELAY" ]]; then
set -- "--rpc-ws-refresh_delay=$RPC_WS_REFRESH_DELAY" "$@"
fi

if [ "$METRICS_ENABLED" == "true" ] || [ "$METRICS_ENABLED" == "1" ]; then
set -- "--metrics-enabled=true" "$@"
fi

if [[ ! -z "$METRICS_HOST" ]]; then
set -- "--metrics-host=$METRICS_HOST" "$@"
fi

if [[ ! -z "$METRICS_PORT" ]]; then
set -- "--metrics-port=$METRICS_PORT" "$@"
fi

if [ "$METRICS_PUSH_ENABLED" == "true" ] || [ "$METRICS_PUSH_ENABLED" == "1" ]; then
set -- "--metrics-push-enabled=true" "$@"
fi

if [[ ! -z "$METRICS_PUSH_INTERVAL" ]]; then
set -- "--metrics-push-interval=$METRICS_PUSH_INTERVAL" "$@"
fi

if [[ ! -z "$METRICS_PUSH_HOST" ]]; then
set -- "--metrics-push-host=$METRICS_PUSH_HOST" "$@"
fi

if [[ ! -z "$METRICS_PUSH_PORT" ]]; then
set -- "--metrics-push-port=$METRICS_PUSH_PORT" "$@"
fi


if [[ ! -z "$METRICS_PUSH_PROMETHEUS_JOB" ]]; then
set -- "--metrics-push-prometheus-job=$METRICS_PUSH_PROMETHEUS_JOB" "$@"
fi

if [[ ! -z "$HOST_WHITELIST" ]]; then
set -- "--host-whitelist=$HOST_WHITELIST" "$@"
fi

if [[ ! -z "$LOGGING" ]]; then
set -- "--logging=$LOGGING" "$@"
fi

if [ "$MINER_ENABLED" == "true" ] || [ "$MINER_ENABLED" == "1" ]; then
set -- "--miner-enabled=true" "$@"
fi

if [[ ! -z "$MINER_COINBASE" ]]; then
set -- "--miner-coinbase=$MINER_COINBASE" "$@"
fi

if [[ ! -z "$MIN_GAS_PRICE" ]]; then
set -- "--min-gas-price=$MIN_GAS_PRICE" "$@"
fi

if [[ ! -z "$MINER_EXTRA_DATA" ]]; then
set -- "--miner-extra-data=$MINER_EXTRA_DATA" "$@"
fi

if [ "$PERMISSIONS_NODES_ENABLED" == "true" ] || [ "$PERMISSIONS_NODES_ENABLED" == "1" ]; then
set -- "--permissions_nodes_enabled=true" "$@"
fi

if [ "$PERMISSIONS_ACCOUNTS_ENABLED" == "true" ] || [ "$PERMISSIONS_ACCOUNTS_ENABLED" == "1" ]; then
set -- "--permissions_accounts_enabled=true" "$@"
fi

if [ "$PRIVACY_ENABLED" == "true" ] || [ "$PRIVACY_ENABLED" == "1" ]; then
set -- "--privacy-enabled=true" "$@"
fi

if [[ ! -z "$PRIVACY_URL" ]]; then
set -- "--privacy-url=$PRIVACY_URL" "$@"
fi

if [[ ! -z "$PRIVACY_PUBLIC_KEY_FILE" ]]; then
set -- "--privacy-public-key-file=$PRIVACY_PUBLIC_KEY_FILE" "$@"
fi

if [[ ! -z "$PRIVACY_PRECOMPILED_ADDRESS" ]]; then
set -- "--privacy-precompiled-address=$PRIVACY_PRECOMPILED_ADDRESS" "$@"
fi

set -- "/opt/pantheon/bin/pantheon" "$@"

exec "$@"
13 changes: 13 additions & 0 deletions docker/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash

export GOSS_PATH=tests/goss-linux-amd64
export GOSS_OPTS="$GOSS_OPTS --format junit"
export GOSS_FILES_STRATEGY=cp
DOCKER_IMAGE=$1

i=0

# Test for normal unconfigured startup
GOSS_FILES_PATH=tests/01 bash tests/dgoss run $DOCKER_IMAGE > ./reports/01.xml || i=`expr $i + 1`

exit $i
Loading

0 comments on commit 92f8493

Please sign in to comment.