Skip to content

Commit d050ac7

Browse files
authored
Upgrade our argo fork to the latest version (#22)
* Updated ARTIFACT_REPO.md (argoproj#1049) * Updated examples/README.md (argoproj#1051) * Support for K8s API based Executor (argoproj#1010) * Submodules are dirty after checkout -- need to update (argoproj#1052) * Parameter and Argument names should support snake case (argoproj#1048) * Add namespace explicitly to pod metadata (argoproj#1059) * Update dependencies to K8s v1.12 and client-go 9.0 * Adding SAP Hybris in Who uses Argo (argoproj#1064) * Add Cratejoy to list of users (argoproj#1063) * Raise not implemented error when artifact saving is unsupported (argoproj#1062) * Adding native GCS support for artifact storage and retrieval * Support nested steps workflow parallelism (argoproj#1046) * Auto-complete workflow names (argoproj#1061) * Auto-complete workflow names * Use cobra revision at fe5e611709b0c57fa4a89136deaa8e1d4004d053 * Fix string format arguments in workflow utilities. (argoproj#1070) * fix argoproj#1078 Azure AKS authentication issues (argoproj#1079) * Issue argoproj#740 - System level workflow parallelism limits & priorities (argoproj#1065) * Issue argoproj#740 - System level workflow parallelism limits & priorities * Apply reviewer notes * Add new article and minor edits. (argoproj#1083) * Update docs to outline bare minimum set of privileges for a workflow * Use relative links on README file (argoproj#1087) * Fix typo in demo.md (argoproj#1089) Fix a small typo in demo.md that I encounted when reading through the getting started guide. * Drop reference to removed `argo install` command. (argoproj#1074) * Initialize child node before marking phase. Fixes panic on invalid `When` (argoproj#1075) * argoproj#1081 added retry logic to s3 load and save function (argoproj#1082) * adding logo to be used by the OS Site (argoproj#1099) * Update ROADMAP.md * Update docs with examples using the K8s REST API * Issue argoproj#1114 - Set FORCE_NAMESPACE_ISOLATION env variable in namespace install manifests (argoproj#1116) * Fix examples docs of parameters. (argoproj#1110) * Remove docker_lib mount volume which is not needed anymore (argoproj#1115) * Remove docker_lib mount volume which is not needed anymore * Remove unused hostPathDir * add support for ppc64le and s390x (argoproj#1102) * Install mime-support in argoexec to set proper mime types for S3 artifacts (resolves argoproj#1119) * Adding Quantibio in Who uses Argo (argoproj#1111) * Adding Quantibio in Who uses Argo * fix spelling mistake * Fix output artifact and parameter conflict (argoproj#1125) `SaveArtifacts` deletes the files that `SaveParameters` might still need, so we're calling `SaveParameters` first. Fixes argoproj#1124 * Update generated swagger to fix verify-codegen (argoproj#1131) * Allow owner reference to be set in submit util (argoproj#1120) * Issue argoproj#1104 - Remove container wait timeout from 'argo logs --follow' (argoproj#1142) * Issue argoproj#1132 - Fix panic in ttl controller (argoproj#1143) * Issue argoproj#1040 - Kill daemoned step if workflow consist of single daemoned step (argoproj#1144) * Fix global artifact overwriting in nested workflow (argoproj#1086) * Fix issue where steps with exhausted retires would not complete (argoproj#1148) * add support for other archs (argoproj#1137) * Reflect minio chart changes in documentation (argoproj#1147) * Issue argoproj#1136 - Fix metadata for DAG with loops (argoproj#1149) * Issue argoproj#1136 - Fix metadata for DAG with loops * Add slack badge to README (argoproj#1164) * Fix failing TestAddGlobalArtifactToScope unit test * Fix tests compilation error (argoproj#1157) * Replace exponential retry with poll (argoproj#1166) * add support for hostNetwork & dnsPolicy config (argoproj#1161) * Support HDFS Artifact (argoproj#1159) Support HDFS Artifact (argoproj#1159) * Update codegen for network config (argoproj#1168) * Add GitHub to users in README.md (argoproj#1151) * Add Preferred Networks to users in README.md (argoproj#1172) * Add missing patch in namespace kustomization.yaml (argoproj#1170) * Validate ArchiveLocation artifacts (argoproj#1167) * Update README and preview notice in CLA. * Update README. (argoproj#1173) (argoproj#1176) * Argo users: Equinor (argoproj#1175) * Do not mount unnecessary docker socket (argoproj#1178) * Issue argoproj#1113 - Wait for daemon pods completion to handle annotations (argoproj#1177) * Issue argoproj#1113 - Wait for daemon pods completion to handle annotations * Add output artifacts to influxdb-ci example * Increased S3 artifact retry time and added log (argoproj#1138) * Issue argoproj#1123 - Fix 'kubectl get' failure if resource namespace is different from workflow namespace (argoproj#1171) * Refactor Makefile/Dockerfile to remove volume binding in favor of build stages (argoproj#1189) * Add Docker Hub build hooks * Add documentation how to use parameter-file's (argoproj#1191) * Issue argoproj#988 - Submit should not print logs to stdout unless output is 'wide' (argoproj#1192) * Fix missing docker binary in argoexec image. Improve reuse of image layers * Fischerjulian adds ruby to rest docs (argoproj#1196) * Adds link to ruby kubernetes library. * Links to a ruby example on how to start a workflow * Updated OWNERS (argoproj#1198) * Update community/README (argoproj#1197) * Issue argoproj#1128 - Use polling instead of fs notify to get annotation changes (argoproj#1194) * Minor spelling, formatting, and style updates. (argoproj#1193) * Dockerfile: argoexec base image correction (fixes argoproj#1209) (argoproj#1213) * Set executor image pull policy for resource template (argoproj#1174) * Add schedulerName to workflow and template spec (argoproj#1184) * Issue argoproj#1190 - Fix incorrect retry node handling (argoproj#1208) * fix dag retries (argoproj#1221) * Executor can access the k8s apiserver with a out-of-cluster config file (argoproj#1134) Executor can access the k8s apiserver with a out-of-cluster config file * Update README with typo fixes (argoproj#1220) * Update README.md (argoproj#1236) * Remove extra quotes around output parameter value (argoproj#1232) Ensure we do not insert extra single quotes when using valueFrom: jsonPath to set the value of an output parameter for resource templates. Signed-off-by: Ilias Katsakioris <[email protected]> * Update README.md (argoproj#1224) * Include stderr when retrieving docker logs (argoproj#1225) * Add Gardener to "Who uses Argo" (argoproj#1228) * Add feature to continue workflow on failed/error steps/tasks (argoproj#1205) * Fix the Prometheus address references (argoproj#1237) * Fixed Issue#1223 Kubernetes Resource action: patch is not supported (argoproj#1245) * Fixed Issue#1223 Kubernetes Resource action: patch is not supported This PR is fixed the Issue#1223 reported by @shanesiebken . Argo kubernetes resource workflow failed on patch action. --patch or -p option is required for kubectl patch action. This PR is including the manifest yaml as patch argument for kubectl. This Fix will support the Patch action in Argo kubernetes resource workflow. This Fix will support only JSON merge strategic in patch action * udpated formating * typo, executo -> executor (argoproj#1243) * Issue#1165 fake outputs don't notify and task completes successfully (argoproj#1247) * Issue#1165 fake outputs don't notify and task completes successfully This PR is addressing the Issue#1165 reported by @alexfrieden. Issue/Bug: Argo is finishing the task successfully even artifact /file does exist. Fix: Validate the created gzip contains artifact or file. if file/artifact doesn't exist, Current step/stage/task will be failed with log message . Sample Log: ''' INFO[0029] Updating node artifact-passing-lkvj8[0].generate-artifact (artifact-passing-lkvj8-1949982165) status Running -> Error INFO[0029] Updating node artifact-passing-lkvj8[0].generate-artifact (artifact-passing-lkvj8-1949982165) message: failed to save outputs: File or Artifact does not exist. /tmp/hello_world.txt INFO[0029] Step group node artifact-passing-lkvj8[0] (artifact-passing-lkvj8-1067333159) deemed failed: child 'artifact-passing-lkvj8-1949982165' failed namespace=default workflow=artifact-passing-lkvj8 INFO[0029] node artifact-passing-lkvj8[0] (artifact-passing-lkvj8-1067333159) phase Running -> Failed namespace=default workflow=artifact-passing-lkvj8 ''' * fixed gometalinter errcheck issue * Git cloning via SSH was not verifying host public key (argoproj#1261) * Update versions (argoproj#1218) * Proxy Priority and PriorityClassName to pods (argoproj#1179) * Error running 1000s of tasks: "etcdserver: request is too large" argoproj#1186 (argoproj#1264) * Error running 1000s of tasks: "etcdserver: request is too large" argoproj#1186 This PR is addressing the feature request argoproj#1186. Issue: Nodestatus element keeps growing for big workflow. Workflow will fail once the workflow total size reachs 1 MB (maz size limit in ETCD) . Solution: Compressing the Nodestatus once size reachs the 1 MB which increasing 60% to 80% more steps to execute in compress mode. Latest: Argo cli and Argo UI will able to decode and print nodestatus from compressednoode. Limitation: Kubectl willl not decode the compressedNode element * added Operator.go * revert the testing yaml * Fixed the lint issue * fixed * fixed lint * Fixed Testcase * incorporated the review comments * Reverted the change * incorporated review comments * fixing gometalinter checks * incorporated review comments * Update pod-limits.yaml * updated few comments * updated error message format * reverted unwanted files * Reduce redundancy pod label action (argoproj#1271) * Add the `mergeStrategy` option to resource patching (argoproj#1269) * This adds the ability to pass a mergeStrategy to a patch resource. this is valuable because the default merge strategy for kubernetes is 'strategic', which does not work with Custom Resources. * This also updates the resource example to demonstrate how it is used * Fix bug with DockerExecutor's CopyFile (argoproj#1275) The check to see if the source path was in the tgz archive was wrong when source path was a folder, the arguments to strings.Contains were inverted. * Add workflow labels and annotations global vars (argoproj#1280) * Argo CI is current inactive (argoproj#1285) * Issue#896 Workflow steps with non-existant output artifact path will succeed (argoproj#1277) * Issue#896 Workflow steps with non-existant output artifact path will succeed Issue: argoproj#897 Solution: Added new element "optional" in Artifact. The default is false. This flag will make artifact as optional and existence check will be ignored if input/output artifact has optional=true. Output Artifact ( optional=true ): Artifact existence check will be ignored during the save artifact in destination and continued workflow Input Artifact ( optional=true ): Artifact exist check will be ignored during load artifact from source and continued workflow * added end of line * removed unwanted whitespace * Deleted test code * go formatted * added formatting directives * updated Codegen * Fixed format on merge conflict * format fix * updated comments * improved error case * Fix for Resource creation where template has same parameter templating (argoproj#1283) * Fix for Resource creation where template has same parameter templating This PR will enable to support the custom template variable reference. Soulltion: Workflow variable reference resolve will check the Workflow variable prefix. * added test * fixed gofmt issue * fixed format * fixed gofmt on common.go * fixed testcase * fixed gofmt * Added unit testcase and documented * fixed Gofmt format * updated comments * Admiralty: add link to blog post, add user (argoproj#1295) * Add dns config support (argoproj#1301) * Speed up podReconciliation using parallel goroutine (argoproj#1286) * Speed up podReconciliation using parallel goroutine * Fix make lint issue * put checkandcompress back * Add community meeting notes link (argoproj#1304) * Add Karius to users in README.md (argoproj#1305) * Added support for artifact path references (argoproj#1300) * Added support for artifact path references Adds new `{{inputs.artifacts.<NAME>.path}}` and `{{outputs.artifacts.<NAME>.path}}` placeholders. * Add support for init containers (argoproj#1183) * Secrets should be passed to pods using volumes instead of API calls (argoproj#1302) * Secrets should be passed to pods using downward API instead of API calls * Fixed Gogfmt format * fixed file close Gofmt * updated review comments * fixed gofmt * updated review comments * CheckandEstimate implementation to optimize podReconciliation (argoproj#1308) * CheckandEstimate implementation * fixed variable rename * fixed gofmt * fixed feedbacks * Update operator.go * Update operator.go * Add alibaba cloud to officially using argo list (argoproj#1313) * Refactor checkandEstimate to optimize podReconciliation (argoproj#1311) * Refactor checkandEstimate to optimize podReconciliation * Move compress function to persistUpdates * Fix formatting issues in examples documentation (argoproj#1310) * Fix nil pointer dereference with secret volumes (argoproj#1314) * Archive location should conditionally be added to template only when needed * Fix SIGSEGV in watch/CheckAndDecompress. Consolidate duplicate code (resolves argoproj#1315) * Implement support for PNS (Process Namespace Sharing) executor (argoproj#1214) * Implements PNS (Process Namespace Sharing) executor * Adds limited support for Kubelet/K8s API artifact collection by mirroring volume mounts to wait sidecar * Adds validation to detect when output artifacts are not supported by the executor * Adds ability to customize executor from workflow-controller-configmap (e.g. add environment variables, append command line args such as loglevel) * Fixes an issue where daemon steps were not getting terminated properly * Reorganize manifests to kustomize 2 and update version to v2.3.0-rc1 * Update v2.3.0 CHANGELOG.md * Export the methods of `KubernetesClientInterface` (argoproj#1294) All calls to these methods previously generated a panic at runtime because the calls resolved to the default, panic-always implementation, not to the overrides provided by `k8sAPIClient` and `kubeletClient`. Embedding an exported interface with unexported methods into a struct is the only way to implement that interface in another package. When doing this, the compiler generates default, panic-always implementations for all methods from the interface. Implementors can override exported methods, but it's not possible to override an unexported method from the interface. All invocations that go through the interface will come to the default implementation, even if the struct tries to provide an override. * Update README.md (argoproj#1321) * Issue1316 Pod creation with secret volumemount (argoproj#1318) * CheckandEstimate implementation * fixed variable rename * fixed gofmt * fixed feedbacks * Fixed the duplicate mountpath issue * Support parameter substitution in the volumes attribute (argoproj#1238) * `argo list` was not displaying non-zero priorities correctly * Fix regression where argoexec wait would not return when podname was too long * wait will conditionally become privileged if main/sidecar privileged (resolves argoproj#1323) * Update version to v2.3.0-rc2. Update changelog * Add documentation on releasing * use a secret selector for getting credentials * fixing build issues * linter issues * fixing jenkinsfile(?) * jenkins * jenkins * jenkins * jenkins * jenkins? * jenkins :( * jenkins :( * jenkins * jenkins * jenkins * jenkins * gopkg * use GetSecretFromVolMount instead of GetSecrets * actually build argoexec * Fix argoproj#1340 parameter substitution bug Signed-off-by: Ilias Katsakioris <[email protected]>
1 parent b0ab4ae commit d050ac7

File tree

172 files changed

+8684
-2107
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

172 files changed

+8684
-2107
lines changed

.argo-ci/ci.yaml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,13 @@ spec:
2222
value: "{{item}}"
2323
withItems:
2424
- make controller-image executor-image
25-
- make cli-linux
26-
- make cli-darwin
25+
- make release-clis
2726
- name: test
2827
template: ci-builder
2928
arguments:
3029
parameters:
3130
- name: cmd
32-
value: "{{item}}"
33-
withItems:
34-
- dep ensure && make lint test verify-codegen
31+
value: dep ensure && make lint test verify-codegen
3532

3633
- name: ci-builder
3734
inputs:
@@ -67,10 +64,11 @@ spec:
6764
env:
6865
- name: DOCKER_HOST
6966
value: 127.0.0.1
67+
- name: DOCKER_BUILDKIT
68+
value: "1"
7069
sidecars:
7170
- name: dind
72-
image: docker:17.10-dind
71+
image: docker:18.09-dind
7372
securityContext:
7473
privileged: true
7574
mirrorVolumeMounts: true
76-

.dockerignore

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
*
2-
!dist
3-
dist/pkg
4-
!Gopkg.*
1+
# Prevent vendor directory from being copied to ensure we are not not pulling unexpected cruft from
2+
# a user's workspace, and are only building off of what is locked by dep.
3+
vendor
4+
dist

ARTIFACT_REPO.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ $ helm install stable/minio --name argo-artifacts --set service.type=LoadBalance
1414

1515
Login to the Minio UI using a web browser (port 9000) after obtaining the external IP using `kubectl`.
1616
```
17-
$ kubectl get service argo-artifacts-minio
17+
$ kubectl get service argo-artifacts
1818
```
1919

2020
On Minikube:
2121
```
22-
$ minikube service --url argo-artifacts-minio
22+
$ minikube service --url argo-artifacts
2323
```
2424

2525
NOTE: When minio is installed via Helm, it uses the following hard-wired default credentials,
@@ -106,7 +106,7 @@ For Minio, the `accessKeySecret` and `secretKeySecret` naturally correspond the
106106

107107
Example:
108108
```
109-
$ kubectl edit configmap workflow-controller-configmap -n kube-system
109+
$ kubectl edit configmap workflow-controller-configmap -n argo # assumes argo was installed in the argo namespace
110110
...
111111
data:
112112
config: |

CHANGELOG.md

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,94 @@
11
# Changelog
22

3+
## 2.3.0-rc2 (2019-04-21)
4+
5+
### Changes since 2.3.0-rc1
6+
+ Support parameter substitution in the volumes attribute (#1238)
7+
- Fix regression where argoexec wait would not return when podname was too long
8+
- wait will conditionally become privileged if main/sidecar privileged (issue #1323)
9+
- `argo list` was not displaying non-zero priorities correctly
10+
- Pod creation with secret volumemount (#1318)
11+
- Export the methods of `KubernetesClientInterface` (#1294)
12+
13+
14+
## 2.3.0-rc1 (2019-04-10)
15+
16+
### Notes about upgrading from v2.2
17+
18+
* Secrets are passed to the wait sidecar using volumeMounts instead of performing K8s API calls
19+
performed by the. This is much more secure since it limits the privileges of the workflow pod
20+
to no longer require namespace level secret access. However, as a consequence, workflow pods which
21+
reference a secret that does not exist, will now indefinitely stay in a Pending state, as opposed
22+
to the previous behavior of failing during runtime.
23+
24+
25+
### Deprecation Notice
26+
The workflow-controller-configmap introduces a new config field, `executor`, which is a container
27+
spec and provides controls over the executor sidecar container (i.e. `init`/`wait`). The fields
28+
`executorImage`, `executorResources`, and `executorImagePullPolicy` are deprecated and will be
29+
removed in a future release.
30+
31+
### New Features:
32+
+ Support for PNS (Process Namespace Sharing) executor (#1214)
33+
+ Support for K8s API based Executor (#1010) (@dtaniwaki)
34+
+ Adds limited support for Kubelet/K8s API artifact collection by mirroring volume mounts to wait sidecar
35+
+ Support HDFS Artifact (#1159) (@dtaniwaki)
36+
+ System level workflow parallelism limits & priorities (#1065)
37+
+ Support larger workflows through node status compression (#1264)
38+
+ Support nested steps workflow parallelism (#1046) (@WeiTang114)
39+
+ Add feature to continue workflow on failed/error steps/tasks (#1205) (@schrodit)
40+
+ Parameter and Argument names should support snake case (#1048) (@bbc88ks)
41+
+ Add support for ppc64le and s390x (#1102) (@chenzhiwei)
42+
+ Install mime-support in argoexec to set proper mime types for S3 artifacts
43+
+ Allow owner reference to be set in submit util (#1120) (@nareshku)
44+
+ add support for hostNetwork & dnsPolicy config (#1161) (@Dreamheart)
45+
+ Add schedulerName to workflow and template spec (#1184) (@houz42)
46+
+ Executor can access the k8s apiserver with a out-of-cluster config file (@houz42)
47+
+ Proxy Priority and PriorityClassName to pods (#1179) (@dtaniwaki)
48+
+ Add the `mergeStrategy` option to resource patching (#1269) (@ian-howell)
49+
+ Add workflow labels and annotations global vars (#1280) (@discordianfish)
50+
+ Support for optional input/output artifacts (#1277)
51+
+ Add dns config support (#1301) (@xianlubird)
52+
+ Added support for artifact path references (#1300) (@Ark-kun)
53+
+ Add support for init containers (#1183) (@dtaniwaki)
54+
+ Secrets should be passed to pods using volumes instead of API calls (#1302)
55+
+ Azure AKS authentication issues #1079 (@gerardaus)
56+
57+
### New Features:
58+
* Update dependencies to K8s v1.12 and client-go 9.0
59+
* Add namespace explicitly to pod metadata (#1059) (@dvavili)
60+
* Raise not implemented error when artifact saving is unsupported (#1062) (@dtaniwaki)
61+
* Retry logic to s3 load and save function (#1082) (@kshamajain99)
62+
* Remove docker_lib mount volume which is not needed anymore (#1115) (@ywskycn)
63+
* Documentation improvements and fixes (@protochron, @jmcarp, @locona, @kivio, @fischerjulian, @annawinkler, @jdfalko, @groodt, @migggy, @nstott, @adrienjt)
64+
* Validate ArchiveLocation artifacts (#1167) (@dtaniwaki)
65+
* Git cloning via SSH was not verifying host public key (#1261)
66+
* Speed up podReconciliation using parallel goroutine (#1286) (@xianlubird)
67+
68+
69+
- Initialize child node before marking phase. Fixes panic on invalid `When` (#1075) (@jmcarp)
70+
- Submodules are dirty after checkout -- need to update (#1052) (@andreimc)
71+
- Fix output artifact and parameter conflict (#1125) (@Ark-kun)
72+
- Remove container wait timeout from 'argo logs --follow' (#1142)
73+
- Fix panic in ttl controller (#1143)
74+
- Kill daemoned step if workflow consist of single daemoned step (#1144)
75+
- Fix global artifact overwriting in nested workflow (#1086) (@WeiTang114)
76+
- Fix issue where steps with exhausted retires would not complete (#1148)
77+
- Fix metadata for DAG with loops (#1149)
78+
- Replace exponential retry with poll (#1166) (@kzadorozhny)
79+
- Dockerfile: argoexec base image correction (#1213) (@elikatsis)
80+
- Set executor image pull policy for resource template (#1174) (@dtaniwaki)
81+
- fix dag retries (#1221) (@houz42)
82+
- Remove extra quotes around output parameter value (#1232) (@elikatsis)
83+
- Include stderr when retrieving docker logs (#1225) (@shahin)
84+
- Fix the Prometheus address references (#1237) (@spacez320)
85+
- Kubernetes Resource action: patch is not supported (#1245)
86+
- Fake outputs don't notify and task completes successfully (#1247)
87+
- Reduce redundancy pod label action (#1271) (@xianlubird)
88+
- Fix bug with DockerExecutor's CopyFile (#1275)
89+
- Fix for Resource creation where template has same parameter templating (#1283)
90+
- Fixes an issue where daemon steps were not getting terminated properly
91+
392
## 2.2.1 (2018-10-18)
493

594
### Changelog since v2.2.0

CONTRIBUTING.md

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ Go to https://github.com/argoproj/
1515

1616
## How to suggest a new feature
1717

18-
Go to https://groups.google.com/forum/#!forum/argoproj
19-
* Create a new topic to discuss your feature.
18+
Go to https://github.com/argoproj/
19+
* Open an issue and discuss it.
2020

2121
## How to setup your dev environment
2222

2323
### Requirements
24-
* Golang 1.10
24+
* Golang 1.11
2525
* Docker
2626
* dep v0.5
2727
* Mac Install: `brew install dep`
28-
* gometalinter v2.0.5
28+
* gometalinter v2.0.12
2929

3030
### Quickstart
3131
```
@@ -36,9 +36,16 @@ $ make
3636
```
3737

3838
### Build workflow-controller and executor images
39-
The following will build the workflow-controller and executor images tagged with the `latest` tag, then push to a personal dockerhub repository:
39+
The following will build the release versions of workflow-controller and executor images tagged
40+
with the `latest` tag, then push to a personal dockerhub repository, `mydockerrepo`:
41+
```
42+
$ make controller-image executor-image IMAGE_TAG=latest IMAGE_NAMESPACE=mydockerrepo DOCKER_PUSH=true
43+
```
44+
Building release versions of the images will be slow during development, since the build happens
45+
inside a docker build context, which cannot re-use the golang build cache between builds. To build
46+
images quicker (for development purposes), images can be built by adding DEV_IMAGE=true.
4047
```
41-
$ make controller-image executor-image IMAGE_TAG=latest IMAGE_NAMESPACE=jessesuen DOCKER_PUSH=true
48+
$ make controller-image executor-image IMAGE_TAG=latest IMAGE_NAMESPACE=mydockerrepo DOCKER_PUSH=true DEV_IMAGE=true
4249
```
4350

4451
### Build argo cli
@@ -49,5 +56,6 @@ $ ./dist/argo version
4956

5057
### Deploying controller with alternative controller/executor images
5158
```
52-
$ argo install --controller-image jessesuen/workflow-controller:latest --executor-image jessesuen/argoexec:latest
59+
$ helm install argo/argo --set images.namespace=mydockerrepo --set
60+
images.controller workflow-controller:latest
5361
```

Dockerfile

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
####################################################################################################
2+
# Builder image
3+
# Initial stage which pulls prepares build dependencies and CLI tooling we need for our final image
4+
# Also used as the image in CI jobs so needs all dependencies
5+
####################################################################################################
6+
FROM golang:1.11.5 as builder
7+
8+
RUN apt-get update && apt-get install -y \
9+
git \
10+
make \
11+
wget \
12+
gcc \
13+
zip && \
14+
apt-get clean && \
15+
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
16+
17+
WORKDIR /tmp
18+
19+
# Install docker
20+
ENV DOCKER_CHANNEL stable
21+
ENV DOCKER_VERSION 18.09.1
22+
RUN wget -O docker.tgz "https://download.docker.com/linux/static/${DOCKER_CHANNEL}/x86_64/docker-${DOCKER_VERSION}.tgz" && \
23+
tar --extract --file docker.tgz --strip-components 1 --directory /usr/local/bin/ && \
24+
rm docker.tgz
25+
26+
# Install dep
27+
ENV DEP_VERSION=0.5.0
28+
RUN wget https://github.com/golang/dep/releases/download/v${DEP_VERSION}/dep-linux-amd64 -O /usr/local/bin/dep && \
29+
chmod +x /usr/local/bin/dep
30+
31+
# Install gometalinter
32+
ENV GOMETALINTER_VERSION=2.0.12
33+
RUN curl -sLo- https://github.com/alecthomas/gometalinter/releases/download/v${GOMETALINTER_VERSION}/gometalinter-${GOMETALINTER_VERSION}-linux-amd64.tar.gz | \
34+
tar -xzC "$GOPATH/bin" --exclude COPYING --exclude README.md --strip-components 1 -f- && \
35+
ln -s $GOPATH/bin/gometalinter $GOPATH/bin/gometalinter.v2
36+
37+
38+
####################################################################################################
39+
# argoexec-base
40+
# Used as the base for both the release and development version of argoexec
41+
####################################################################################################
42+
FROM debian:9.6-slim as argoexec-base
43+
# NOTE: keep the version synced with https://storage.googleapis.com/kubernetes-release/release/stable.txt
44+
ENV KUBECTL_VERSION=1.13.4
45+
RUN apt-get update && \
46+
apt-get install -y curl jq procps git tar mime-support && \
47+
rm -rf /var/lib/apt/lists/* && \
48+
curl -L -o /usr/local/bin/kubectl -LO https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl && \
49+
chmod +x /usr/local/bin/kubectl
50+
COPY hack/ssh_known_hosts /etc/ssh/ssh_known_hosts
51+
COPY --from=builder /usr/local/bin/docker /usr/local/bin/
52+
53+
54+
####################################################################################################
55+
# Argo Build stage which performs the actual build of Argo binaries
56+
####################################################################################################
57+
FROM builder as builder-base
58+
59+
# A dummy directory is created under $GOPATH/src/dummy so we are able to use dep
60+
# to install all the packages of our dep lock file
61+
COPY Gopkg.toml ${GOPATH}/src/dummy/Gopkg.toml
62+
COPY Gopkg.lock ${GOPATH}/src/dummy/Gopkg.lock
63+
64+
RUN cd ${GOPATH}/src/dummy && \
65+
dep ensure -vendor-only && \
66+
mv vendor/* ${GOPATH}/src/ && \
67+
rmdir vendor
68+
69+
WORKDIR /go/src/github.com/cyrusbiotechnology/argo
70+
COPY . .
71+
72+
FROM builder-base as argo-build
73+
# Perform the build
74+
75+
ARG MAKE_TARGET="controller executor cli-linux-amd64"
76+
RUN make $MAKE_TARGET
77+
78+
79+
####################################################################################################
80+
# argoexec
81+
####################################################################################################
82+
FROM argoexec-base as argoexec
83+
COPY --from=argo-build /go/src/github.com/cyrusbiotechnology/argo/dist/argoexec /usr/local/bin/
84+
85+
86+
####################################################################################################
87+
# workflow-controller
88+
####################################################################################################
89+
FROM scratch as workflow-controller
90+
COPY --from=argo-build /go/src/github.com/cyrusbiotechnology/argo/dist/workflow-controller /bin/
91+
ENTRYPOINT [ "workflow-controller" ]
92+
93+
94+
####################################################################################################
95+
# argocli
96+
####################################################################################################
97+
FROM scratch as argocli
98+
COPY --from=argo-build /go/src/github.com/cyrusbiotechnology/argo/dist/argo-linux-amd64 /bin/argo
99+
ENTRYPOINT [ "argo" ]

Dockerfile-argoexec

Lines changed: 0 additions & 16 deletions
This file was deleted.

Dockerfile-builder

Lines changed: 0 additions & 32 deletions
This file was deleted.

Dockerfile-ci-builder

Lines changed: 0 additions & 12 deletions
This file was deleted.

Dockerfile-cli

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)