ci/cd - dynamic arm build node

This commit is contained in:
florian 2023-04-30 03:07:26 +02:00
parent 4e0d2fce5f
commit 266383abb1
No known key found for this signature in database
GPG Key ID: 3D80806F12602A7C
6 changed files with 116 additions and 10 deletions

View File

@ -120,7 +120,15 @@ jobs:
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
# Build arm64 + arm/v7 images
create-arm:
uses: ./.github/workflows/create-arm.yml
secrets:
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY }}
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY }}
SCW_DEFAULT_PROJECT_ID: ${{ secrets.SCW_DEFAULT_PROJECT_ID }}
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_DEFAULT_ORGANIZATION_ID }}
build-bw-arm:
needs: [create-arm]
uses: ./.github/workflows/container-build.yml
with:
RELEASE: beta
@ -134,9 +142,10 @@ jobs:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
ARM_SSH_KEY: ${{ secrets.ARM_SSH_KEY }}
ARM_SSH_IP: ${{ needs.create-arm.outputs.arm_ip }}
ARM_SSH_CONFIG: ${{ secrets.ARM_SSH_CONFIG }}
build-sc-arm:
needs: ["build-bw-arm"]
needs: [create-arm, build-bw-arm]
uses: ./.github/workflows/container-build.yml
with:
RELEASE: beta
@ -149,9 +158,10 @@ jobs:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
ARM_SSH_KEY: ${{ secrets.ARM_SSH_KEY }}
ARM_SSH_IP: ${{ needs.create-arm.outputs.arm_ip }}
ARM_SSH_CONFIG: ${{ secrets.ARM_SSH_CONFIG }}
build-au-arm:
needs: ["build-sc-arm"]
needs: [create-arm, build-sc-arm]
uses: ./.github/workflows/container-build.yml
with:
RELEASE: beta
@ -164,9 +174,10 @@ jobs:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
ARM_SSH_KEY: ${{ secrets.ARM_SSH_KEY }}
ARM_SSH_IP: ${{ needs.create-arm.outputs.arm_ip }}
ARM_SSH_CONFIG: ${{ secrets.ARM_SSH_CONFIG }}
build-ui-arm:
needs: ["build-au-arm"]
needs: [create-arm, build-au-arm]
uses: ./.github/workflows/container-build.yml
with:
RELEASE: beta
@ -179,6 +190,7 @@ jobs:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
ARM_SSH_KEY: ${{ secrets.ARM_SSH_KEY }}
ARM_SSH_IP: ${{ needs.create-arm.outputs.arm_ip }}
ARM_SSH_CONFIG: ${{ secrets.ARM_SSH_CONFIG }}
# Linux packages
@ -402,7 +414,16 @@ jobs:
VERSION: ${{ needs.wait-builds.outputs.version }}
ALIAS: beta
# Remove ARM VM
rm-arm:
if: ${{ always() }}
needs: [create-arm, push-bunkerweb, push-scheduler, push-autoconf, push-ui]
uses: ./.github/workflows/rm-arm.yml
secrets:
ARM_ID: ${{ needs.create-arm.outputs.arm_id }}
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY }}
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY }}
SCW_DEFAULT_PROJECT_ID: ${{ secrets.SCW_DEFAULT_PROJECT_ID }}
SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_DEFAULT_ORGANIZATION_ID }}

View File

@ -38,6 +38,8 @@ on:
required: false
ARM_SSH_KEY:
required: false
ARM_SSH_IP:
required: false
ARM_SSH_CONFIG:
required: false
@ -54,10 +56,11 @@ jobs:
mkdir -p ~/.ssh
echo "$SSH_KEY" > ~/.ssh/id_rsa_arm
chmod 600 ~/.ssh/id_rsa_arm
echo "$SSH_CONFIG" > ~/.ssh/config
echo "$SSH_CONFIG" | sed "s/SSH_IP/$SSH_IP/g" > ~/.ssh/config
env:
SSH_KEY: ${{ secrets.ARM_SSH_KEY }}
SSH_CONFIG: ${{ secrets.ARM_SSH_CONFIG }}
SSH_IP: ${{ secrets.ARM_SSH_IP }}
SSH_CONFIG: ${{ secrets.ARM_SSH_IP }}
- name: Setup Buildx
uses: docker/setup-buildx-action@v2
if: inputs.CACHE_SUFFIX != 'arm'
@ -66,7 +69,7 @@ jobs:
if: inputs.CACHE_SUFFIX == 'arm'
with:
driver: remote
endpoint: ssh://ubuntu@arm
endpoint: ssh://root@arm
platforms: linux/arm64,linux/arm/v7,linux/arm/v6
- name: Login to Docker Hub
uses: docker/login-action@v2

47
.github/workflows/create-arm.yml vendored Normal file
View File

@ -0,0 +1,47 @@
name: Create ARM node (REUSABLE)
on:
workflow_call:
outputs:
arm_id:
description: "ARM ID"
value: ${{ fromJson(jobs.build.outputs.json).ID }}
arm_ip:
description: "ARM ID"
value: ${{ fromJson(jobs.build.outputs.json).PluginIP.Address }}
secrets:
SCW_ACCESS_KEY:
required: true
SCW_SECRET_KEY:
required: true
SCW_DEFAULT_PROJECT_ID:
required: true
SCW_DEFAULT_ORGANIZATION_ID:
required: true
jobs:
build:
runs-on: ubuntu-latest
outputs:
json: steps.scw.outputs.json
steps:
# Prepare
- name: Checkout source code
uses: actions/checkout@v3
- name: Create ARM VM
id: scw
uses: scaleway/action-scw@v0
with:
args: instance server create zone=fr-par-2 type=AMP2-C8
save_config: true
version: v2.13.0
access-key: ${{ secrets.SCW_ACCESS_KEY }}
secret-key: ${{ secrets.SCW_SECRET_KEY }}
default-project-id: ${{ secrets.SCW_DEFAULT_PROJECT_ID }}
default-organization-id: ${{ secrets.SCW_DEFAULT_ORGANIZATION_ID }}
- name: Wait for VM
run: scw instance server wait ${{ fromJson(steps.scw.outputs.json).ID }} zone=fr-par-2
- name: Install Docker
run: scw instance server ssh ${{ fromJson(steps.scw.outputs.json).ID }} zone=fr-par-2 "command=curl -fsSL https://test.docker.com -o test-docker.sh ; sh test-docker.sh"

35
.github/workflows/rm-arm.yml vendored Normal file
View File

@ -0,0 +1,35 @@
name: Create ARM node (REUSABLE)
on:
workflow_call:
inputs:
ARM_ID:
required: true
type: string
secrets:
SCW_ACCESS_KEY:
required: true
SCW_SECRET_KEY:
required: true
SCW_DEFAULT_PROJECT_ID:
required: true
SCW_DEFAULT_ORGANIZATION_ID:
required: true
jobs:
build:
runs-on: ubuntu-latest
steps:
# Prepare
- name: Checkout source code
uses: actions/checkout@v3
- name: Delete ARM VM
uses: scaleway/action-scw@v0
with:
args: instance server delete ${{ inputs.ARM_ID }} zone=fr-par-2 with-ip=true with-volumes=all
version: v2.13.0
access-key: ${{ secrets.SCW_ACCESS_KEY }}
secret-key: ${{ secrets.SCW_SECRET_KEY }}
default-project-id: ${{ secrets.SCW_DEFAULT_PROJECT_ID }}
default-organization-id: ${{ secrets.SCW_DEFAULT_ORGANIZATION_ID }}

View File

@ -10,7 +10,7 @@ RUN mkdir -p /usr/share/bunkerweb/deps && \
rm -rf /tmp/req
# Install python requirements
RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev && \
RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev openssl-dev cargo && \
pip install --no-cache-dir --upgrade pip && \
pip install wheel && \
mkdir -p /usr/share/bunkerweb/deps/python && \

View File

@ -10,7 +10,7 @@ RUN mkdir -p /usr/share/bunkerweb/deps && \
rm -rf /tmp/req
# Install python requirements
RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev openssl-dev cargo && \
RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev openssl-dev cargo file && \
pip install --no-cache-dir --upgrade pip && \
pip install wheel && \
mkdir -p /usr/share/bunkerweb/deps/python && \