Skip to content

Commit 15619a5

Browse files
author
Pierre Ugaz
committed
feat: runners on scaleway
Signed-off-by: Pierre Ugaz <[email protected]>
1 parent 1e63229 commit 15619a5

File tree

7 files changed

+191
-18
lines changed

7 files changed

+191
-18
lines changed

.gitignore

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
binaries
2-
*/binaries
2+
*/binaries
3+
.terraform
4+
*.tfstate*

.gitlab-ci.yml

+52-13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
stages:
2+
- register
23
- images
4+
- unregister
35

46
.image:
57
image: docker:17.12
@@ -16,17 +18,54 @@ stages:
1618
script:
1719
- make all
1820

19-
test:
20-
extends: .image
21+
.runner:
22+
image:
23+
name: hashicorp/terraform:0.12.17
24+
entrypoint: [""]
25+
before_script:
26+
- export RUNNER_ARCH=$(echo $CI_JOB_NAME|sed 's,.*:,,g')
27+
- cd ci/scway/$RUNNER_ARCH
28+
- terraform init
29+
30+
# test:arm:
31+
# extends: .image
32+
# script:
33+
# - make build
34+
# except:
35+
# - master
36+
37+
# img:arm:
38+
# extends: .image
39+
# only:
40+
# - master
41+
# environment:
42+
# name: stable/docker_images
43+
# url: https://hub.docker.com/r/klud/gitlab-runner/tags/
44+
45+
register:arm:
46+
extends: .runner
47+
stage: register
48+
script:
49+
- terraform apply -auto-approve
50+
51+
register:arm64:
52+
extends: .runner
53+
stage: register
54+
script:
55+
- terraform apply -auto-approve
56+
57+
unregister:arm:
58+
extends: .runner
59+
stage: unregister
60+
script:
61+
- terraform destroy -auto-approve
62+
dependencies:
63+
- register:arm
64+
65+
unregister:arm64:
66+
extends: .runner
67+
stage: unregister
2168
script:
22-
- make build
23-
except:
24-
- master
25-
26-
runner:
27-
extends: .image
28-
only:
29-
- master
30-
environment:
31-
name: stable/docker_images
32-
url: https://hub.docker.com/r/klud/gitlab-runner/tags/
69+
- terraform destroy -auto-approve
70+
dependencies:
71+
- register:arm64

Makefile

+7-3
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,13 @@ version: FORCE
2424
@echo Brought to you by ulm0
2525
@echo "---"
2626

27-
build:
28-
# Build and push the Docker image
29-
@./ci/build
27+
build: build-alpine build-ubuntu
28+
29+
build-alpine:
30+
@./ci/build-alpine
31+
32+
build-ubuntu:
33+
@./ci/build-ubuntu
3034

3135
push:
3236
@./ci/release

ci/build-alpine

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/bin/bash
2+
3+
set -eo pipefail
4+
5+
_docker(){
6+
docker ${@}
7+
}
8+
9+
build() {
10+
echo -e "\033[1mBuilding image: \033[32m${2}\033[0m"
11+
_docker build --build-arg "${1}" -t "${2}" -f "${3}" "${4}"
12+
}
13+
14+
build "RUNNER_VERSION=${VERSION}" "${IMAGE}:${VERSION}" dockerfiles/alpine/Dockerfile dockerfiles/alpine

ci/build renamed to ci/build-ubuntu

-1
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,4 @@ build() {
1111
_docker build --build-arg "${1}" -t "${2}" -f "${3}" "${4}"
1212
}
1313

14-
build "RUNNER_VERSION=${VERSION}" "${IMAGE}:${VERSION}" dockerfiles/alpine/Dockerfile dockerfiles/alpine
1514
build "RUNNER_VERSION=${VERSION}" "${IMAGE}:${VERSION}-ubuntu" dockerfiles/ubuntu/Dockerfile dockerfiles/ubuntu

ci/scway/arm/main.tf

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
terraform {
2+
backend "s3" {
3+
bucket = "ulm0"
4+
key = "runner/arm.tfstate"
5+
skip_credentials_validation = true
6+
skip_region_validation = true
7+
}
8+
}
9+
10+
provider "scaleway" {
11+
region = "fr-par"
12+
zone = "fr-par-1"
13+
}
14+
15+
resource "tls_private_key" "runner_key" {
16+
algorithm = "RSA"
17+
rsa_bits = "4096"
18+
}
19+
20+
data "scaleway_image" "docker" {
21+
architecture = "arm"
22+
name = "Docker"
23+
most_recent = true
24+
}
25+
26+
resource "scaleway_account_ssh_key" "runner_key" {
27+
name = "runner_key"
28+
public_key = tls_private_key.runner_key.public_key_openssh
29+
}
30+
31+
data "scaleway_bootscript" "bootscript" {
32+
architecture = "arm"
33+
name_filter = "4.9 latest"
34+
}
35+
36+
37+
resource "scaleway_server" "runner" {
38+
name = "runner"
39+
image = data.scaleway_image.docker.id
40+
dynamic_ip_required = true
41+
type = "C1"
42+
boot_type = "bootscript"
43+
bootscript = data.scaleway_bootscript.bootscript.id
44+
45+
connection {
46+
type = "ssh"
47+
user = "root"
48+
host = self.public_ip
49+
private_key = tls_private_key.runner_key.private_key_pem
50+
}
51+
52+
provisioner "remote-exec" {
53+
inline = [
54+
"docker info",
55+
"uname -a",
56+
]
57+
}
58+
}

ci/scway/arm64/main.tf

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
terraform {
2+
backend "s3" {
3+
bucket = "ulm0"
4+
key = "runner/arm64.tfstate"
5+
skip_credentials_validation = true
6+
skip_region_validation = true
7+
}
8+
}
9+
10+
provider "scaleway" {
11+
region = "nl-ams"
12+
zone = "nl-ams-1"
13+
}
14+
15+
resource "tls_private_key" "runner_key" {
16+
algorithm = "RSA"
17+
rsa_bits = "4096"
18+
}
19+
20+
data "scaleway_image" "docker" {
21+
architecture = "arm64"
22+
name = "Docker"
23+
most_recent = true
24+
}
25+
26+
resource "scaleway_account_ssh_key" "runner_key" {
27+
name = "runner_key"
28+
public_key = tls_private_key.runner_key.public_key_openssh
29+
}
30+
31+
data "scaleway_bootscript" "bootscript" {
32+
architecture = "arm64"
33+
name_filter = "4.19 latest"
34+
}
35+
36+
resource "scaleway_server" "runner" {
37+
name = "runner"
38+
image = data.scaleway_image.docker.id
39+
dynamic_ip_required = true
40+
type = "ARM64-2GB"
41+
boot_type = "bootscript"
42+
bootscript = data.scaleway_bootscript.bootscript.id
43+
44+
connection {
45+
type = "ssh"
46+
user = "root"
47+
host = self.public_ip
48+
private_key = tls_private_key.runner_key.private_key_pem
49+
}
50+
51+
provisioner "remote-exec" {
52+
inline = [
53+
"docker info",
54+
"uname -a",
55+
]
56+
}
57+
}

0 commit comments

Comments
 (0)