Attempt at adding Jenkins CI

This commit is contained in:
MassiveBox 2023-07-21 09:43:36 +02:00
parent 4b3af653b8
commit 33f09c93bd
No known key found for this signature in database
GPG Key ID: 9B74D3A59181947D
7 changed files with 153 additions and 168 deletions

View File

@ -1,69 +0,0 @@
pipeline:
build-and-format:
image: golang
commands:
- curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
- go mod tidy
- golangci-lint run
- env GOOS=linux GOARCH=amd64 go build -o ecodash-x86 src/main/main.go
- env GOOS=linux GOARCH=arm go build -o ecodash-arm src/main/main.go
- apt-get update; apt-get upgrade -y; apt-get install zip -y
- mv ecodash-x86 ecodash; zip -r ecodash-x86.zip templates ecodash; mv ecodash ecodash-x86
- mv ecodash-arm ecodash; zip -r ecodash-arm.zip templates ecodash; mv ecodash ecodash-arm
- zip templates.zip -r templates
upload-debug:
image: vividboarder/drone-webdav
settings:
file: { ecodash-x86,ecodash-arm,templates.zip }
destination:
from_secret: webdav_destination
username:
from_secret: webdav_username
password:
from_secret: webdav_password
attempts: 5
gitea-publish:
image: plugins/gitea-release
settings:
base_url: https://git.massivebox.net
files:
- ecodash-x86.zip
- ecodash-arm.zip
api_key:
from_secret: auth_token
title: ${CI_COMMIT_TAG}
when:
event: tag
docker-unstable:
image: woodpeckerci/plugin-docker-buildx
settings:
registry: git.massivebox.net
repo: git.massivebox.net/ecodash/ecodash
platforms: linux/amd64,linux/arm64
tag: unstable
username: massivebox
password:
from_secret: auth_token
context: .woodpecker
dockerfile: .woodpecker/Dockerfile-woodpecker
when:
event: [ push, pull_request, deployment ]
docker-tag:
image: woodpeckerci/plugin-docker-buildx
settings:
registry: git.massivebox.net
repo: git.massivebox.net/ecodash/ecodash
platforms: linux/amd64,linux/arm64
auto_tag: true
username: massivebox
password:
from_secret: auth_token
context: .woodpecker
dockerfile: .woodpecker/Dockerfile-woodpecker
when:
event: tag

View File

@ -1,11 +0,0 @@
FROM debian:latest
WORKDIR /app
COPY ./setup.sh ./setup.sh
RUN apt-get update; apt-get upgrade -y; apt-get install zip curl -y && \
curl https://cloud.massivebox.net/api/public/dl/fLgOAQNc -o templates.zip && unzip templates.zip && rm templates.zip && \
chmod +x setup.sh && ./setup.sh && rm setup.sh && \
chmod +x app
CMD ["./app"]

View File

@ -1,19 +0,0 @@
#!/bin/sh
ARCH=$(arch)
# This is a workaround to Woodpecker's inability to give files it has just built to Docker BuildX to build new images.
# After compiling the binaries in the "build-and-format" step of woodpecker.yml, we upload them to the cloud and fetch them from here.
if [ "$ARCH" = "x86_64" ]; then
echo "detected amd64"
curl https://cloud.massivebox.net/api/public/dl/uZaDQXAa -o app
elif [ "$ARCH" = "aarch64" ]; then
echo "deteched arm"
curl https://cloud.massivebox.net/api/public/dl/EhM62nhf -o app
else
echo "unsupported architecture"
return 1
fi
return 0

View File

@ -1,69 +0,0 @@
pipeline:
build-and-format:
image: golang
commands:
- curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
- go mod tidy
- golangci-lint run
- env GOOS=linux GOARCH=amd64 go build -o ecodash-x86 src/main/main.go
- env GOOS=linux GOARCH=arm go build -o ecodash-arm src/main/main.go
- apt-get update; apt-get upgrade -y; apt-get install zip -y
- mv ecodash-x86 ecodash; zip -r ecodash-x86.zip templates ecodash; mv ecodash ecodash-x86
- mv ecodash-arm ecodash; zip -r ecodash-arm.zip templates ecodash; mv ecodash ecodash-arm
- zip templates.zip -r templates
upload-debug:
image: vividboarder/drone-webdav
settings:
file: { ecodash-x86,ecodash-arm,templates.zip }
destination:
from_secret: webdav_destination
username:
from_secret: webdav_username
password:
from_secret: webdav_password
attempts: 5
gitea-publish:
image: plugins/gitea-release
settings:
base_url: https://git.massivebox.net
files:
- ecodash-x86.zip
- ecodash-arm.zip
api_key:
from_secret: auth_token
title: ${CI_COMMIT_TAG}
when:
event: tag
docker-unstable:
image: woodpeckerci/plugin-docker-buildx
settings:
registry: git.massivebox.net
repo: git.massivebox.net/ecodash/ecodash
platforms: linux/amd64,linux/arm64
tag: unstable
username: massivebox
password:
from_secret: auth_token
context: .woodpecker
dockerfile: .woodpecker/Dockerfile-woodpecker
when:
event: [ push, pull_request, deployment ]
docker-tag:
image: woodpeckerci/plugin-docker-buildx
settings:
registry: git.massivebox.net
repo: git.massivebox.net/ecodash/ecodash
platforms: linux/amd64,linux/arm64
auto_tag: true
username: massivebox
password:
from_secret: auth_token
context: .woodpecker
dockerfile: .woodpecker/Dockerfile-woodpecker
when:
event: tag

77
Jenkinsfile vendored Normal file
View File

@ -0,0 +1,77 @@
pipeline {
agent any
environment {
USER='placeholder'
PASSWORD='placeholder'
DOCKER_REGISTRY='git.massivebox.net'
BUILDER_NAME='mbuilder'
SERVICE='ecodash/ecodash'
TAG='latest'
}
stages {
stage('Run linter and build') {
agent { docker { image 'golang' } }
steps {
git url: 'https://git.massivebox.net/ecodash/ecodash'
sh 'curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin'
sh 'go mod tidy'
sh 'golangci-lint run'
sh 'env GOOS=linux GOARCH=amd64 go build -o app src/main/main.go'
stash includes: 'app', name: 'ecodash-x86'
sh 'env GOOS=linux GOARCH=arm go build -o app src/main/main.go'
stash includes: 'app', name: 'ecodash-arm'
stash includes: 'jenkins/Dockerfile', name: 'dockerfile'
stash includes: 'templates/**', name: 'templates'
}
}
stage('Build x86 container') {
steps {
unstash 'dockerfile'
unstash 'ecodash-x86'
unstash 'templates'
sh 'docker build -t $DOCKER_REGISTRY/$SERVICE:$TAG .'
}
}
stage('Prepare buildx') {
steps {
sh """
docker run --privileged --rm tonistiigi/binfmt --install all
docker context create $BUILDER_NAME
docker context use $BUILDER_NAME
docker buildx create $BUILDER_NAME
docker buildx use $BUILDER_NAME
docker buildx inspect --bootstrap
"""
}
}
stage('Build arm container') {
steps {
unstash 'dockerfile'
unstash 'ecodash-arm'
unstash 'templates'
sh 'docker buildx build --platform linux/arm64 -t $DOCKER_REGISTRY/$SERVICE:$TAG .'
}
}
}
post {
always {
// cleanup
sh """
docker context rm -f $BUILDER_NAME
docker buildx use default
"""
}
}
}

0
jenkins/Dockerfile Normal file
View File

76
jenkins/Jenkinsfile vendored Normal file
View File

@ -0,0 +1,76 @@
pipeline {
agent any
environment {
USER='user'
PASSWORD='password'
DOCKER_REGISTRY='git.massivebox.net'
BUILDER_NAME='mbuilder'
SERVICE='ecodash/ecodash'
TAG='latest'
}
stages {
stage('Run linter and build') {
agent { docker { image 'golang' } }
steps {
git url: 'https://git.massivebox.net/ecodash/ecodash'
//sh 'curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin'
sh 'go mod tidy'
//sh 'golangci-lint run'
sh 'env GOOS=linux GOARCH=amd64 go build -o app src/main/main.go'
stash includes: 'app', name: 'ecodash-x86'
sh 'env GOOS=linux GOARCH=arm go build -o app src/main/main.go'
stash includes: 'app', name: 'ecodash-arm'
stash includes: 'templates/**', name: 'templates'
}
}
stage('Build x86 container') {
steps {
sh 'curl -L -o Dockerfile https://pasty.nikko.cf/UYU39i/raw'
unstash 'ecodash-x86'
unstash 'templates'
sh 'docker build -t $DOCKER_REGISTRY/$SERVICE:$TAG .'
}
}
stage('Prepare buildx') {
steps {
sh """
docker run --privileged --rm tonistiigi/binfmt --install all
docker context create $BUILDER_NAME
docker context use $BUILDER_NAME
docker buildx create $BUILDER_NAME
docker buildx use $BUILDER_NAME
docker buildx inspect --bootstrap
"""
}
}
stage('Build arm container') {
steps {
sh 'curl -L -o Dockerfile https://pasty.nikko.cf/UYU39i/raw'
unstash 'ecodash-arm'
unstash 'templates'
sh 'docker buildx build --platform linux/arm64 -t $DOCKER_REGISTRY/$SERVICE:$TAG .'
}
}
}
post {
always {
// cleanup
sh """
docker context rm -f $BUILDER_NAME
docker buildx use default
"""
}
}
}