shipitron 1.3.2 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.buildkite/pipeline.yml +94 -0
- data/.rspec +1 -0
- data/Deskfile +15 -0
- data/Dockerfile +17 -15
- data/Dockerfile.release +6 -6
- data/Dockerfile.staging +70 -0
- data/Gemfile +1 -0
- data/README.md +13 -11
- data/docker-compose.yml +34 -4
- data/lib/shipitron.rb +19 -2
- data/lib/shipitron/cli.rb +38 -42
- data/lib/shipitron/client.rb +3 -3
- data/lib/shipitron/client/deploy_application.rb +1 -0
- data/lib/shipitron/client/ensure_deploy_not_running.rb +1 -1
- data/lib/shipitron/client/generate_deploy.rb +41 -0
- data/lib/shipitron/client/load_application_config.rb +14 -0
- data/lib/shipitron/client/run_ecs_tasks.rb +96 -78
- data/lib/shipitron/server/fetch_deploy.rb +50 -0
- data/lib/shipitron/server/git/clone_local_copy.rb +1 -1
- data/lib/shipitron/server/git/update_cache.rb +1 -1
- data/lib/shipitron/version.rb +1 -1
- data/scripts/docker-entrypoint.sh +30 -5
- data/scripts/release-entrypoint.sh +20 -0
- data/shipitron.gemspec +5 -4
- data/test.yml +5 -0
- metadata +32 -12
- data/build_dev.sh +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce2ad45258aa11acc35b0c3041aab0fe3f20bb56f076764120f1b6466233f310
|
4
|
+
data.tar.gz: 938b06da85c43614c316c7d63a755440e8d7d61e6396ee0bc574040fda9bd817
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a93f308e3065ada355022a5a18977d903e00ae56387e98218bf26557101ca8ccbb1a2d7c1950c6c2849b0bc47da860a57dccb6d0365216df99670a90245ce2c
|
7
|
+
data.tar.gz: 2a041845cb6bc87c29366de8e39702fb691bec9efb7a2e53df8673d30bbd9988edaa3147fe68a98c09fe6be80b81aa8a3094ded4fef464df23622c421ea63017
|
@@ -0,0 +1,94 @@
|
|
1
|
+
env:
|
2
|
+
BUILDKITE_PLUGIN_DOCKER_CACHE_S3_BUCKET: "outstand-buildkite-cache"
|
3
|
+
# BUILDKITE_PLUGIN_DOCKER_CACHE_VOLUME_DEBUG: "true"
|
4
|
+
BUILDKITE_PLUGIN_DOCKER_COMPOSE_SHELL: "false"
|
5
|
+
# BUILDKITE_PLUGIN_DOCKER_COMPOSE_UPLOAD_CONTAINER_LOGS: "always"
|
6
|
+
BUILDKITE_PLUGIN_DOCKER_COMPOSE_PULL_RETRIES: 5
|
7
|
+
BUILDKITE_PLUGIN_DOCKER_COMPOSE_PUSH_RETRIES: 5
|
8
|
+
PLUGIN_DOCKER_COMPOSE_VERSION: "17bac3aaee1360e39381b89bb45513b11838238e"
|
9
|
+
PLUGIN_DOCKER_CACHE_VERSION: "f3d8feb52a25c69c75565e9f0b80375eae51850a"
|
10
|
+
|
11
|
+
steps:
|
12
|
+
- label: ":docker: Build"
|
13
|
+
key: build
|
14
|
+
plugins:
|
15
|
+
- seek-oss/aws-sm#v2.2.1:
|
16
|
+
env:
|
17
|
+
DOCKER_LOGIN_PASSWORD: "/buildkite/docker_password"
|
18
|
+
|
19
|
+
- docker-login#v2.0.1:
|
20
|
+
username: outstandci
|
21
|
+
|
22
|
+
- ecr#v2.1.1:
|
23
|
+
login: true
|
24
|
+
region: "us-east-1"
|
25
|
+
|
26
|
+
- https://github.com/outstand/docker-compose-buildkite-plugin.git#${PLUGIN_DOCKER_COMPOSE_VERSION}:
|
27
|
+
build: specs
|
28
|
+
image-repository: 786715713882.dkr.ecr.us-east-1.amazonaws.com/ci-images
|
29
|
+
config:
|
30
|
+
- docker-compose.yml
|
31
|
+
- test.yml
|
32
|
+
|
33
|
+
- label: ":bundler: :rubygems:"
|
34
|
+
key: bundle_install
|
35
|
+
command: bundle install
|
36
|
+
depends_on: build
|
37
|
+
plugins:
|
38
|
+
- seek-oss/aws-sm#v2.2.1:
|
39
|
+
env:
|
40
|
+
DOCKER_LOGIN_PASSWORD: "/buildkite/docker_password"
|
41
|
+
|
42
|
+
- docker-login#v2.0.1:
|
43
|
+
username: outstandci
|
44
|
+
|
45
|
+
- ecr#v2.1.1:
|
46
|
+
login: true
|
47
|
+
region: "us-east-1"
|
48
|
+
|
49
|
+
- https://github.com/outstand/docker-compose-buildkite-plugin.git#${PLUGIN_DOCKER_COMPOSE_VERSION}:
|
50
|
+
run: specs
|
51
|
+
dependencies: false
|
52
|
+
config:
|
53
|
+
- docker-compose.yml
|
54
|
+
- test.yml
|
55
|
+
|
56
|
+
- https://github.com/outstand/docker-cache-buildkite-plugin.git#${PLUGIN_DOCKER_CACHE_VERSION}:
|
57
|
+
name: bundler-cache
|
58
|
+
keys:
|
59
|
+
- v1-bundler-cache-{{ arch }}-{{ checksum "shipitron.gemspec" }}-{{ checksum "Gemfile" }}
|
60
|
+
- v1-bundler-cache-{{ arch }}-
|
61
|
+
save: true
|
62
|
+
volumes:
|
63
|
+
- bundler-data
|
64
|
+
|
65
|
+
- label: ":ruby: Specs"
|
66
|
+
command: rspec spec
|
67
|
+
depends_on: bundle_install
|
68
|
+
plugins:
|
69
|
+
- seek-oss/aws-sm#v2.2.1:
|
70
|
+
env:
|
71
|
+
DOCKER_LOGIN_PASSWORD: "/buildkite/docker_password"
|
72
|
+
json-to-env:
|
73
|
+
- secret-id: "/buildkite/rails/env_vars"
|
74
|
+
|
75
|
+
- docker-login#v2.0.1:
|
76
|
+
username: outstandci
|
77
|
+
|
78
|
+
- ecr#v2.1.1:
|
79
|
+
login: true
|
80
|
+
region: "us-east-1"
|
81
|
+
|
82
|
+
- https://github.com/outstand/docker-compose-buildkite-plugin.git#${PLUGIN_DOCKER_COMPOSE_VERSION}:
|
83
|
+
run: specs
|
84
|
+
config:
|
85
|
+
- docker-compose.yml
|
86
|
+
- test.yml
|
87
|
+
|
88
|
+
- https://github.com/outstand/docker-cache-buildkite-plugin.git#${PLUGIN_DOCKER_CACHE_VERSION}:
|
89
|
+
name: bundler-cache
|
90
|
+
keys:
|
91
|
+
- v1-bundler-cache-{{ arch }}-{{ checksum "shipitron.gemspec" }}-{{ checksum "Gemfile" }}
|
92
|
+
- v1-bundler-cache-{{ arch }}-
|
93
|
+
volumes:
|
94
|
+
- bundler-data
|
data/.rspec
CHANGED
data/Deskfile
ADDED
data/Dockerfile
CHANGED
@@ -1,11 +1,6 @@
|
|
1
|
-
FROM
|
2
|
-
COPY cache/ /tmp/
|
3
|
-
RUN cd /usr/local/bundle && \
|
4
|
-
([ -f /tmp/bundler-data.tar.gz ] && \
|
5
|
-
tar -zxf /tmp/bundler-data.tar.gz && \
|
6
|
-
rm /tmp/bundler-data.tar.gz) || true
|
1
|
+
FROM outstand/fixuid as fixuid
|
7
2
|
|
8
|
-
FROM ruby:2.7.
|
3
|
+
FROM ruby:2.7.3-alpine
|
9
4
|
LABEL maintainer="Ryan Schlesinger <ryan@outstand.com>"
|
10
5
|
|
11
6
|
RUN addgroup -S shipitron && \
|
@@ -29,12 +24,19 @@ RUN apk add --no-cache \
|
|
29
24
|
jq \
|
30
25
|
cmake
|
31
26
|
|
32
|
-
|
27
|
+
COPY --from=fixuid /usr/local/bin/fixuid /usr/local/bin/fixuid
|
28
|
+
RUN chmod 4755 /usr/local/bin/fixuid && \
|
29
|
+
USER=shipitron && \
|
30
|
+
GROUP=shipitron && \
|
31
|
+
mkdir -p /etc/fixuid && \
|
32
|
+
printf "user: $USER\ngroup: $GROUP\n" > /etc/fixuid/config.yml
|
33
|
+
|
34
|
+
ENV ECR_CREDENTIAL_HELPER_VERSION 0.5.0
|
33
35
|
RUN cd /usr/local/bin && \
|
34
36
|
wget https://amazon-ecr-credential-helper-releases.s3.us-east-2.amazonaws.com/${ECR_CREDENTIAL_HELPER_VERSION}/linux-amd64/docker-credential-ecr-login && \
|
35
37
|
chmod +x docker-credential-ecr-login
|
36
38
|
|
37
|
-
ENV BUILDKIT_VERSION v0.
|
39
|
+
ENV BUILDKIT_VERSION v0.8.3
|
38
40
|
RUN cd /usr/local/bin && \
|
39
41
|
wget -nv https://github.com/moby/buildkit/releases/download/${BUILDKIT_VERSION}/buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz && \
|
40
42
|
tar --strip-components=1 -zxvf buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz bin/buildctl && \
|
@@ -42,7 +44,7 @@ RUN cd /usr/local/bin && \
|
|
42
44
|
rm -f buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz
|
43
45
|
|
44
46
|
USER shipitron
|
45
|
-
ENV BUILDX_VERSION v0.
|
47
|
+
ENV BUILDX_VERSION v0.5.1
|
46
48
|
RUN cd /home/shipitron && \
|
47
49
|
wget -nv https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-amd64 && \
|
48
50
|
mkdir -p ~/.docker/cli-plugins && \
|
@@ -53,16 +55,16 @@ USER root
|
|
53
55
|
ENV USE_BUNDLE_EXEC true
|
54
56
|
ENV BUNDLE_GEMFILE /shipitron/Gemfile
|
55
57
|
|
58
|
+
ENV BUNDLER_VERSION 2.2.21
|
59
|
+
RUN gem install bundler -v ${BUNDLER_VERSION} -i /usr/local/lib/ruby/gems/$(ls /usr/local/lib/ruby/gems) --force
|
60
|
+
|
56
61
|
WORKDIR /app
|
57
62
|
COPY Gemfile shipitron.gemspec /shipitron/
|
58
63
|
COPY lib/shipitron/version.rb /shipitron/lib/shipitron/
|
59
64
|
|
60
|
-
|
61
|
-
RUN (bundle check || bundle install) && \
|
62
|
-
git config --global push.default simple
|
65
|
+
RUN git config --global push.default simple
|
63
66
|
COPY . /shipitron/
|
64
|
-
RUN
|
65
|
-
mkdir -p /home/shipitron/.ssh && \
|
67
|
+
RUN mkdir -p /home/shipitron/.ssh && \
|
66
68
|
chown shipitron:shipitron /home/shipitron/.ssh && \
|
67
69
|
chmod 700 /home/shipitron/.ssh
|
68
70
|
|
data/Dockerfile.release
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
FROM ruby:2.7.
|
1
|
+
FROM ruby:2.7.3-alpine
|
2
2
|
LABEL maintainer="Ryan Schlesinger <ryan@outstand.com>"
|
3
3
|
|
4
4
|
RUN addgroup -S shipitron && \
|
@@ -21,12 +21,12 @@ RUN apk add --no-cache \
|
|
21
21
|
jq \
|
22
22
|
cmake
|
23
23
|
|
24
|
-
ENV ECR_CREDENTIAL_HELPER_VERSION 0.
|
24
|
+
ENV ECR_CREDENTIAL_HELPER_VERSION 0.5.0
|
25
25
|
RUN cd /usr/local/bin && \
|
26
26
|
wget https://amazon-ecr-credential-helper-releases.s3.us-east-2.amazonaws.com/${ECR_CREDENTIAL_HELPER_VERSION}/linux-amd64/docker-credential-ecr-login && \
|
27
27
|
chmod +x docker-credential-ecr-login
|
28
28
|
|
29
|
-
ENV BUILDKIT_VERSION v0.
|
29
|
+
ENV BUILDKIT_VERSION v0.8.3
|
30
30
|
RUN cd /usr/local/bin && \
|
31
31
|
wget -nv https://github.com/moby/buildkit/releases/download/${BUILDKIT_VERSION}/buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz && \
|
32
32
|
tar --strip-components=1 -zxvf buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz bin/buildctl && \
|
@@ -34,7 +34,7 @@ RUN cd /usr/local/bin && \
|
|
34
34
|
rm -f buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz
|
35
35
|
|
36
36
|
USER shipitron
|
37
|
-
ENV BUILDX_VERSION v0.
|
37
|
+
ENV BUILDX_VERSION v0.5.1
|
38
38
|
RUN cd /home/shipitron && \
|
39
39
|
wget -nv https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-amd64 && \
|
40
40
|
mkdir -p ~/.docker/cli-plugins && \
|
@@ -45,14 +45,14 @@ USER root
|
|
45
45
|
|
46
46
|
WORKDIR /app
|
47
47
|
|
48
|
-
ENV SHIPITRON_VERSION=1.
|
48
|
+
ENV SHIPITRON_VERSION=1.4.0
|
49
49
|
|
50
50
|
RUN gem install shipitron -v ${SHIPITRON_VERSION} && \
|
51
51
|
mkdir -p /home/shipitron/.ssh && \
|
52
52
|
chown shipitron:shipitron /home/shipitron/.ssh && \
|
53
53
|
chmod 700 /home/shipitron/.ssh
|
54
54
|
|
55
|
-
COPY scripts/
|
55
|
+
COPY scripts/release-entrypoint.sh /docker-entrypoint.sh
|
56
56
|
|
57
57
|
ENTRYPOINT ["/sbin/tini", "-g", "--", "/docker-entrypoint.sh"]
|
58
58
|
CMD ["help"]
|
data/Dockerfile.staging
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
FROM ruby:2.7.3-alpine
|
2
|
+
LABEL maintainer="Ryan Schlesinger <ryan@outstand.com>"
|
3
|
+
|
4
|
+
RUN addgroup -S shipitron && \
|
5
|
+
adduser -S -G shipitron shipitron && \
|
6
|
+
addgroup -g 1101 docker && \
|
7
|
+
addgroup shipitron docker
|
8
|
+
|
9
|
+
RUN apk add --no-cache \
|
10
|
+
ca-certificates \
|
11
|
+
openssl-dev \
|
12
|
+
tini \
|
13
|
+
su-exec \
|
14
|
+
build-base \
|
15
|
+
git \
|
16
|
+
git-lfs \
|
17
|
+
openssh-client \
|
18
|
+
perl \
|
19
|
+
bash \
|
20
|
+
curl \
|
21
|
+
wget \
|
22
|
+
jq \
|
23
|
+
cmake
|
24
|
+
|
25
|
+
ENV ECR_CREDENTIAL_HELPER_VERSION 0.5.0
|
26
|
+
RUN cd /usr/local/bin && \
|
27
|
+
wget https://amazon-ecr-credential-helper-releases.s3.us-east-2.amazonaws.com/${ECR_CREDENTIAL_HELPER_VERSION}/linux-amd64/docker-credential-ecr-login && \
|
28
|
+
chmod +x docker-credential-ecr-login
|
29
|
+
|
30
|
+
ENV BUILDKIT_VERSION v0.8.3
|
31
|
+
RUN cd /usr/local/bin && \
|
32
|
+
wget -nv https://github.com/moby/buildkit/releases/download/${BUILDKIT_VERSION}/buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz && \
|
33
|
+
tar --strip-components=1 -zxvf buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz bin/buildctl && \
|
34
|
+
chmod +x buildctl && \
|
35
|
+
rm -f buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz
|
36
|
+
|
37
|
+
USER shipitron
|
38
|
+
ENV BUILDX_VERSION v0.5.1
|
39
|
+
RUN cd /home/shipitron && \
|
40
|
+
wget -nv https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-amd64 && \
|
41
|
+
mkdir -p ~/.docker/cli-plugins && \
|
42
|
+
mv buildx-${BUILDX_VERSION}.linux-amd64 ~/.docker/cli-plugins/docker-buildx && \
|
43
|
+
chmod a+x ~/.docker/cli-plugins/docker-buildx
|
44
|
+
|
45
|
+
USER root
|
46
|
+
ENV USE_BUNDLE_EXEC true
|
47
|
+
ENV BUNDLE_GEMFILE /shipitron/Gemfile
|
48
|
+
|
49
|
+
ENV BUNDLER_VERSION 2.2.21
|
50
|
+
RUN gem install bundler -v ${BUNDLER_VERSION} -i /usr/local/lib/ruby/gems/$(ls /usr/local/lib/ruby/gems) --force
|
51
|
+
|
52
|
+
WORKDIR /shipitron
|
53
|
+
COPY Gemfile shipitron.gemspec /shipitron/
|
54
|
+
COPY lib/shipitron/version.rb /shipitron/lib/shipitron/
|
55
|
+
COPY exe/shipitron /shipitron/exe/shipitron
|
56
|
+
COPY .git/ /shipitron/
|
57
|
+
|
58
|
+
RUN bundle install
|
59
|
+
|
60
|
+
COPY . /shipitron/
|
61
|
+
RUN mkdir -p /home/shipitron/.ssh && \
|
62
|
+
chown shipitron:shipitron /home/shipitron/.ssh && \
|
63
|
+
chmod 700 /home/shipitron/.ssh
|
64
|
+
|
65
|
+
WORKDIR /app
|
66
|
+
|
67
|
+
COPY scripts/release-entrypoint.sh /docker-entrypoint.sh
|
68
|
+
|
69
|
+
ENTRYPOINT ["/sbin/tini", "-g", "--", "/docker-entrypoint.sh"]
|
70
|
+
CMD ["help"]
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -68,23 +68,25 @@ If a containerized tool requires access to AWS resources, be sure to pass the `A
|
|
68
68
|
|
69
69
|
## Development
|
70
70
|
|
71
|
-
-
|
72
|
-
- `dev
|
71
|
+
- `desk go`
|
72
|
+
- `dev build --pull shipitron`
|
73
|
+
- `rspec specs` to run specs
|
73
74
|
- Set the application path in the volumes section in `docker-compose.yml`.
|
74
|
-
- `
|
75
|
-
- `
|
76
|
-
- `dev run --rm -v /bin/docker:/bin/docker -v /var/run/docker.sock:/var/run/docker.sock shipitron server_deploy --
|
75
|
+
- `shipitron deploy <app>` to run client side
|
76
|
+
- `shipitron deploy <app> --simulate-store-deploy` to save the deploy options to S3 and generate deploy id
|
77
|
+
- `dev run --rm -v /bin/docker:/bin/docker -v /var/run/docker.sock:/var/run/docker.sock shipitron server_deploy --deploy-id <deploy_id>` to run server side
|
77
78
|
|
78
79
|
Running a dev version in production:
|
79
|
-
-
|
80
|
-
- `docker
|
81
|
-
-
|
82
|
-
-
|
80
|
+
- Ensure `SHIPITRON_STARTED_BY` env var is set for your `shipitron-staging` task def
|
81
|
+
- `docker build --pull -t outstand/shipitron:staging -f Dockerfile.staging .`
|
82
|
+
- `docker push outstand/shipitron:staging`
|
83
|
+
- Update config to use `shipitron_task: shipitron-staging` and `outstand/shipitron:staging`
|
84
|
+
- `shipitron deploy <app> --debug`
|
83
85
|
|
84
86
|
To release a new version:
|
85
87
|
- Update the version number in `version.rb` and `Dockerfile.release` and commit the result.
|
86
|
-
-
|
87
|
-
- `
|
88
|
+
- `dev build --pull shipitron`
|
89
|
+
- `release_gem`
|
88
90
|
- `VERSION=<version>`
|
89
91
|
- `docker build -t outstand/shipitron:$VERSION -f Dockerfile.release .`
|
90
92
|
- `docker push outstand/shipitron:$VERSION`
|
data/docker-compose.yml
CHANGED
@@ -1,24 +1,54 @@
|
|
1
1
|
version: '3.8'
|
2
2
|
services:
|
3
3
|
shipitron:
|
4
|
+
build: .
|
4
5
|
image: outstand/shipitron:dev
|
6
|
+
environment:
|
7
|
+
FIXUID:
|
8
|
+
FIXGID:
|
5
9
|
volumes:
|
6
|
-
-
|
10
|
+
- bundler-data:/usr/local/bundle
|
11
|
+
- ~/dev/app:/app # Set this to the application to be shipitron'd
|
7
12
|
- shipitron-home:/home/shipitron
|
8
13
|
- ~/.config/shipitron:/home/shipitron/.config/shipitron
|
9
14
|
- .:/shipitron
|
10
|
-
|
15
|
+
|
16
|
+
specs:
|
17
|
+
build: .
|
11
18
|
image: outstand/shipitron:dev
|
12
|
-
command: rspec
|
19
|
+
command: rspec
|
13
20
|
environment:
|
14
21
|
FOG_LOCAL: 'true'
|
22
|
+
FIXUID:
|
23
|
+
FIXGID:
|
24
|
+
BUILDKITE:
|
25
|
+
BUILDKITE_BUILD_URL:
|
26
|
+
BUILDKITE_JOB_ID:
|
27
|
+
BUILDKITE_AGENT_ACCESS_TOKEN:
|
15
28
|
working_dir: /shipitron
|
16
29
|
volumes:
|
30
|
+
- bundler-data:/usr/local/bundle
|
17
31
|
- fog:/fog
|
18
32
|
- shipitron-home:/home/shipitron
|
19
|
-
- ~/.config/shipitron:/home/shipitron/.config/shipitron
|
20
33
|
- .:/shipitron
|
21
34
|
|
35
|
+
release_gem:
|
36
|
+
image: outstand/shipitron:dev
|
37
|
+
command: rake release
|
38
|
+
working_dir: /shipitron
|
39
|
+
environment:
|
40
|
+
FIXUID:
|
41
|
+
FIXGID:
|
42
|
+
volumes:
|
43
|
+
- bundler-data:/usr/local/bundle
|
44
|
+
- shipitron-home:/home/shipitron
|
45
|
+
- .:/shipitron
|
46
|
+
- ~/.dotfiles/gitconfig:/root/.gitconfig
|
47
|
+
- ~/.dotfiles/gitconfig.user:/root/.gitconfig.user
|
48
|
+
- ~/.ssh/id_rsa:/root/.ssh/id_rsa
|
49
|
+
- ~/.gem:/root/.gem
|
50
|
+
|
22
51
|
volumes:
|
23
52
|
fog:
|
24
53
|
shipitron-home:
|
54
|
+
bundler-data:
|
data/lib/shipitron.rb
CHANGED
@@ -7,6 +7,8 @@ require 'shipitron/smash'
|
|
7
7
|
module Shipitron
|
8
8
|
CONFIG_FILE = 'shipitron/config.yml'.freeze
|
9
9
|
SECRETS_FILE = '~/.config/shipitron/secrets.yml'.freeze
|
10
|
+
GLOBAL_CONFIG_FILE = '~/.config/shipitron/config.yml'.freeze
|
11
|
+
DEPLOY_BUCKET_PREFIX = "deploys/"
|
10
12
|
|
11
13
|
class << self
|
12
14
|
def config_file
|
@@ -18,10 +20,10 @@ module Shipitron
|
|
18
20
|
end
|
19
21
|
|
20
22
|
def config
|
21
|
-
@config ||= Smash.load(Pathname.new(config_file).expand_path.to_s).merge(secrets)
|
23
|
+
@config ||= Smash.load(Pathname.new(config_file).expand_path.to_s).merge(secrets).merge(global_config)
|
22
24
|
rescue ArgumentError
|
23
25
|
Logger.warn "Config file '#{config_file}' does not exist"
|
24
|
-
@config = secrets
|
26
|
+
@config = secrets.merge(global_config)
|
25
27
|
end
|
26
28
|
|
27
29
|
def secrets_file
|
@@ -38,5 +40,20 @@ module Shipitron
|
|
38
40
|
Logger.warn "Secrets file '#{secrets_file}' does not exist"
|
39
41
|
@secrets = Smash.new
|
40
42
|
end
|
43
|
+
|
44
|
+
def global_config_file
|
45
|
+
@global_config_file ||= GLOBAL_CONFIG_FILE
|
46
|
+
end
|
47
|
+
|
48
|
+
def global_config_file=(file)
|
49
|
+
@global_config_file = file
|
50
|
+
end
|
51
|
+
|
52
|
+
def global_config
|
53
|
+
@global_config ||= Smash.load(Pathname.new(global_config_file).expand_path.to_s)
|
54
|
+
rescue ArgumentError
|
55
|
+
Logger.warn "Global config file '#{global_config_file}' does not exist"
|
56
|
+
@global_config = Smash.new
|
57
|
+
end
|
41
58
|
end
|
42
59
|
end
|
data/lib/shipitron/cli.rb
CHANGED
@@ -12,18 +12,22 @@ module Shipitron
|
|
12
12
|
desc 'deploy <app>', 'Deploys the app'
|
13
13
|
option :config_file, default: 'shipitron/config.yml'
|
14
14
|
option :secrets_file, default: '~/.config/shipitron/secrets.yml'
|
15
|
+
option :global_config_file, default: '~/.config/shipitron/config.yml'
|
15
16
|
option :debug, type: :boolean, default: false
|
16
17
|
option :simulate, type: :boolean, default: false
|
18
|
+
option :simulate_store_deploy, type: :boolean, default: false, desc: "Simulate and store deploy config in S3"
|
17
19
|
def deploy(app)
|
18
20
|
setup(
|
19
21
|
config_file: options[:config_file],
|
20
|
-
secrets_file: options[:secrets_file]
|
22
|
+
secrets_file: options[:secrets_file],
|
23
|
+
global_config_file: options[:global_config_file]
|
21
24
|
)
|
22
25
|
|
23
26
|
require 'shipitron/client/deploy_application'
|
24
27
|
result = Client::DeployApplication.call(
|
25
28
|
application: app,
|
26
|
-
simulate: options[:simulate]
|
29
|
+
simulate: options[:simulate],
|
30
|
+
simulate_store_deploy: options[:simulate_store_deploy]
|
27
31
|
)
|
28
32
|
|
29
33
|
if result.failure?
|
@@ -59,49 +63,40 @@ module Shipitron
|
|
59
63
|
|
60
64
|
|
61
65
|
desc 'server_deploy', 'Server-side component of deploy'
|
62
|
-
option :
|
63
|
-
option :repository, required: true
|
64
|
-
option :repository_branch, default: 'master'
|
65
|
-
option :registry, default: nil
|
66
|
-
option :bucket, required: true
|
67
|
-
option :build_cache_location, default: 'tmp/build-cache.tar.gz'
|
68
|
-
option :image_name, required: true
|
69
|
-
option :named_tag, default: 'latest'
|
70
|
-
option :skip_push, type: :boolean, default: false
|
71
|
-
option :region, required: true
|
72
|
-
option :clusters, type: :array, required: true
|
73
|
-
option :ecs_task_defs, type: :array, required: true
|
74
|
-
option :ecs_task_def_templates, type: :array, default: []
|
75
|
-
option :ecs_services, type: :array, default: []
|
76
|
-
option :ecs_service_templates, type: :array, default: []
|
77
|
-
option :build_script, default: nil
|
78
|
-
option :post_builds, type: :array
|
79
|
-
option :secrets_file, default: '~/.config/shipitron/secrets.yml'
|
80
|
-
option :debug, type: :boolean, default: false
|
66
|
+
option :deploy_id, required: true
|
81
67
|
def server_deploy
|
82
|
-
setup
|
83
|
-
|
84
|
-
)
|
68
|
+
setup
|
69
|
+
|
70
|
+
if !ENV.key?("SHIPITRON_DEPLOY_BUCKET") || !ENV.key?("SHIPITRON_DEPLOY_BUCKET_REGION")
|
71
|
+
raise "Missing shipitron deploy bucket env vars!"
|
72
|
+
end
|
73
|
+
|
74
|
+
require 'shipitron/server/fetch_deploy'
|
75
|
+
deploy_options = Server::FetchDeploy.call!(
|
76
|
+
deploy_bucket: ENV["SHIPITRON_DEPLOY_BUCKET"],
|
77
|
+
deploy_bucket_region: ENV["SHIPITRON_DEPLOY_BUCKET_REGION"],
|
78
|
+
deploy_id: options[:deploy_id]
|
79
|
+
).deploy_options
|
85
80
|
|
86
81
|
require 'shipitron/server/transform_cli_args'
|
87
82
|
cli_args = Server::TransformCliArgs.call!(
|
88
|
-
application:
|
89
|
-
repository_url:
|
90
|
-
repository_branch:
|
91
|
-
registry:
|
92
|
-
s3_cache_bucket:
|
93
|
-
build_cache_location:
|
94
|
-
image_name:
|
95
|
-
named_tag:
|
96
|
-
skip_push:
|
97
|
-
region:
|
98
|
-
clusters:
|
99
|
-
ecs_task_defs:
|
100
|
-
ecs_task_def_templates:
|
101
|
-
ecs_services:
|
102
|
-
ecs_service_templates:
|
103
|
-
build_script:
|
104
|
-
post_builds:
|
83
|
+
application: deploy_options[:name],
|
84
|
+
repository_url: deploy_options[:repository],
|
85
|
+
repository_branch: deploy_options[:repository_branch],
|
86
|
+
registry: deploy_options[:registry],
|
87
|
+
s3_cache_bucket: deploy_options[:bucket],
|
88
|
+
build_cache_location: deploy_options[:build_cache_location],
|
89
|
+
image_name: deploy_options[:image_name],
|
90
|
+
named_tag: deploy_options[:named_tag],
|
91
|
+
skip_push: deploy_options[:skip_push],
|
92
|
+
region: deploy_options[:region],
|
93
|
+
clusters: deploy_options[:clusters],
|
94
|
+
ecs_task_defs: deploy_options[:ecs_task_defs],
|
95
|
+
ecs_task_def_templates: deploy_options[:ecs_task_def_templates],
|
96
|
+
ecs_services: deploy_options[:ecs_services],
|
97
|
+
ecs_service_templates: deploy_options[:ecs_service_templates],
|
98
|
+
build_script: deploy_options[:build_script],
|
99
|
+
post_builds: deploy_options[:post_builds]
|
105
100
|
).cli_args
|
106
101
|
|
107
102
|
require 'shipitron/server/deploy_application'
|
@@ -149,7 +144,7 @@ module Shipitron
|
|
149
144
|
end
|
150
145
|
|
151
146
|
private
|
152
|
-
def setup(config_file:nil, secrets_file:nil)
|
147
|
+
def setup(config_file:nil, secrets_file:nil, global_config_file:nil)
|
153
148
|
$stdout.sync = true
|
154
149
|
if options[:debug] == false
|
155
150
|
Logger.level = :info
|
@@ -157,6 +152,7 @@ module Shipitron
|
|
157
152
|
|
158
153
|
Shipitron.config_file = config_file unless config_file.nil?
|
159
154
|
Shipitron.secrets_file = secrets_file unless secrets_file.nil?
|
155
|
+
Shipitron.global_config_file = global_config_file unless global_config_file.nil?
|
160
156
|
end
|
161
157
|
end
|
162
158
|
end
|
data/lib/shipitron/client.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'shipitron'
|
2
|
+
require 'shipitron/client'
|
3
|
+
require 'shipitron/fetch_bucket'
|
4
|
+
require 'aws-sdk-s3'
|
5
|
+
require 'pastel'
|
6
|
+
|
7
|
+
module Shipitron
|
8
|
+
module Client
|
9
|
+
class GenerateDeploy
|
10
|
+
include Metaractor
|
11
|
+
|
12
|
+
required :server_deploy_opts
|
13
|
+
required :deploy_id
|
14
|
+
|
15
|
+
def call
|
16
|
+
s3_key = "#{Shipitron::DEPLOY_BUCKET_PREFIX}#{context.deploy_id}"
|
17
|
+
pastel = Pastel.new
|
18
|
+
Logger.info "Uploading deploy config to #{pastel.blue("s3://#{deploy_bucket}/#{s3_key}")}"
|
19
|
+
|
20
|
+
client = Aws::S3::Client.new(region: deploy_bucket_region)
|
21
|
+
|
22
|
+
client.put_object(
|
23
|
+
bucket: deploy_bucket,
|
24
|
+
key: s3_key,
|
25
|
+
body: context.server_deploy_opts.to_json,
|
26
|
+
acl: "private"
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def deploy_bucket
|
33
|
+
Shipitron.config.deploy_bucket
|
34
|
+
end
|
35
|
+
|
36
|
+
def deploy_bucket_region
|
37
|
+
Shipitron.config.deploy_bucket_region
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'shipitron'
|
2
2
|
require 'shipitron/client'
|
3
3
|
require 'shipitron/post_build'
|
4
|
+
require 'aws-sdk-core'
|
4
5
|
|
5
6
|
module Shipitron
|
6
7
|
module Client
|
@@ -38,6 +39,19 @@ module Shipitron
|
|
38
39
|
context.ecs_services = config.ecs_services
|
39
40
|
context.ecs_task_def_dir = config.ecs_task_def_dir
|
40
41
|
context.ecs_service_dir = config.ecs_service_dir
|
42
|
+
|
43
|
+
if Shipitron.config.aws_access_key_id? && Shipitron.config.aws_secret_access_key?
|
44
|
+
Aws.config.update(
|
45
|
+
credentials: Aws::Credentials.new(
|
46
|
+
Shipitron.config.aws_access_key_id,
|
47
|
+
Shipitron.config.aws_secret_access_key
|
48
|
+
)
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
if !Shipitron.config.deploy_bucket? || !Shipitron.config.deploy_bucket_region?
|
53
|
+
raise "Missing required deploy bucket configuration!"
|
54
|
+
end
|
41
55
|
end
|
42
56
|
|
43
57
|
private
|
@@ -1,10 +1,12 @@
|
|
1
1
|
require 'shipitron'
|
2
2
|
require 'shipitron/client'
|
3
3
|
require 'shipitron/ecs_client'
|
4
|
+
require 'shipitron/client/generate_deploy'
|
4
5
|
require 'shellwords'
|
5
6
|
require 'base64'
|
6
7
|
require 'tty-table'
|
7
8
|
require 'pastel'
|
9
|
+
require 'securerandom'
|
8
10
|
|
9
11
|
module Shipitron
|
10
12
|
module Client
|
@@ -21,23 +23,17 @@ module Shipitron
|
|
21
23
|
required :image_name
|
22
24
|
required :named_tag
|
23
25
|
required :ecs_task_defs
|
24
|
-
optional :ecs_task_def_templates
|
25
|
-
optional :ecs_services
|
26
|
-
optional :ecs_service_templates
|
26
|
+
optional :ecs_task_def_templates, default: []
|
27
|
+
optional :ecs_services, default: []
|
28
|
+
optional :ecs_service_templates, default: []
|
27
29
|
optional :build_script
|
28
30
|
optional :skip_push
|
29
|
-
optional :post_builds
|
31
|
+
optional :post_builds, default: []
|
30
32
|
optional :simulate
|
33
|
+
optional :simulate_store_deploy
|
31
34
|
optional :repository_branch
|
32
35
|
optional :registry
|
33
36
|
|
34
|
-
before do
|
35
|
-
context.post_builds ||= []
|
36
|
-
context.ecs_task_def_templates ||= {}
|
37
|
-
context.ecs_services ||= []
|
38
|
-
context.ecs_service_templates ||= {}
|
39
|
-
end
|
40
|
-
|
41
37
|
def call
|
42
38
|
Logger.info "Skipping ECS run_task calls due to --simulate" if simulate?
|
43
39
|
|
@@ -56,27 +52,31 @@ module Shipitron
|
|
56
52
|
Logger.info line.chomp
|
57
53
|
end
|
58
54
|
|
59
|
-
cluster = clusters.first
|
55
|
+
@cluster = clusters.first
|
60
56
|
|
61
57
|
begin
|
62
58
|
if simulate?
|
63
|
-
|
59
|
+
server_deploy_opts
|
60
|
+
generate_deploy! if context.simulate_store_deploy == true
|
61
|
+
|
64
62
|
return
|
65
63
|
end
|
66
64
|
|
67
|
-
|
68
|
-
|
65
|
+
generate_deploy!
|
66
|
+
|
67
|
+
response = ecs_client(region: @cluster.region).run_task(
|
68
|
+
cluster: @cluster.name,
|
69
69
|
task_definition: shipitron_task,
|
70
70
|
overrides: {
|
71
71
|
container_overrides: [
|
72
72
|
{
|
73
73
|
name: 'shipitron',
|
74
|
-
command: command_args(
|
74
|
+
command: command_args(deploy_id: deploy_id)
|
75
75
|
}
|
76
76
|
]
|
77
77
|
},
|
78
78
|
count: 1,
|
79
|
-
started_by: Shipitron::Client
|
79
|
+
started_by: Shipitron::Client.started_by
|
80
80
|
)
|
81
81
|
|
82
82
|
if !response.failures.empty?
|
@@ -106,81 +106,99 @@ module Shipitron
|
|
106
106
|
context.shipitron_task
|
107
107
|
end
|
108
108
|
|
109
|
-
def
|
109
|
+
def deploy_id
|
110
|
+
return @_deploy_id if defined?(@_deploy_id)
|
111
|
+
|
112
|
+
@_deploy_id = SecureRandom.uuid
|
113
|
+
end
|
114
|
+
|
115
|
+
def generate_deploy!
|
116
|
+
Shipitron::Client::GenerateDeploy.call!(
|
117
|
+
server_deploy_opts: server_deploy_opts,
|
118
|
+
deploy_id: deploy_id
|
119
|
+
)
|
120
|
+
end
|
121
|
+
|
122
|
+
def command_args(deploy_id:)
|
110
123
|
[
|
111
124
|
'server_deploy',
|
112
|
-
'--
|
113
|
-
|
114
|
-
|
115
|
-
'--build-cache-location', context.build_cache_location,
|
116
|
-
'--image-name', context.image_name,
|
117
|
-
'--named-tag', context.named_tag,
|
118
|
-
'--region', cluster.region,
|
119
|
-
].tap do |ary|
|
120
|
-
ary << '--clusters'
|
121
|
-
ary.concat(context.clusters.map(&:name))
|
122
|
-
|
123
|
-
ary << '--ecs-task-defs'
|
124
|
-
ary.concat(context.ecs_task_defs)
|
125
|
-
|
126
|
-
unless context.ecs_services.empty?
|
127
|
-
ary << '--ecs-services'
|
128
|
-
ary.concat(context.ecs_services)
|
129
|
-
end
|
125
|
+
'--deploy-id', deploy_id
|
126
|
+
]
|
127
|
+
end
|
130
128
|
|
131
|
-
|
132
|
-
|
133
|
-
|
129
|
+
def server_deploy_opts
|
130
|
+
return @_server_deploy_opts if defined?(@_server_deploy_opts)
|
131
|
+
|
132
|
+
@_server_deploy_opts =
|
133
|
+
{
|
134
|
+
name: context.application,
|
135
|
+
repository: context.repository_url,
|
136
|
+
bucket: context.s3_cache_bucket,
|
137
|
+
build_cache_location: context.build_cache_location,
|
138
|
+
image_name: context.image_name,
|
139
|
+
named_tag: context.named_tag,
|
140
|
+
region: @cluster.region
|
141
|
+
}.tap do |opts|
|
142
|
+
opts[:clusters] =
|
143
|
+
context.clusters.map(&:name)
|
144
|
+
|
145
|
+
opts[:ecs_task_defs] =
|
146
|
+
context.ecs_task_defs
|
147
|
+
|
148
|
+
unless context.ecs_services.empty?
|
149
|
+
opts[:ecs_services] =
|
150
|
+
context.ecs_services
|
151
|
+
end
|
134
152
|
|
135
|
-
|
136
|
-
|
137
|
-
|
153
|
+
if context.registry != nil
|
154
|
+
opts[:registry] = context.registry
|
155
|
+
end
|
138
156
|
|
139
|
-
|
140
|
-
|
141
|
-
|
157
|
+
if context.build_script != nil
|
158
|
+
opts[:build_script] = context.build_script
|
159
|
+
end
|
142
160
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
end
|
161
|
+
if context.skip_push != nil
|
162
|
+
opts[:skip_push] = context.skip_push.to_s
|
163
|
+
end
|
147
164
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
if context.ecs_task_defs.include?(name)
|
153
|
-
Base64.urlsafe_encode64(data)
|
154
|
-
end
|
155
|
-
end.compact
|
156
|
-
)
|
157
|
-
end
|
165
|
+
if !context.post_builds.empty?
|
166
|
+
opts[:post_builds] =
|
167
|
+
context.post_builds.map(&:to_s)
|
168
|
+
end
|
158
169
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
end
|
166
|
-
|
167
|
-
)
|
168
|
-
end
|
170
|
+
if !context.ecs_task_def_templates.empty?
|
171
|
+
opts[:ecs_task_def_templates] =
|
172
|
+
context.ecs_task_def_templates.map do |name, data|
|
173
|
+
if context.ecs_task_defs.include?(name)
|
174
|
+
Base64.urlsafe_encode64(data)
|
175
|
+
end
|
176
|
+
end.compact
|
177
|
+
end
|
169
178
|
|
170
|
-
|
171
|
-
|
172
|
-
|
179
|
+
if !context.ecs_service_templates.empty?
|
180
|
+
opts[:ecs_service_templates] =
|
181
|
+
context.ecs_service_templates.map do |name, data|
|
182
|
+
if context.ecs_services.include?(name)
|
183
|
+
Base64.urlsafe_encode64(data)
|
184
|
+
end
|
185
|
+
end.compact
|
186
|
+
end
|
173
187
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
188
|
+
unless context.repository_branch.nil?
|
189
|
+
opts[:repository_branch] = context.repository_branch
|
190
|
+
end
|
191
|
+
|
192
|
+
if simulate?
|
193
|
+
Logger.info "server_deploy opts:\n#{JSON.pretty_generate(opts)}"
|
194
|
+
else
|
195
|
+
Logger.debug "server_deploy opts:\n#{JSON.pretty_generate(opts)}"
|
196
|
+
end
|
178
197
|
end
|
179
|
-
end
|
180
198
|
end
|
181
199
|
|
182
200
|
def simulate?
|
183
|
-
context.simulate == true
|
201
|
+
context.simulate == true || context.simulate_store_deploy == true
|
184
202
|
end
|
185
203
|
end
|
186
204
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'shipitron'
|
2
|
+
require 'aws-sdk-s3'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module Shipitron
|
6
|
+
module Server
|
7
|
+
class FetchDeploy
|
8
|
+
include Metaractor
|
9
|
+
|
10
|
+
required :deploy_bucket
|
11
|
+
required :deploy_bucket_region
|
12
|
+
required :deploy_id
|
13
|
+
|
14
|
+
def call
|
15
|
+
s3_key = "#{Shipitron::DEPLOY_BUCKET_PREFIX}#{context.deploy_id}"
|
16
|
+
Logger.info "Fetching deploy config from s3://#{deploy_bucket}/#{s3_key}"
|
17
|
+
|
18
|
+
response = client.get_object(
|
19
|
+
bucket: deploy_bucket,
|
20
|
+
key: s3_key
|
21
|
+
)
|
22
|
+
|
23
|
+
context.deploy_options =
|
24
|
+
JSON.parse(response.body.read)
|
25
|
+
.transform_keys {|k| k.to_sym }
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def client
|
31
|
+
Aws::S3::Client.new(
|
32
|
+
region: deploy_bucket_region,
|
33
|
+
**client_opts
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def client_opts
|
38
|
+
{}
|
39
|
+
end
|
40
|
+
|
41
|
+
def deploy_bucket
|
42
|
+
context.deploy_bucket
|
43
|
+
end
|
44
|
+
|
45
|
+
def deploy_bucket_region
|
46
|
+
context.deploy_bucket_region
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/shipitron/version.rb
CHANGED
@@ -1,14 +1,26 @@
|
|
1
1
|
#!/bin/sh
|
2
|
-
|
2
|
+
|
3
|
+
set -euo pipefail
|
4
|
+
|
5
|
+
su-exec ${FIXUID:?Missing FIXUID var}:${FIXGID:?Missing FIXGID var} fixuid
|
3
6
|
|
4
7
|
chown_dir() {
|
5
8
|
dir=$1
|
6
|
-
if [ "$(stat -c %u ${dir})"
|
7
|
-
chown
|
9
|
+
if [[ -d ${dir} ]] && [[ "$(stat -c %u:%g ${dir})" != "${FIXUID}:${FIXGID}" ]]; then
|
10
|
+
echo chown $dir
|
11
|
+
chown shipitron:shipitron $dir
|
8
12
|
fi
|
9
13
|
}
|
10
14
|
|
11
15
|
chown_dir /home/shipitron
|
16
|
+
chown_dir /usr/local/bundle
|
17
|
+
|
18
|
+
if [ "$1" = 'bundle' ]; then
|
19
|
+
set -- su-exec shipitron "$@"
|
20
|
+
exec "$@"
|
21
|
+
elif [ "$1" = 'rake' ] && [ "$2" = 'release' ]; then
|
22
|
+
exec "$@"
|
23
|
+
fi
|
12
24
|
|
13
25
|
if [ -n "$USE_BUNDLE_EXEC" ]; then
|
14
26
|
BINARY="bundle exec shipitron"
|
@@ -16,10 +28,23 @@ else
|
|
16
28
|
BINARY=shipitron
|
17
29
|
fi
|
18
30
|
|
19
|
-
if
|
31
|
+
if [ "$(ls -A /usr/local/bundle/bin)" = '' ]; then
|
32
|
+
echo 'command not in path and bundler not initialized'
|
33
|
+
echo 'running bundle install'
|
34
|
+
su-exec shipitron bundle install
|
35
|
+
else
|
36
|
+
su-exec shipitron bash -c 'bundle check || bundle install'
|
37
|
+
fi
|
38
|
+
|
39
|
+
# ${BINARY} help "$1"
|
40
|
+
|
41
|
+
if ls /usr/local/bundle/bin | grep -q "\b$1\b"; then
|
42
|
+
set -- su-exec shipitron bundle exec "$@"
|
43
|
+
|
44
|
+
elif ${BINARY} help "$1" 2>&1 | grep -q "shipitron $1"; then
|
20
45
|
set -- su-exec shipitron ${BINARY} "$@"
|
21
46
|
|
22
|
-
if [ -n "$FOG_LOCAL" ]; then
|
47
|
+
if [ -n "${FOG_LOCAL:-}" ]; then
|
23
48
|
chown -R shipitron:shipitron /fog
|
24
49
|
fi
|
25
50
|
fi
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
set -euo pipefail
|
4
|
+
|
5
|
+
if [ -n "$USE_BUNDLE_EXEC" ]; then
|
6
|
+
BINARY="bundle exec shipitron"
|
7
|
+
else
|
8
|
+
BINARY=shipitron
|
9
|
+
fi
|
10
|
+
|
11
|
+
# ${BINARY} help "$1"
|
12
|
+
|
13
|
+
if ls /usr/local/bundle/bin | grep -q "\b$1\b"; then
|
14
|
+
set -- su-exec shipitron bundle exec "$@"
|
15
|
+
|
16
|
+
elif ${BINARY} help "$1" 2>&1 | grep -q "shipitron $1"; then
|
17
|
+
set -- su-exec shipitron ${BINARY} "$@"
|
18
|
+
fi
|
19
|
+
|
20
|
+
exec "$@"
|
data/shipitron.gemspec
CHANGED
@@ -19,8 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_runtime_dependency 'thor', '~> 1.0'
|
21
21
|
spec.add_runtime_dependency 'aws-sdk-ecs', '~> 1.8'
|
22
|
+
spec.add_runtime_dependency 'aws-sdk-s3', '~> 1.96'
|
22
23
|
spec.add_runtime_dependency 'hashie', '~> 4.1'
|
23
|
-
spec.add_runtime_dependency 'metaractor', '~> 3.
|
24
|
+
spec.add_runtime_dependency 'metaractor', '~> 3.1'
|
24
25
|
spec.add_runtime_dependency 'diplomat', '~> 2.0'
|
25
26
|
spec.add_runtime_dependency 'fog-aws', '~> 3.6'
|
26
27
|
spec.add_runtime_dependency 'mime-types', '~> 3.1'
|
@@ -29,13 +30,13 @@ Gem::Specification.new do |spec|
|
|
29
30
|
spec.add_runtime_dependency 'tty-command', '~> 0.7'
|
30
31
|
spec.add_runtime_dependency 'tty-table', '~> 0.9'
|
31
32
|
spec.add_runtime_dependency 'pastel', '~> 0.7'
|
32
|
-
spec.add_runtime_dependency 'excon', '~> 0.
|
33
|
+
spec.add_runtime_dependency 'excon', '~> 0.82'
|
33
34
|
spec.add_runtime_dependency 'rugged', '~> 1.0'
|
34
35
|
|
35
36
|
spec.add_development_dependency "bundler", "~> 2.1"
|
36
37
|
spec.add_development_dependency "rake", "~> 13.0"
|
37
|
-
spec.add_development_dependency "pry-byebug", "~> 3.
|
38
|
-
spec.add_development_dependency "rspec", "~> 3.
|
38
|
+
spec.add_development_dependency "pry-byebug", "~> 3.9"
|
39
|
+
spec.add_development_dependency "rspec", "~> 3.10"
|
39
40
|
spec.add_development_dependency "fivemat", "~> 1.3"
|
40
41
|
spec.add_development_dependency "fog-local", "~> 0.4"
|
41
42
|
end
|
data/test.yml
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shipitron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Schlesinger
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.8'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aws-sdk-s3
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.96'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.96'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: hashie
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +72,14 @@ dependencies:
|
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '3.
|
75
|
+
version: '3.1'
|
62
76
|
type: :runtime
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '3.
|
82
|
+
version: '3.1'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: diplomat
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,14 +198,14 @@ dependencies:
|
|
184
198
|
requirements:
|
185
199
|
- - "~>"
|
186
200
|
- !ruby/object:Gem::Version
|
187
|
-
version: '0.
|
201
|
+
version: '0.82'
|
188
202
|
type: :runtime
|
189
203
|
prerelease: false
|
190
204
|
version_requirements: !ruby/object:Gem::Requirement
|
191
205
|
requirements:
|
192
206
|
- - "~>"
|
193
207
|
- !ruby/object:Gem::Version
|
194
|
-
version: '0.
|
208
|
+
version: '0.82'
|
195
209
|
- !ruby/object:Gem::Dependency
|
196
210
|
name: rugged
|
197
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -240,28 +254,28 @@ dependencies:
|
|
240
254
|
requirements:
|
241
255
|
- - "~>"
|
242
256
|
- !ruby/object:Gem::Version
|
243
|
-
version: '3.
|
257
|
+
version: '3.9'
|
244
258
|
type: :development
|
245
259
|
prerelease: false
|
246
260
|
version_requirements: !ruby/object:Gem::Requirement
|
247
261
|
requirements:
|
248
262
|
- - "~>"
|
249
263
|
- !ruby/object:Gem::Version
|
250
|
-
version: '3.
|
264
|
+
version: '3.9'
|
251
265
|
- !ruby/object:Gem::Dependency
|
252
266
|
name: rspec
|
253
267
|
requirement: !ruby/object:Gem::Requirement
|
254
268
|
requirements:
|
255
269
|
- - "~>"
|
256
270
|
- !ruby/object:Gem::Version
|
257
|
-
version: '3.
|
271
|
+
version: '3.10'
|
258
272
|
type: :development
|
259
273
|
prerelease: false
|
260
274
|
version_requirements: !ruby/object:Gem::Requirement
|
261
275
|
requirements:
|
262
276
|
- - "~>"
|
263
277
|
- !ruby/object:Gem::Version
|
264
|
-
version: '3.
|
278
|
+
version: '3.10'
|
265
279
|
- !ruby/object:Gem::Dependency
|
266
280
|
name: fivemat
|
267
281
|
requirement: !ruby/object:Gem::Requirement
|
@@ -298,17 +312,19 @@ executables:
|
|
298
312
|
extensions: []
|
299
313
|
extra_rdoc_files: []
|
300
314
|
files:
|
315
|
+
- ".buildkite/pipeline.yml"
|
301
316
|
- ".dockerignore"
|
302
317
|
- ".gitattributes"
|
303
318
|
- ".gitignore"
|
304
319
|
- ".rspec"
|
320
|
+
- Deskfile
|
305
321
|
- Dockerfile
|
306
322
|
- Dockerfile.release
|
323
|
+
- Dockerfile.staging
|
307
324
|
- Gemfile
|
308
325
|
- LICENSE
|
309
326
|
- README.md
|
310
327
|
- Rakefile
|
311
|
-
- build_dev.sh
|
312
328
|
- docker-compose.yml
|
313
329
|
- exe/shipitron
|
314
330
|
- lib/shipitron.rb
|
@@ -320,6 +336,7 @@ files:
|
|
320
336
|
- lib/shipitron/client/ensure_deploy_not_running.rb
|
321
337
|
- lib/shipitron/client/fetch_clusters.rb
|
322
338
|
- lib/shipitron/client/force_deploy.rb
|
339
|
+
- lib/shipitron/client/generate_deploy.rb
|
323
340
|
- lib/shipitron/client/load_application_config.rb
|
324
341
|
- lib/shipitron/client/load_templates.rb
|
325
342
|
- lib/shipitron/client/register_ecs_task_definitions.rb
|
@@ -346,6 +363,7 @@ files:
|
|
346
363
|
- lib/shipitron/server/ecs_task_defs/map_parsed_templates.rb
|
347
364
|
- lib/shipitron/server/ecs_task_defs/update_from_params.rb
|
348
365
|
- lib/shipitron/server/ecs_task_defs/update_in_place.rb
|
366
|
+
- lib/shipitron/server/fetch_deploy.rb
|
349
367
|
- lib/shipitron/server/git/clone_local_copy.rb
|
350
368
|
- lib/shipitron/server/git/configure.rb
|
351
369
|
- lib/shipitron/server/git/download_cache.rb
|
@@ -361,7 +379,9 @@ files:
|
|
361
379
|
- lib/shipitron/smash.rb
|
362
380
|
- lib/shipitron/version.rb
|
363
381
|
- scripts/docker-entrypoint.sh
|
382
|
+
- scripts/release-entrypoint.sh
|
364
383
|
- shipitron.gemspec
|
384
|
+
- test.yml
|
365
385
|
homepage: https://github.com/outstand/shipitron
|
366
386
|
licenses: []
|
367
387
|
metadata: {}
|
@@ -380,7 +400,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
380
400
|
- !ruby/object:Gem::Version
|
381
401
|
version: '0'
|
382
402
|
requirements: []
|
383
|
-
rubygems_version: 3.1.
|
403
|
+
rubygems_version: 3.1.6
|
384
404
|
signing_key:
|
385
405
|
specification_version: 4
|
386
406
|
summary: A deployment tool for use with Docker and ECS.
|
data/build_dev.sh
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
set -e -x
|
3
|
-
|
4
|
-
build_image=outstand/shipitron:dev
|
5
|
-
dockerfile=Dockerfile
|
6
|
-
bundler_data_dir=cache
|
7
|
-
|
8
|
-
tar_container=''
|
9
|
-
|
10
|
-
function cleanup {
|
11
|
-
if [ -n "$tar_container" ]; then
|
12
|
-
docker rm -fv ${tar_container}
|
13
|
-
fi
|
14
|
-
|
15
|
-
rm -f ${bundler_data_dir}/cidfile
|
16
|
-
}
|
17
|
-
|
18
|
-
trap cleanup EXIT
|
19
|
-
|
20
|
-
build_args=''
|
21
|
-
mkdir -p ${bundler_data_dir}
|
22
|
-
|
23
|
-
docker build --pull -t ${build_image} -f ${dockerfile} ${build_args} .
|
24
|
-
|
25
|
-
docker run -t --cidfile=${bundler_data_dir}/cidfile -w /usr/local/bundle ${build_image} tar -zcf /tmp/bundler-data.tar.gz .
|
26
|
-
tar_container=$(cat ${bundler_data_dir}/cidfile)
|
27
|
-
docker cp ${tar_container}:/tmp/bundler-data.tar.gz ${bundler_data_dir}/bundler-data.tar.gz
|