Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added scripts for build edge-proxy and iotedged images #1212

Merged
merged 34 commits into from
May 31, 2019
Merged
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
1246a7f
Added scripts to build edge-proxy images
dmolokanov May 13, 2019
b7282b1
Added missed files
dmolokanov May 13, 2019
c057e59
Added missed path to executable script
dmolokanov May 13, 2019
8401a9d
Commented for tests only
dmolokanov May 13, 2019
2d4ade0
Reverted changes
dmolokanov May 13, 2019
c69b2d0
Updated build script for edgelet projects
dmolokanov May 16, 2019
634c64b
Fixed strip tool
dmolokanov May 16, 2019
57a233f
Refactored pipeline to avoid redundant builds
dmolokanov May 16, 2019
5c8740e
Added tasks to build image for iotedged
dmolokanov May 21, 2019
55d2e18
Made lowercase comparison
dmolokanov May 21, 2019
987746d
Copy *.so files only in release configuration
dmolokanov May 21, 2019
6290011
Added manifest to build multi-arch images
dmolokanov May 21, 2019
6b51b06
Fixed edge-proxy build steps
dmolokanov May 22, 2019
cb56c5a
Updated path to source files for buildImage task
dmolokanov May 22, 2019
1d14742
Made bash linter happy
dmolokanov May 22, 2019
4885944
Forced to use base imaged for arm
dmolokanov May 22, 2019
3f07609
Update build images on docker hub
dmolokanov May 23, 2019
f72f4d3
Added arm64 check-in step
dmolokanov May 23, 2019
a590fb9
Merge branch 'master' into dmolokanov/edge-proxy
dmolokanov May 23, 2019
7faeb66
Apply suggestions from code review
dmolokanov May 24, 2019
3e5d7c2
Fixed shellcheck warnings
dmolokanov May 24, 2019
1d29381
Fixed error in build script
dmolokanov May 24, 2019
205028b
Fixed misstypes
dmolokanov May 24, 2019
3a2b868
Fixed misstypes
dmolokanov May 25, 2019
c742098
Reverted some checks
dmolokanov May 25, 2019
6b74e99
Use debian:9-slim as a base image for iotedged
dmolokanov May 28, 2019
f949597
Update builds/misc/templates/build-edgelet-linux.yaml
dmolokanov May 28, 2019
cf342b2
Merge branch 'master' into dmolokanov/edge-proxy
dmolokanov May 28, 2019
fe49171
Exit if edge-proxy runs in non-kubernetes environment
dmolokanov May 29, 2019
600369a
Merge branch 'master' into dmolokanov/edge-proxy
dmolokanov May 30, 2019
1685ad1
s/goes/go/g
dmolokanov May 30, 2019
5371c97
Fixed shellcheck warnings for run.sh
dmolokanov May 30, 2019
6dbcc55
Merge branch 'master' into dmolokanov/edge-proxy
avranju May 31, 2019
a3584ed
Merge branch 'master' into dmolokanov/edge-proxy
dmolokanov May 31, 2019
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
27 changes: 27 additions & 0 deletions builds/checkin/edgelet.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,33 @@ jobs:
displayName: armv7-unknown-linux-gnueabihf test
workingDirectory: $(Build.SourcesDirectory)/edgelet

################################################################################
- job: linux_arm64v8
################################################################################
displayName: Linux arm64v8
pool:
vmImage: 'ubuntu-16.04'
variables:
IOTEDGE_HOMEDIR: /tmp
steps:
- bash: 'echo "##vso[task.setvariable variable=PATH;]$HOME/.cargo/bin:$PATH"'
displayName: Modify path
- bash: |
BASE_VERSION=`cat $BUILD_SOURCESDIRECTORY/edgelet/version.txt`
VERSION="$BASE_VERSION$BUILD_BUILDNUMBER"
echo "##vso[task.setvariable variable=VERSION;]$VERSION"
displayName: Set Version
- script: edgelet/build/linux/install.sh
displayName: Install Rust
- script: 'cargo install --git https://github.com/arsing/cross.git --branch set-path'
displayName: 'Install cross (fork with docker fix)'
- script: 'cross build --target aarch64-unknown-linux-gnu'
displayName: aarch64-unknown-linux-gnu build
workingDirectory: $(Build.SourcesDirectory)/edgelet
- script: 'cross test --target aarch64-unknown-linux-gnu'
displayName: aarch64-unknown-linux-gnu test
workingDirectory: $(Build.SourcesDirectory)/edgelet

################################################################################
- job: windows_amd64
################################################################################
Expand Down
144 changes: 101 additions & 43 deletions builds/misc/images.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,91 +35,111 @@ jobs:
name: build
displayName: Build ($(Build.Configuration))

- script: scripts/linux/buildDiagnostics.sh $(Build.Configuration)
displayName: Build iotedge-diagnostics
- script: scripts/linux/buildEdgelet.sh -i azureiotedge-iotedged -n microsoft -P iotedged -c $(Build.Configuration) -t aarch64
displayName: Build - Edge Security Daemon - aarch64

- script: scripts/linux/buildEdgelet.sh -i azureiotedge-diagnostics -n microsoft -P iotedge-diagnostics -c $(Build.Configuration) -t aarch64
displayName: Build - Edge Diagnostics - aarch64

- script: scripts/linux/buildEdgeProxy.sh -i azureiotedge-proxy -n microsoft -P edge-proxy -t aarch64
displayName: Build - Edge Proxy - aarch64

- task: PublishBuildArtifacts@1
displayName: 'Publish Artifacts'
inputs:
PathtoPublish: '$(Build.BinariesDirectory)/publish'
ArtifactName: 'core-linux'

# azureiotedge-diagnostics - Not Using Template for ARM64 because we have 2 different .NET Core.
# Edge Security Daemon - Not Using Template for ARM64 because we have 2 different .NET Core.
- task: Bash@3
displayName: Build Image azureiotedge-diagnostics - aarch64
inputs:
filePath: scripts/linux/buildImage.sh
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-diagnostics -n microsoft -P azureiotedge-diagnostics --target-arch aarch64
displayName: Build Image - Edge Security Daemon - aarch64
philipktlin marked this conversation as resolved.
Show resolved Hide resolved
inputs:
filePath: scripts/linux/buildImage.sh
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-iotedged -n microsoft -P azureiotedge-iotedged --target-arch aarch64

# Edge Diagnostics - Not Using Template for ARM64 because we have 2 different .NET Core.
- task: Bash@3
displayName: Build Image - Edge Diagnostics - aarch64
inputs:
filePath: scripts/linux/buildImage.sh
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-diagnostics -n microsoft -P azureiotedge-diagnostics --target-arch aarch64

# Edge Proxy - Not Using Template for ARM64 because we have 2 different .NET Core.
- task: Bash@3
displayName: Build Image - Edge Proxy - aarch64
inputs:
filePath: scripts/linux/buildImage.sh
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-proxy -n microsoft -P azureiotedge-proxy --target-arch aarch64

# Edge Agent - Not Using Template for ARM64 because we have 2 different .NET Core.
# Edge Agent - Not Using Template for ARM64 because we have 2 different .NET Core.
- task: Bash@3
displayName: Build Edge Agent Image - aarch64
inputs:
displayName: Build Image - Edge Agent - aarch64
inputs:
filePath: scripts/linux/buildImage.sh
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-agent -n microsoft -P Microsoft.Azure.Devices.Edge.Agent.Service --target-arch aarch64

# Edge Hub - Not Using Template for ARM64 because we have 2 different .NET Core.
- task: Bash@3
displayName: Build Edge Hub Image - aarch64
inputs:
displayName: Build Image - Edge Hub - aarch64
inputs:
filePath: scripts/linux/buildImage.sh
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-hub -n microsoft -P Microsoft.Azure.Devices.Edge.Hub.Service --target-arch aarch64

# Simulated Temperature Sensor - Not Using Template for ARM64 because we have 2 different .NET Core.
- task: Bash@3
displayName: Build Image Temperature Sensor - aarch64
inputs:
displayName: Build Image - Temperature Sensor - aarch64
inputs:
filePath: scripts/linux/buildImage.sh
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-simulated-temperature-sensor -n microsoft -P SimulatedTemperatureSensor --target-arch aarch64
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-simulated-temperature-sensor -n microsoft -P SimulatedTemperatureSensor --target-arch aarch64

# Temperature Filter - Not Using Template for ARM64 because we have 2 different .NET Core.
- task: Bash@3
displayName: Build Image Temperature Filter - aarch64
inputs:
displayName: Build Image - Temperature Filter - aarch64
inputs:
filePath: scripts/linux/buildImage.sh
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-temperature-filter -n microsoft -P TemperatureFilter --target-arch aarch64
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-temperature-filter -n microsoft -P TemperatureFilter --target-arch aarch64

# Load Gen - Not Using Template for ARM64 because we have 2 different .NET Core.
- task: Bash@3
displayName: Build Image Load Gen - aarch64
inputs:
displayName: Build Image - Load Gen - aarch64
inputs:
filePath: scripts/linux/buildImage.sh
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-load-gen -n microsoft -P load-gen --target-arch aarch64
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-load-gen -n microsoft -P load-gen --target-arch aarch64

# Messages Analyzer - Not Using Template for ARM64 because we have 2 different .NET Core.
- task: Bash@3
displayName: Build Image Messages Analyzer - aarch64
inputs:
displayName: Build Image - Messages Analyzer - aarch64
inputs:
filePath: scripts/linux/buildImage.sh
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-analyzer -n microsoft -P MessagesAnalyzer --target-arch aarch64
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-analyzer -n microsoft -P MessagesAnalyzer --target-arch aarch64

# Functions Sample - Not Using Template for ARM64 because we have 2 different .NET Core.//TODO: Enable this once Functions supports arm64v8. Right now they are not ready.
# Functions Sample - Not Using Template for ARM64 because we have 2 different .NET Core.//TODO: Enable this once Functions supports arm64v8. Right now they are not ready.
#- task: Bash@3
# displayName: Build Image Functions Sample - aarch64
# inputs:
# displayName: Build Image - Functions Sample - aarch64
# inputs:
# filePath: scripts/linux/buildImage.sh
# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-functions-filter -n azureiotedge -P EdgeHubTriggerCSharp --target-arch aarch64
# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-functions-filter -n azureiotedge -P EdgeHubTriggerCSharp --target-arch aarch64

# Direct Method Sender - Not Using Template for ARM64 because we have 2 different .NET Core.
- task: Bash@3
displayName: Build Image Direct Method Sender - aarch64
inputs:
displayName: Build Image - Direct Method Sender - aarch64
inputs:
filePath: scripts/linux/buildImage.sh
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-sender -n microsoft -P DirectMethodSender --target-arch aarch64
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-sender -n microsoft -P DirectMethodSender --target-arch aarch64

# Direct Method Receiver - Not Using Template for ARM64 because we have 2 different .NET Core.
- task: Bash@3
displayName: Build Image Direct Method Receiver - aarch64
inputs:
displayName: Build Image - Direct Method Receiver - aarch64
inputs:
filePath: scripts/linux/buildImage.sh
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-receiver -n microsoft -P DirectMethodReceiver --target-arch aarch64
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-receiver -n microsoft -P DirectMethodReceiver --target-arch aarch64

# Direct Method Cloud Sender - Not Using Template for ARM64 because we have 2 different .NET Core.
- task: Bash@3
displayName: Build Image Direct Method Cloud Sender - aarch64
inputs:
displayName: Build Image - Direct Method Cloud Sender - aarch64
inputs:
filePath: scripts/linux/buildImage.sh
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-cloud-sender -n microsoft -P DirectMethodCloudSender --target-arch aarch64
arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-cloud-sender -n microsoft -P DirectMethodCloudSender --target-arch aarch64


################################################################################
Expand Down Expand Up @@ -151,8 +171,28 @@ jobs:
name: build
displayName: Build ($(Build.Configuration))

- script: scripts/linux/buildDiagnostics.sh $(Build.Configuration)
displayName: Build iotedge-diagnostics
- template: templates/build-edgelet-linux.yaml
avranju marked this conversation as resolved.
Show resolved Hide resolved
parameters:
filePath: scripts/linux/buildEdgelet.sh
name: Edge Security Daemon
imageName: azureiotedge-iotedged
project: iotedged
configuration: $(Build.Configuration)

- template: templates/build-edgelet-linux.yaml
parameters:
filePath: scripts/linux/buildEdgelet.sh
name: Edge Diagnostics
imageName: azureiotedge-diagnostics
project: iotedge-diagnostics
configuration: $(Build.Configuration)

- template: templates/build-edgelet-linux.yaml
parameters:
filePath: scripts/linux/buildEdgeProxy.sh
name: Edge Proxy
imageName: azureiotedge-proxy
project: edge-proxy

- script: scripts/linux/createArtifactInfo.sh --output-folder '$(Build.BinariesDirectory)/publish' --build-number $(Build.BuildNumber)
displayName: 'Create Artifact Info File'
Expand All @@ -163,13 +203,27 @@ jobs:
PathtoPublish: '$(Build.BinariesDirectory)/publish'
ArtifactName: 'core-linux'

# azureiotedge-diagnostics
# Edge Security Daemon
- template: templates/image-linux.yaml
parameters:
name: azureiotedge-diagnostics
name: Edge Security Daemon
imageName: azureiotedge-iotedged
project: azureiotedge-iotedged

# Edge Diagnostics
- template: templates/image-linux.yaml
parameters:
name: Edge Diagnostics
imageName: azureiotedge-diagnostics
project: azureiotedge-diagnostics

# Edge Proxy
- template: templates/image-linux.yaml
parameters:
name: Edge Proxy
imageName: azureiotedge-proxy
project: azureiotedge-proxy

# Edge Agent
- template: templates/image-linux.yaml
parameters:
Expand Down Expand Up @@ -375,5 +429,9 @@ jobs:
displayName: 'Publish Edge Hub Manifest'
- script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-modules/SimulatedTemperatureSensor/docker/manifest.yaml.template -n microsoft --tags "$(tags)"
displayName: 'Publish Temperature Sensor Manifest'
- script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edgelet/iotedged/docker/manifest.yaml.template -n microsoft --tags "$(tags)"
philipktlin marked this conversation as resolved.
Show resolved Hide resolved
displayName: 'Publish azureiotedge-iotedged Manifest'
- script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edgelet/iotedge-diagnostics/docker/manifest.yaml.template -n microsoft --tags "$(tags)"
displayName: 'Publish azureiotedge-diagnostics Manifest'
- script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-proxy/docker/manifest.yaml.template -n microsoft --tags "$(tags)"
displayName: 'Publish azureiotedge-proxy Manifest'
19 changes: 19 additions & 0 deletions builds/misc/templates/build-edgelet-linux.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
parameters:
name: ''
imageName: ''
namespace: 'microsoft'
project: ''
configuration: 'release'
filePath:
dmolokanov marked this conversation as resolved.
Show resolved Hide resolved

steps:
- task: Bash@3
displayName: Build - ${{ parameters.name }} - amd64
inputs:
filePath: ${{ parameters.filePath }}
arguments: -i ${{ parameters.imageName }} -n ${{ parameters.namespace }} -P ${{ parameters.project }} -c ${{ parameters.configuration }}
- task: Bash@3
displayName: Build - ${{ parameters.name }} - arm32
inputs:
filePath: ${{ parameters.filePath }}
arguments: -i ${{ parameters.imageName }} -n ${{ parameters.namespace }} -P ${{ parameters.project }} -c ${{ parameters.configuration }} --target-arch armv7l
3 changes: 3 additions & 0 deletions edge-proxy/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Edge Proxy

This project contains a proxy server for edge modules that runs in kubernetes environment.
3 changes: 3 additions & 0 deletions edge-proxy/docker/linux/amd64/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
FROM traefik:v1.7.11-alpine
COPY ./docker/linux/amd64/run.sh /
CMD ["/run.sh"]
3 changes: 3 additions & 0 deletions edge-proxy/docker/linux/arm32v7/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
FROM arm32v6/traefik:v1.7.11-alpine
COPY ./docker/linux/arm32v7/run.sh /
CMD ["/run.sh"]
3 changes: 3 additions & 0 deletions edge-proxy/docker/linux/arm64v8/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
FROM arm64v8/traefik:v1.7.11-alpine
COPY ./docker/linux/arm64v8/run.sh /
CMD ["/run.sh"]
18 changes: 18 additions & 0 deletions edge-proxy/docker/manifest.yaml.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
image: __REGISTRY__/__NAMESPACE__/azureiotedge-proxy:__VERSION__
tags: __TAGS__
manifests:
-
image: __REGISTRY__/__NAMESPACE__/azureiotedge-proxy:__VERSION__-linux-amd64
platform:
architecture: amd64
os: linux
-
image: __REGISTRY__/__NAMESPACE__/azureiotedge-proxy:__VERSION__-linux-arm32v7
platform:
architecture: arm
os: linux
-
image: __REGISTRY__/__NAMESPACE__/azureiotedge-proxy:__VERSION__-linux-arm64v8
platform:
architecture: arm64
os: linux
31 changes: 31 additions & 0 deletions edge-proxy/src/run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/sh
avranju marked this conversation as resolved.
Show resolved Hide resolved
set -e

# read service account token from filesystem
file="/var/run/secrets/kubernetes.io/serviceaccount/token"
if [[ -e ${file} ]]
then
token=`cat ${file}`
else
echo "Could not find file ${file}"
fi
dmolokanov marked this conversation as resolved.
Show resolved Hide resolved

config_src="/etc/traefik/traefik.toml"
if [[ ! -e ${config_src} ]]
then
echo "Could not find config ${config_src}"
exit 1
fi

# move traefik config to a new place to allow modification
config_dst="/traefik.toml"
cp ${config_src} ${config_dst}

# find TOKEN placeholders and replace them with a token value
if [[ ! -z ${token} ]]
then
sed -i -e 's/__TOKEN__/'${token}'/g' ${config_dst}
fi

# call traefik entry point script with a new config
/entrypoint.sh -c /traefik.toml
8 changes: 7 additions & 1 deletion edgelet/Cross.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,14 @@ passthrough = [
"IOTEDGE_HOMEDIR",
]

[target.x86_64-unknown-linux-gnu]
image = "edgebuilds.azurecr.io/debian-build:9.5-1"
avranju marked this conversation as resolved.
Show resolved Hide resolved

[target.armv7-unknown-linux-gnueabihf]
image = "azureiotedge/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf:0.2"
image = "azureiotedge/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf:debian_9.5-1"
philipktlin marked this conversation as resolved.
Show resolved Hide resolved

[target.aarch64-unknown-linux-gnu]
image = "azureiotedge/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu:debian_9.5-1"

[target.armv7-unknown-linux-musleabihf]
# Built from rust-embedded/cross#718a19cd68fb09428532d1317515fe7303692b47 with `./build-docker-image.sh armv7-unknown-linux-musleabihf`
Expand Down
14 changes: 14 additions & 0 deletions edgelet/iotedged/docker/linux/amd64/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
FROM debian:9

RUN apt-get update && apt-get install -y \
libssl1.0.2 \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*

WORKDIR /app
ADD ./docker/linux/amd64/libiothsm.so* /app/
ADD ./docker/linux/amd64/iotedged /app

ENV LD_LIBRARY_PATH /app

CMD ["/app/iotedged"]
9 changes: 9 additions & 0 deletions edgelet/iotedged/docker/linux/arm32v7/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM azureiotedge/azureiotedge-iotedged-base:1.0-arm32v7

WORKDIR /app
ADD ./docker/linux/arm32v7/libiothsm.so* /app/
ADD ./docker/linux/arm32v7/iotedged /app

ENV LD_LIBRARY_PATH /app

CMD ["/app/iotedged"]
6 changes: 6 additions & 0 deletions edgelet/iotedged/docker/linux/arm32v7/base/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
FROM arm32v7/debian:9
dmolokanov marked this conversation as resolved.
Show resolved Hide resolved
philipktlin marked this conversation as resolved.
Show resolved Hide resolved

RUN apt-get update && apt-get install -y \
libssl1.0.2 \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
Loading