-
Notifications
You must be signed in to change notification settings - Fork 156
/
Copy pathJenkinsfile
138 lines (137 loc) · 5.97 KB
/
Jenkinsfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
pipeline {
agent none
environment {
DOCKER_REPO = "pyouroboros/ouroboros"
GIT_REPO = 'pyouroboros/ouroboros'
VERSION_FILE = "pyouroboros/__init__.py"
FLAKE_FILES = "ouroboros *.py pyouroboros/*.py"
TAG = ""
GIT_TOKEN = credentials('github-jenkins-token')
PYPI_CREDS = credentials('pypi-creds-dirtycajunrice')
}
stages {
stage('Flake8 + Run Once') {
agent { label 'amd64'}
steps {
sh """
python3 -m venv venv && venv/bin/pip install flake8 && venv/bin/python -m flake8 --max-line-length 120 ${FLAKE_FILES}
venv/bin/python -m pip install -r requirements.txt && venv/bin/python ouroboros --log-level debug --run-once
rm -rf venv/
"""
script {
TAG = sh(returnStdout: true, script: 'grep -i version ${VERSION_FILE} | cut -d" " -f3 | tr -d \\"').trim()
}
}
}
stage('Docker Builds') {
when {
anyOf {
branch 'master'
branch 'develop'
}
}
parallel {
stage('amd64') {
agent { label 'amd64'}
steps {
script {
if (BRANCH_NAME == 'master') {
def image = docker.build("${DOCKER_REPO}:${TAG}-amd64")
image.push()
} else if (BRANCH_NAME == 'develop') {
def image = docker.build("${DOCKER_REPO}:develop-amd64")
image.push()
}
}
}
}
stage('ARMv6') {
agent { label 'arm64'}
steps {
script {
if (BRANCH_NAME == 'master') {
def image = docker.build("${DOCKER_REPO}:${TAG}-arm", "-f Dockerfile.arm .")
image.push()
} else if (BRANCH_NAME == 'develop') {
def image = docker.build("${DOCKER_REPO}:develop-arm", "-f Dockerfile.arm .")
image.push()
}
}
}
}
stage('ARM64v8') {
agent { label 'arm64'}
steps {
script {
if (BRANCH_NAME == 'master') {
def image = docker.build("${DOCKER_REPO}:${TAG}-arm64", "-f Dockerfile.arm64 .")
image.push()
} else if (BRANCH_NAME == 'develop') {
def image = docker.build("${DOCKER_REPO}:develop-arm64", "-f Dockerfile.arm64 .")
image.push()
}
}
}
}
}
}
stage('Releases') {
when {
anyOf {
branch 'master'
branch 'develop'
}
}
parallel {
stage('Docker Manifest') {
agent { label 'amd64'}
steps {
script {
if (BRANCH_NAME == 'master') {
sh(script: """
docker manifest create ${DOCKER_REPO}:${TAG} ${DOCKER_REPO}:${TAG}-amd64 ${DOCKER_REPO}:${TAG}-arm64 ${DOCKER_REPO}:${TAG}-arm
docker manifest inspect ${DOCKER_REPO}:${TAG}
docker manifest push -p ${DOCKER_REPO}:${TAG}
docker manifest create ${DOCKER_REPO}:latest ${DOCKER_REPO}:${TAG}-amd64 ${DOCKER_REPO}:${TAG}-arm64 ${DOCKER_REPO}:${TAG}-arm
docker manifest inspect ${DOCKER_REPO}:latest
docker manifest push -p ${DOCKER_REPO}:latest
"""
)
} else if (BRANCH_NAME == 'develop') {
sh(script: """
docker manifest create ${DOCKER_REPO}:develop ${DOCKER_REPO}:develop-amd64 ${DOCKER_REPO}:develop-arm64 ${DOCKER_REPO}:develop-arm
docker manifest inspect ${DOCKER_REPO}:develop
docker manifest push -p ${DOCKER_REPO}:develop
"""
)
}
}
}
}
stage('GitHub') {
when { branch 'master' }
agent { label 'amd64'}
steps {
sh """
git remote set-url origin "https://${GIT_TOKEN_USR}:${GIT_TOKEN_PSW}@github.com/${GIT_REPO}.git"
git tag ${TAG}
git push --tags
"""
}
}
stage('PyPi') {
when { branch 'master' }
agent { label 'amd64'}
steps {
sh """
python3 -m venv venv && venv/bin/pip install twine
venv/bin/python setup.py sdist && venv/bin/python -m twine upload --skip-existing -u ${PYPI_CREDS_USR} -p ${PYPI_CREDS_PSW} dist/*
git tag ${TAG}
git push --tags
"""
}
}
}
}
}
}