Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions .devops/pipelines/jobs.ci.build.docker.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
parameters:
- name: pool
type: string
default: "<empty>"
- name: arch
default: "<empty>"

jobs:
- job: build_docker_${{ parameters.arch }}
displayName: "Docker ${{ parameters.arch }} image"
pool:
${{ if eq(parameters.pool, '<empty>') }}:
vmImage: "ubuntu-latest"
${{ if ne(parameters.pool, '<empty>') }}:
name: "${{ parameters.pool }}"
${{ if ne(parameters.arch, '<empty>') }}:
demands:
- ${{ if eq(parameters.arch, 'amd64') }}:
- Agent.OSArchitecture -equals X64
- ${{ if eq(parameters.arch, 'arm') }}:
- Agent.OSArchitecture -equals ARM
- ${{ if eq(parameters.arch, 'arm64') }}:
- Agent.OSArchitecture -equals ARM64
variables:
- ${{ if eq(parameters.arch, 'amd64') }}:
- name: Docker.CLI.Architecture
value: amd64
- ${{ if eq(parameters.arch, 'arm64') }}:
- name: Docker.CLI.Architecture
value: arm64
- ${{ if eq(parameters.arch, 'arm') }}:
- name: Docker.CLI.Architecture
value: armhf
- name: Docker.Image.Architecture
value: ${{ parameters.arch }}

steps:
- script: |
docker version
if [ "$?" -ne "0" ]; then
apt-get update
apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository \
"deb [arch=$(Docker.CLI.Architecture)] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io
fi
displayName: "Docker install"

- task: Docker@2
displayName: 'Build image'
inputs:
containerRegistry: 'Emberstack Docker Hub'
repository: $(imageRepository)
Dockerfile: src/ES.SFTP.Host/Dockerfile
command: build
buildContext: src
tags: 'build-$(Build.BuildNumber)-$(Docker.Image.Architecture)'

- task: Docker@2
displayName: "Push image"
inputs:
containerRegistry: "Emberstack Docker Hub"
repository: $(imageRepository)
command: push
tags: |
build-$(Build.BuildNumber)-$(Docker.Image.Architecture)
75 changes: 75 additions & 0 deletions .devops/pipelines/stage.cd.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
parameters:
architectures: []


stages:
- stage: cd
displayName: "CD"
dependsOn: 'ci'
condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'Manual'), in(variables['Build.SourceBranchName'], 'master'))
jobs:
- job: release
displayName: "Release"
pool:
vmImage: ubuntu-latest
variables:
- group: "OpenSource.GitHub"
- name: "manifest.images"
value: ""
steps:
- checkout: none
- download: current
artifact: 'helm'
displayName: "Download helm artifact"
- task: DockerInstaller@0
displayName: 'Docker install'
inputs:
dockerVersion: '19.03.5'
- task: Docker@2
displayName: "Docker login"
inputs:
containerRegistry: "Emberstack Docker Hub"
command: login
- task: HelmInstaller@1
inputs:
helmVersionToInstall: '3.1.1'
displayName: "Helm install"
- ${{ each architecture in parameters.architectures }}:
- script: |
docker pull $(imageRepository):build-$(Build.BuildNumber)-${{ architecture.arch }}
echo '##vso[task.setvariable variable=manifest.images]$(manifest.images) $(imageRepository):build-$(Build.BuildNumber)-${{ architecture.arch }}'
docker tag $(imageRepository):build-$(Build.BuildNumber)-${{ architecture.arch }} $(imageRepository):(Build.BuildNumber)-${{ architecture.arch }}
docker push $(imageRepository):(Build.BuildNumber)-${{ architecture.arch }}
displayName: "Retag ${{ architecture.arch }} image"
- script: |
docker manifest create $(imageRepository):$(Build.BuildNumber) $(manifest.images)
docker manifest push $(imageRepository):$(Build.BuildNumber)
docker manifest create $(imageRepository):latest $(manifest.images)
docker manifest push $(imageRepository):latest
displayName: 'Create and push multi-arch manifest'
- script: |
git config --global user.email "$(emberstack-agent-email)"
git config --global user.name "$(emberstack-agent-name)"
git clone https://$(emberstack-agent-username):$(emberstack-agent-pat)@github.com/emberstack/helm-charts.git

mkdir -p helm-charts/charts
cp $(Pipeline.Workspace)/helm/sftp-$(Build.BuildNumber).tgz helm-charts/charts

cd helm-charts
rm index.yaml
helm repo index ./
git add .
git status
git commit -m "Added sftp-$(Build.BuildNumber).tgz"
git push
displayName: 'Add chart to GitHub repository'
- task: GitHubRelease@1
displayName: 'GitHub release (create)'
inputs:
gitHubConnection: GitHub
repositoryName: 'emberstack/docker-sftp'
tagSource: userSpecifiedTag
tag: 'v$(Build.BuildNumber)'
title: 'Release v$(Build.BuildNumber)'
releaseNotesSource: inline
releaseNotes: 'The release process is automated.'
69 changes: 69 additions & 0 deletions .devops/pipelines/stage.ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
parameters:
architectures: []


stages:
- stage: ci
displayName: "CI"
jobs:
- job: build_helm
displayName: "Helm"
pool:
vmImage: ubuntu-latest
steps:
- script: |
mkdir -p artifacts/helm
workingDirectory: '$(Build.ArtifactStagingDirectory)'
displayName: 'Create Artifacts directories'
- task: HelmInstaller@1
inputs:
helmVersionToInstall: '3.1.1'
displayName: "Helm install"
- script: |
cp README.md src/deploy/helm/sftp/README.md
displayName: 'import README'
- script: |
helm package --destination $(Build.ArtifactStagingDirectory)/artifacts/helm --version $(Build.BuildNumber) --app-version $(Build.BuildNumber) src/deploy/helm/sftp
displayName: 'Helm package chart'
- publish: '$(Build.ArtifactStagingDirectory)/artifacts/helm'
artifact: 'helm'
displayName: "Publish helm artifact"


- ${{ each architecture in parameters.architectures }}:
- template: jobs.ci.build.docker.yaml
parameters:
arch: ${{ architecture.arch }}
pool: ${{ architecture.pool }}


- job: build_docker_multiarch
displayName: "Docker multiarch image"
pool:
vmImage: ubuntu-latest
dependsOn:
- ${{ each architecture in parameters.architectures }}:
- build_docker_${{ architecture.arch}}
variables:
- name: "manifest.images"
value: ""
steps:
- task: DockerInstaller@0
displayName: 'Docker install'
inputs:
dockerVersion: '19.03.5'
- task: Docker@2
displayName: "Docker login"
inputs:
containerRegistry: "Emberstack Docker Hub"
command: login
- ${{ each architecture in parameters.architectures }}:
- script: |
docker pull $(imageRepository):build-$(Build.BuildNumber)-${{ architecture.arch }}
echo '##vso[task.setvariable variable=manifest.images]$(manifest.images) $(imageRepository):build-$(Build.BuildNumber)-${{ architecture.arch }}'
displayName: "Pull ${{ architecture.arch }} image"
- script: |
docker manifest create $(imageRepository):build-$(Build.BuildNumber) $(manifest.images)
docker manifest inspect $(imageRepository):build-$(Build.BuildNumber)
docker manifest push $(imageRepository):build-$(Build.BuildNumber)
displayName: "Create and push multi-arch manifest"
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ BenchmarkDotNet.Artifacts/
project.lock.json
project.fragment.lock.json
artifacts/
**/Properties/launchSettings.json
# **/Properties/launchSettings.json

# StyleCop
StyleCopReport.xml
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This project provides a Docker image for hosting a SFTP server. Included are `Do
[![license](https://img.shields.io/github/license/emberstack/docker-sftp.svg?style=flat-square)](LICENSE)
[![slack](https://img.shields.io/badge/join-emberstack%20on%20Slack-gray.svg?style=flat-square&longCache=true&logo=slack&colorB=green)](https://join.slack.com/t/emberstack/shared_invite/zt-8qyutopg-9ghwTq3OnHSm2tY9Sk5ULA)

> Supports architectures: `amd64` and `arm`. Coming soon: `arm64`
> Supports architectures: `amd64`, `arm` and `arm64`

### Support
If you need help or found a bug, please feel free to open an issue on the [emberstack/docker-sftp](https://github.com/emberstack/docker-sftp) GitHub project.
Expand Down
Loading