Skip to content

Commit 2c5b2ee

Browse files
committed
chore: semaphore2 pipeline
1 parent 1a1a604 commit 2c5b2ee

File tree

11 files changed

+228
-161
lines changed

11 files changed

+228
-161
lines changed

.semaphore/semaphore.yml

+101
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
#TODO: autopromote on master to push images
2+
# https://docs.semaphoreci.com/article/50-pipeline-yaml#auto_promote_on
3+
version: v1.0
4+
name: Buld and publich nodejs images set
5+
agent:
6+
machine:
7+
type: e1-standard-8
8+
os_image: ubuntu1804
9+
blocks:
10+
11+
### 1) build and publish core image first
12+
- name: Core nodejs image
13+
task:
14+
secrets:
15+
- name: docker-hub
16+
prologue:
17+
commands:
18+
- checkout
19+
- echo $DOCKER_PASSWORD | docker login --username $DOCKER_USERNAME --password-stdin
20+
jobs:
21+
- name: nodejs
22+
commands:
23+
- ./build.sh -f node/Dockerfile -p
24+
25+
### 2) build and publish images which has core as dependency
26+
- name: Core-dependent images
27+
task:
28+
secrets:
29+
- name: docker-hub
30+
prologue:
31+
commands:
32+
- checkout
33+
- echo $DOCKER_PASSWORD | docker login --username $DOCKER_USERNAME --password-stdin
34+
jobs:
35+
- name: onbuild
36+
commands:
37+
- ./build.sh -v onbuild -f node/Dockerfile.onbuild -p
38+
- name: tester
39+
commands:
40+
- ./build.sh -v tester -f node/Dockerfile.tester -p
41+
- name: tester-glibc
42+
commands:
43+
- ./build.sh -v tester-glibc -f node/Dockerfile.tester-glibc -p
44+
- name: ssh
45+
commands:
46+
- ./build.sh -v ssh -f node-ssh/Dockerfile -p
47+
- name: chrome
48+
commands:
49+
- ./build.sh -v chrome -f node-chrome/Dockerfile -p
50+
- name: vips
51+
commands:
52+
- ./build.sh -v vips -f node-vips/Dockerfile -p
53+
54+
### 2) build and publish images which has previous dependencies
55+
- name: Dependent images - 1
56+
task:
57+
secrets:
58+
- name: docker-hub
59+
prologue:
60+
commands:
61+
- checkout
62+
- echo $DOCKER_PASSWORD | docker login --username $DOCKER_USERNAME --password-stdin
63+
jobs:
64+
- name: ssh-onbuild
65+
commands:
66+
- ./build.sh -v ssh-onbuild -f node-ssh/Dockerfile.onbuild -p
67+
- name: chrome-onbuild
68+
commands:
69+
- ./build.sh -v chrome-onbuild -f node-chrome/Dockerfile.onbuild -p
70+
- name: chrome-tester
71+
commands:
72+
- ./build.sh -v chrome-tester -f node-chrome/Dockerfile.tester -p
73+
- name: vips-onbuild
74+
commands:
75+
- ./build.sh -v vips-onbuild -f node-vips/Dockerfile.onbuild -p
76+
- name: vips-tester
77+
commands:
78+
- ./build.sh -v vips-tester -f node-vips/Dockerfile.tester -p
79+
- name: vips-ssh
80+
commands:
81+
- ./build.sh -v vips-ssh -f node-vips-ssh/Dockerfile -p
82+
83+
### 3) build and publish images which has previous dependencies
84+
- name: Dependent images - 2
85+
task:
86+
secrets:
87+
- name: docker-hub
88+
prologue:
89+
commands:
90+
- checkout
91+
- echo $DOCKER_PASSWORD | docker login --username $DOCKER_USERNAME --password-stdin
92+
jobs:
93+
- name: vips-tester-glibc
94+
commands:
95+
- ./build.sh -v vips-tester-glibc -f node-vips/Dockerfile.tester-glibc -p
96+
- name: vips-tester-chrome
97+
commands:
98+
- ./build.sh -v vips-tester-chrome -f node-vips/Dockerfile.tester-chrome -p
99+
- name: vips-ssh-onbuild
100+
commands:
101+
- ./build.sh -v vips-ssh-onbuild -f node-vips-ssh/Dockerfile.onbuild -p

_legacy/build.sh

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
#set the DEBUG env variable to turn on debugging
6+
[[ -n "$DEBUG" ]] && set -x
7+
8+
# global env vars
9+
export \
10+
PROJECT=node \
11+
NAMESPACE=makeomatic \
12+
PUSH_NAMESPACES=makeomatic \
13+
BASE_NAME=makeomatic/node
14+
15+
BRANCH_NAME=${BRANCH_NAME:-$(git branch | grep ^*|cut -d" " -f2)}
16+
echo "working in $BRANCH_NAME"
17+
BRANCH_NAME=$(echo $BRANCH_NAME | sed -e "s/\//-/g")
18+
echo "tagging as $BRANCH_NAME"
19+
20+
# install basic scripts
21+
curl -sSL https://github.com/makeomatic/ci-scripts/raw/master/install.sh | sh -s
22+
[ -d ~/official-images ] || git clone https://github.com/docker-library/official-images.git ~/official-images
23+
24+
# add scripts to PATH
25+
export PATH=$PATH:~/ci-scripts
26+
27+
# cleanup logs
28+
rm -rf ./*.log
29+
30+
# build base node images that are used further in the project
31+
docker-build $BASE_NAME -f node/Dockerfile .
32+
docker-build -v "onbuild" $BASE_NAME -f node/Dockerfile.onbuild .
33+
docker-build -v "tester" $BASE_NAME -f node/Dockerfile.tester .
34+
docker-build -v "tester-glibc" $BASE_NAME -f node/Dockerfile.tester-glibc .
35+
# build node images with ruby
36+
# docker-build -v "ruby" $BASE_NAME -f node-ruby/Dockerfile .
37+
# build node images with ssh embedded
38+
docker-build -v "ssh" $BASE_NAME -f node-ssh/Dockerfile .
39+
docker-build -v "ssh-onbuild" $BASE_NAME -f node-ssh/Dockerfile.onbuild .
40+
# chrome-enabled images
41+
docker-build -v "chrome" $BASE_NAME -f node-chrome/Dockerfile .
42+
docker-build -v "chrome-onbuild" $BASE_NAME -f node-chrome/Dockerfile.onbuild .
43+
docker-build -v "chrome-tester" $BASE_NAME -f node-chrome/Dockerfile.tester .
44+
# build node images with libvips
45+
docker-build -v "vips" $BASE_NAME -f node-vips/Dockerfile .
46+
docker-build -v "vips-onbuild" $BASE_NAME -f node-vips/Dockerfile.onbuild .
47+
docker-build -v "vips-tester" $BASE_NAME -f node-vips/Dockerfile.tester .
48+
docker-build -v "vips-tester-glibc" $BASE_NAME -f node-vips/Dockerfile.tester-glibc .
49+
docker-build -v "vips-tester-chrome" $BASE_NAME -f node-vips/Dockerfile.tester-chrome .
50+
# build node images with libvips & ssh
51+
docker-build -v "vips-ssh" $BASE_NAME -f node-vips-ssh/Dockerfile .
52+
docker-build -v "vips-ssh-onbuild" $BASE_NAME -f node-vips-ssh/Dockerfile.onbuild .
53+
# build ci container with node and kubernetes tooks
54+
docker-build -v "ci" $BASE_NAME -f node-ci/Dockerfile .
55+
56+
# List of newly created images
57+
images=$(docker images "$BASE_NAME" --format "{{ .Repository }}:{{ .Tag }}")
58+
59+
# we actually need to
60+
# Push to docker when DEPLOY is true
61+
[ ${BRANCH_NAME} = master ] && for image in $images; do docker push $image; done
62+
63+
# report
64+
docker images $BASE_NAME
File renamed without changes.
File renamed without changes.

build.sh

+62-52
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,74 @@
11
#!/bin/bash
22

3-
set -e
3+
###
4+
# build selected dockerfile and tag it based in labels
5+
##
46

5-
#set the DEBUG env variable to turn on debugging
6-
[[ -n "$DEBUG" ]] && set -x
7+
set -o errexit
78

8-
# global env vars
9-
export \
10-
PROJECT=node \
11-
NAMESPACE=makeomatic \
12-
PUSH_NAMESPACES=makeomatic \
13-
BASE_NAME=makeomatic/node
9+
while getopts "v:c:f:p" opt; do
10+
case $opt in
11+
p)
12+
# also push to remote repo
13+
push=true
14+
;;
15+
c)
16+
# specifies image tag with layers to speed up the build
17+
cache=$OPTARG
18+
;;
19+
v)
20+
# specifies variant which is appended to versions (aka: image:16.04-variant)
21+
# if is not set - also "latest" tag will be generated
22+
variant=$OPTARG
23+
;;
24+
f)
25+
file=$OPTARG
26+
;;
27+
esac
28+
done
1429

15-
BRANCH_NAME=${BRANCH_NAME:-$(git branch | grep ^*|cut -d" " -f2)}
16-
echo "working in $BRANCH_NAME"
17-
BRANCH_NAME=$(echo $BRANCH_NAME | sed -e "s/\//-/g")
18-
echo "tagging as $BRANCH_NAME"
30+
if [ -z "$file" ]; then
31+
echo "USAGE: cmd -f ./Dockerfile [-p postfix] [-c cache-tag]"
32+
exit 1
33+
fi
1934

20-
# install basic scripts
21-
curl -sSL https://github.com/makeomatic/ci-scripts/raw/master/install.sh | sh -s
22-
[ -d ~/official-images ] || git clone https://github.com/docker-library/official-images.git ~/official-images
35+
image="makeomatic/node"
36+
tempname=$(cat /dev/urandom | LC_CTYPE=C tr -dc 'a-z0-9' | fold -w 32 | head -n 1)
37+
versions_label="version_tags"
38+
cachename="$image:$cache"
2339

24-
# add scripts to PATH
25-
export PATH=$PATH:~/ci-scripts
40+
### create temp container
41+
[ ! -z "$cache" ] && docker pull $cachename
2642

27-
# cleanup logs
28-
rm -rf ./*.log
43+
buildArgs=("--tag $tempname" "--file $file")
44+
[ ! -z "$cache" ] && buildArgs+=("--cache-from $cachename")
45+
buildArgsStr=$(printf " %s" "${buildArgs[@]}")
2946

30-
# build base node images that are used further in the project
31-
docker-build $BASE_NAME -f node/Dockerfile .
32-
docker-build -v "onbuild" $BASE_NAME -f node/Dockerfile.onbuild .
33-
docker-build -v "tester" $BASE_NAME -f node/Dockerfile.tester .
34-
docker-build -v "tester-glibc" $BASE_NAME -f node/Dockerfile.tester-glibc .
35-
# build node images with ruby
36-
# docker-build -v "ruby" $BASE_NAME -f node-ruby/Dockerfile .
37-
# build node images with ssh embedded
38-
docker-build -v "ssh" $BASE_NAME -f node-ssh/Dockerfile .
39-
docker-build -v "ssh-onbuild" $BASE_NAME -f node-ssh/Dockerfile.onbuild .
40-
# chrome-enabled images
41-
docker-build -v "chrome" $BASE_NAME -f node-chrome/Dockerfile .
42-
docker-build -v "chrome-onbuild" $BASE_NAME -f node-chrome/Dockerfile.onbuild .
43-
docker-build -v "chrome-tester" $BASE_NAME -f node-chrome/Dockerfile.tester .
44-
# build node images with libvips
45-
docker-build -v "vips" $BASE_NAME -f node-vips/Dockerfile .
46-
docker-build -v "vips-onbuild" $BASE_NAME -f node-vips/Dockerfile.onbuild .
47-
docker-build -v "vips-tester" $BASE_NAME -f node-vips/Dockerfile.tester .
48-
docker-build -v "vips-tester-glibc" $BASE_NAME -f node-vips/Dockerfile.tester-glibc .
49-
docker-build -v "vips-tester-chrome" $BASE_NAME -f node-vips/Dockerfile.tester-chrome .
50-
# build node images with libvips & ssh
51-
docker-build -v "vips-ssh" $BASE_NAME -f node-vips-ssh/Dockerfile .
52-
docker-build -v "vips-ssh-onbuild" $BASE_NAME -f node-vips-ssh/Dockerfile.onbuild .
53-
# build ci container with node and kubernetes tooks
54-
docker-build -v "ci" $BASE_NAME -f node-ci/Dockerfile .
47+
docker build $buildArgsStr .
5548

56-
# List of newly created images
57-
images=$(docker images "$BASE_NAME" --format "{{ .Repository }}:{{ .Tag }}")
49+
### generate tags based on image labels
50+
[ `uname` = "Darwin" ] && opts="-E" || opts="-r"
51+
versions=$(docker inspect -f "{{.Config.Labels.$versions_label}}" $tempname | sed $opts -e 's/"|\[|\]//g' -e 's/,/ /g')
5852

59-
# we actually need to
60-
# Push to docker when DEPLOY is true
61-
[ ${BRANCH_NAME} = master ] && for image in $images; do docker push $image; done
53+
[ -z $variant ] && versions+=("latest")
6254

63-
# report
64-
docker images $BASE_NAME
55+
### tag images
56+
for version in $versions; do
57+
tag=${version}-${variant}
58+
tag=${tag%-}
59+
60+
docker tag $tempname $image:$tag
61+
echo "==> tagged: $image:$tag"
62+
done
63+
64+
### remove unwanted images
65+
docker rmi $tempname
66+
67+
### push images to remote repository
68+
if [ ! -z "$push" ]; then
69+
for version in $versions; do
70+
tag=${version}-${variant}
71+
tag=${tag%-}
72+
docker push $image:$tag
73+
done
74+
fi

node-ci/Dockerfile

-40
This file was deleted.

0 commit comments

Comments
 (0)