1
1
#addin "Cake.Json"
2
+ #addin "Cake.Docker"
2
3
3
4
var target = Argument ( "target" , "Deploy" ) ;
5
+ var tagOverride = Argument ( "TagOverride" , "" ) ;
4
6
5
7
using System . Net ;
6
8
using System . Linq ;
@@ -25,6 +27,13 @@ string Get(string url)
25
27
Task ( "EnsureRequirements" )
26
28
. Does ( ( ) =>
27
29
{
30
+ // This allows us to test deployments locally..
31
+ if ( ! string . IsNullOrWhiteSpace ( tagOverride ) )
32
+ {
33
+ tag = tagOverride ;
34
+ return ;
35
+ }
36
+
28
37
if ( ! AppVeyor . IsRunningOnAppVeyor )
29
38
throw new Exception ( "Deployment should happen via appveyor" ) ;
30
39
@@ -42,8 +51,12 @@ Task("UpdateVersionInfo")
42
51
. IsDependentOn ( "EnsureRequirements" )
43
52
. Does ( ( ) =>
44
53
{
45
- tag = AppVeyor . Environment . Repository . Tag . Name ;
46
- AppVeyor . UpdateBuildVersion ( tag ) ;
54
+ // Will not be empty if overriden
55
+ if ( tag == "" )
56
+ {
57
+ tag = AppVeyor . Environment . Repository . Tag . Name ;
58
+ AppVeyor . UpdateBuildVersion ( tag ) ;
59
+ }
47
60
} ) ;
48
61
49
62
Task ( "DownloadGitHubReleaseArtifacts" )
@@ -180,23 +193,43 @@ Task("Publish-DockerImage")
180
193
. IsDependentOn ( "DownloadGitHubReleaseArtifacts" )
181
194
. Does ( ( ) =>
182
195
{
196
+ var username = EnvironmentVariable ( "DOCKER_USERNAME" ) ;
197
+ var password = EnvironmentVariable ( "DOCKER_PASSWORD" ) ;
198
+ if ( string . IsNullOrEmpty ( username ) || string . IsNullOrEmpty ( password ) )
199
+ {
200
+ Warning ( "Skipping docker publish due to missing credentials" ) ;
201
+ return ;
202
+ }
203
+
183
204
var returnCode = StartProcess ( "docker" , new ProcessSettings
184
205
{
185
- Arguments = "build . --build-arg GitVersionZip=" + artifactLookup [ "zip" ] + " --tag gittools/gitversion"
206
+ Arguments = "build . --build-arg GitVersionZip=" + artifactLookup [ "zip" ] + " --tag gittools/gitversion:" + tag
186
207
} ) ;
187
208
if ( returnCode != 0 ) {
188
209
Information ( "Publish-DockerImage Task failed to build image, but continuing with next Task..." ) ;
189
210
publishingError = true ;
211
+ return ;
212
+ }
213
+
214
+ returnCode = StartProcess ( "docker" , new ProcessSettings
215
+ {
216
+ Arguments = "run -v " + System . IO . Directory . GetCurrentDirectory ( ) + ":/repo gittools/gitversion:" + tag
217
+ } ) ;
218
+ if ( returnCode != 0 ) {
219
+ Information ( "Publish-DockerImage Task failed to run built image, but continuing with next Task..." ) ;
220
+ publishingError = true ;
221
+ return ;
190
222
}
191
223
192
224
// Login to dockerhub
193
225
returnCode = StartProcess ( "docker" , new ProcessSettings
194
226
{
195
- Arguments = "login -u=\" " + EnvironmentVariable ( "DOCKER_USERNAME" ) + "\" -p=\" " + EnvironmentVariable ( "DOCKER_PASSWORD" ) + "\" "
227
+ Arguments = "login -u=\" " + username + "\" -p=\" " + password + "\" "
196
228
} ) ;
197
229
if ( returnCode != 0 ) {
198
230
Information ( "Publish-DockerImage Task failed to login, but continuing with next Task..." ) ;
199
231
publishingError = true ;
232
+ return ;
200
233
}
201
234
202
235
// Publish Tag
@@ -207,10 +240,19 @@ Task("Publish-DockerImage")
207
240
if ( returnCode != 0 ) {
208
241
Information ( "Publish-DockerImage Task failed push version tag, but continuing with next Task..." ) ;
209
242
publishingError = true ;
243
+ return ;
210
244
}
211
245
212
246
// Publish latest
213
247
returnCode = StartProcess ( "docker" , new ProcessSettings
248
+ {
249
+ Arguments = "tag gittools/gitversion:" + tag + " gittools/gitversion:latest"
250
+ } ) ;
251
+ if ( returnCode != 0 ) {
252
+ Information ( "Publish-DockerImage Task failed latest tag, but continuing with next Task..." ) ;
253
+ publishingError = true ;
254
+ }
255
+ returnCode = StartProcess ( "docker" , new ProcessSettings
214
256
{
215
257
Arguments = "push gittools/gitversion:latest"
216
258
} ) ;
0 commit comments