Update azure-pipelines.yml for Azure Pipelines (#331)

* Update azure-pipelines.yml for Azure Pipelines

* Add Python build scripts.

* Run scripts with Python 3.

* Add strategy for both variants.

* Fix variables for jobs and use the right variant to build.

* Fix build and test script.
This commit is contained in:
Abhilash Raj
2019-05-19 21:02:06 -04:00
committed by GitHub
parent 234f62241a
commit e6de13ba44
4 changed files with 153 additions and 15 deletions

View File

@@ -1,18 +1,38 @@
# Docker image
# Build a Docker image to deploy, run, or push to a container registry.
# Add steps that use Docker Compose, tag images, push to a registry, run an image, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker
trigger:
- master
pool:
vmImage: 'Ubuntu-16.04'
steps:
- script: |
docker --version
docker-compose --version
docker build -t maxking/mailman-core:latest core/
docker build -t maxking/mailman-web:latest web/
docker build -t maxking/postorius postorius/
strategy:
maxParallel: 2
matrix:
Stable:
variant: stable
Rolling:
variant: rolling
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.7'
architecture: 'x64'
- task: PythonScript@0
inputs:
scriptSource: 'filepath'
scriptPath: 'build.py'
arguments: $(variant)
- task: PythonScript@0
inputs:
scriptSource: 'filepath'
scriptPath: 'test.py'
arguments: $(variant)
- task: Bash@3
inputs:
filePath: 'tests/test.sh'
- task: PythonScript@0
inputs:
scriptSource: 'filePath'
scriptPath: '.travis/deploy.py'
condition: and(eq(variables['Build.SourceBranch'], 'refs/heads/master'),
eq(variables['variant'], 'rolling'))

79
build.py Executable file
View File

@@ -0,0 +1,79 @@
#/usr/bin/env python3
# This is the build script to build container images for Mailman.
import sys
import subprocess
from pathlib import Path
STABLE_DOCKERFILES = {
'core-stable': Path('core/Dockerfile'),
'web-stable': Path('web/Dockerfile'),
'postorius-stable': Path('postorius/Dockerfile'),
}
ROLLING_DOCKERFILES = {
'core-rolling': Path('core/Dockerfile.dev'),
'web-rolling': Path('web/Dockerfile.dev'),
'postorius-rolling': Path('postorius/Dockerfile.dev'),
}
VARIANTS = {
'stable': STABLE_DOCKERFILES,
'rolling': ROLLING_DOCKERFILES,
}
def run_command(args):
print(' '.join(args))
subprocess.run(
args,
stdout=sys.stdout,
stderr=sys.stderr,
check=True)
def docker_build(dockerfile, tag, args=None, labels=None):
cmd = [
'docker', 'build',
'-t', tag,
'-f', str(dockerfile),
str(dockerfile.parent)
]
if args:
for arg in args:
cmd.append('--build-arg')
cmd.append(arg)
if labels:
for label in labels:
cmd.append('--label')
cmd.append(label)
return run_command(cmd)
def docker_tag(from_tag, to_tag):
cmd = [
'docker', 'tag',
from_tag, to_tag,
]
return run_command(cmd)
def usage():
print('usage: python build.py (stable|rolling)')
if __name__ == '__main__':
if len(sys.argv) < 2:
usage()
sys.exit(1)
variant = sys.argv[1]
if variant not in VARIANTS:
usage()
sys.exit(1)
for name, path in VARIANTS[variant].items():
docker_build(dockerfile=path, tag=name)

39
test.py Normal file
View File

@@ -0,0 +1,39 @@
#!/usr/bin/env python3
import sys
from pathlib import Path
from build import VARIANTS
DOCKER_TEST="""version: '2'
services:
mailman-core:
image: core-{variant}
mailman-web:
image: web-{variant}
environment:
- SECRET_KEY=abcdefghijklmnopqrstuv
"""
def test_setup(variant):
Path('docker-test.yaml').write_text(
DOCKER_TEST.format(variant=variant))
def usage():
print('usage: python test.py (stable|rolling)')
if __name__ == '__main__':
if len(sys.argv) < 2:
usage()
sys.exit(1)
variant = sys.argv[1]
if variant not in VARIANTS:
usage()
sys.exit(1)
test_setup(variant)

View File

@@ -27,10 +27,10 @@ docker logs mailman-core
# Check to see if the core is working as expected.
docker exec -it mailman-core curl -u restadmin:restpass http://172.19.199.2:8001/3.1/system | grep "GNU Mailman"
docker exec mailman-core curl -u restadmin:restpass http://172.19.199.2:8001/3.1/system | grep "GNU Mailman"
# Check to see if postorius is working.
docker exec -it mailman-web curl -L http://172.19.199.3:8000/postorius/lists | grep "Mailing List"
docker exec mailman-web curl -L http://172.19.199.3:8000/postorius/lists | grep "Mailing List"
# Check to see if hyperkitty is working.
docker exec -it mailman-web curl -L http://172.19.199.3:8000/hyperkitty/ | grep "Available lists"
docker exec mailman-web curl -L http://172.19.199.3:8000/hyperkitty/ | grep "Available lists"