-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBuildAndDeployBot.yml
126 lines (111 loc) · 5.21 KB
/
BuildAndDeployBot.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
parameters:
- name: bot
type: object
- name: buildNumber
type: string
jobs:
- job: ValidateParameters
displayName: Validate parameters
steps:
- template: RequiredValue.yml
parameters:
name: 'bot.image'
value: ${{ parameters.bot.image }}
- template: RequiredValue.yml
parameters:
name: 'bot.imageName'
value: ${{ parameters.bot.imageName }}
- template: RequiredValue.yml
parameters:
name: 'bot.sshEndpoint'
value: ${{ parameters.bot.sshEndpoint }}
- template: RequiredValue.yml
parameters:
name: 'bot.dockerRegistryEndpoint'
value: ${{ parameters.bot.dockerRegistryEndpoint }}
- template: RequiredValue.yml
parameters:
name: 'bot.envFile'
value: ${{ parameters.bot.envFile }}
- template: RequiredValue.yml
parameters:
name: 'buildNumber'
value: ${{ parameters.buildNumber }}
- job: Build
displayName: Build Image
dependsOn: ValidateParameters
steps:
- bash: |
PACKAGE_VERSION=$(grep '"version":' package.json | cut -d\" -f4)
echo "##vso[build.updatebuildnumber]$PACKAGE_VERSION"
displayName: 'Update Build Number'
- task: Docker@1
displayName: 'Build an image'
inputs:
containerregistrytype: 'Container Registry'
dockerRegistryEndpoint: ${{ parameters.bot.dockerRegistryEndpoint }}
imageName: '${{ parameters.bot.image }}:${{ parameters.buildNumber }}'
enabled: true
- task: Docker@1
displayName: 'Push an image'
inputs:
containerregistrytype: 'Container Registry'
dockerRegistryEndpoint: ${{ parameters.bot.dockerRegistryEndpoint }}
command: 'Push an image'
imageName: '${{ parameters.bot.image }}:${{ parameters.buildNumber }}'
enabled: true
condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'))
- job: Deploy
displayName: Deploy Container
dependsOn: Build
condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'))
steps:
- bash: |
PACKAGE_VERSION=$(grep '"version":' package.json | cut -d\" -f4)
echo "##vso[build.updatebuildnumber]$PACKAGE_VERSION"
displayName: 'Update Build Number'
- task: DownloadSecureFile@1
name: environment
displayName: 'Download secure file'
inputs:
secureFile: ${{ parameters.bot.envFile }}
- bash: 'cp $(environment.secureFilePath) $(Build.SourcesDirectory)/${{ parameters.bot.envFile }}'
displayName: 'Bash Script'
enabled: true
- task: CopyFilesOverSSH@0
displayName: 'Securely copy files to the remote machine'
inputs:
sshEndpoint: ${{ parameters.bot.sshEndpoint }}
sourceFolder: '$(Build.SourcesDirectory)'
contents: ${{ parameters.bot.envFile }}
failOnEmptySource: true
enabled: true
- task: SSH@0
displayName: 'Run Dockerized Bot (commands)'
inputs:
sshEndpoint: ${{ parameters.bot.sshEndpoint }}
commands: |
# Pull the new image
docker pull ${{ parameters.bot.image }}:${{ parameters.buildNumber }}
# Kill/Remove the running container
docker ps | grep ${{ parameters.bot.imageName }} && docker kill ${{ parameters.bot.imageName }} && docker rm ${{ parameters.bot.imageName }} || echo "No container named ${{ parameters.bot.imageName }} is running."
# Run the new image
docker run -d --env-file ./${{ parameters.bot.envFile }} --restart=always --name ${{ parameters.bot.imageName }} ${{ parameters.bot.image }}:${{ parameters.buildNumber }}
# Cleanup
docker system prune -f -a
enabled: true
- task: SSH@0
displayName: 'Run Dockerized Bot (inline)'
inputs:
sshEndpoint: ${{ parameters.bot.sshEndpoint }}
runOptions: inline
inline: |
# Pull the new image
docker pull ${{ parameters.bot.image }}:${{ parameters.buildNumber }}
# Kill/Remove the running container
docker ps | grep ${{ parameters.bot.imageName }} && docker kill ${{ parameters.bot.imageName }} && docker rm ${{ parameters.bot.imageName }} || echo "No container named ${{ parameters.bot.imageName }} is running."
# Run the new image
docker run -d --env-file ./${{ parameters.bot.envFile }} --restart=always --name ${{ parameters.bot.imageName }} ${{ parameters.bot.image }}:${{ parameters.buildNumber }}
# Cleanup
docker system prune -f -a
enabled: false