├── .gitignore ├── src ├── finish │ ├── icon.png │ ├── finish.ts │ └── task.json ├── rollback │ ├── icon.png │ ├── rollback.ts │ └── task.json ├── upgrade │ ├── icon.png │ ├── upgrade.ts │ └── task.json └── getcurrentversion │ ├── icon.png │ ├── getcurrentversion.ts │ └── task.json ├── images ├── extension-icon.png └── rancher-parameters.png ├── tsconfig.json ├── publish.sh ├── package.json ├── LICENSE.md ├── README.md └── vss-extension.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | *.vsix -------------------------------------------------------------------------------- /src/finish/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThiagoBarradas/rancher-vss-ext/HEAD/src/finish/icon.png -------------------------------------------------------------------------------- /src/rollback/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThiagoBarradas/rancher-vss-ext/HEAD/src/rollback/icon.png -------------------------------------------------------------------------------- /src/upgrade/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThiagoBarradas/rancher-vss-ext/HEAD/src/upgrade/icon.png -------------------------------------------------------------------------------- /images/extension-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThiagoBarradas/rancher-vss-ext/HEAD/images/extension-icon.png -------------------------------------------------------------------------------- /images/rancher-parameters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThiagoBarradas/rancher-vss-ext/HEAD/images/rancher-parameters.png -------------------------------------------------------------------------------- /src/getcurrentversion/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThiagoBarradas/rancher-vss-ext/HEAD/src/getcurrentversion/icon.png -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "commonjs" 5 | }, 6 | "exclude": [ 7 | "node_modules", 8 | "dist" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /publish.sh: -------------------------------------------------------------------------------- 1 | #!\bin\bash 2 | 3 | # Clean 4 | rm -rf dist 5 | 6 | # Copy files 7 | mkdir -p dist 8 | cp -r {src,images} dist 9 | cp {*.json,*.md} dist 10 | 11 | # Setup Version 12 | grep -rl "#{version_major}#" dist | xargs sed -i 's/#{version_major}#/'$1'/g' 13 | grep -rl "#{version_minor}#" dist | xargs sed -i 's/#{version_minor}#/'$2'/g' 14 | grep -rl "#{version_patch}#" dist | xargs sed -i 's/#{version_patch}#/'$3'/g' 15 | 16 | # Install Dependencies 17 | cd dist 18 | npm install 19 | 20 | # Compile Typescript 21 | tsc 22 | 23 | # Create Artifact 24 | tfx extension create -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rancher-vss-ext", 3 | "version": "#{version_major}#.#{version_minor}#.#{version_patch}#", 4 | "description": "Rancher Upgrader for Azure DevOps", 5 | "main": "index.js", 6 | "scripts": { 7 | "build": "tsc", 8 | "publish": "tfx extension create", 9 | "test": "echo \"Error: no test specified\" && exit 1" 10 | }, 11 | "homepage": "https://github.com/ThiagoBarradas/rancher-vss-ext#readme", 12 | "bugs": { 13 | "url": "https://github.com/ThiagoBarradas/rancher-vss-ext/issues" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "git+https://github.com/ThiagoBarradas/rancher-vss-ext.git" 18 | }, 19 | "keywords": [ 20 | "azure", 21 | "devops", 22 | "rancher", 23 | "docker", 24 | "orchestration", 25 | "deploy", 26 | "rollback", 27 | "upgrade", 28 | "release" 29 | ], 30 | "author": "Thiago Barradas", 31 | "license": "MIT", 32 | "dependencies": { 33 | "azure-pipelines-task-lib": "~2.8.0" 34 | }, 35 | "devDependencies": { 36 | "@types/node": "^12.0.8", 37 | "@types/q": "^1.5.2" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Thiago Barradas 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/rollback/rollback.ts: -------------------------------------------------------------------------------- 1 | import * as tl from 'azure-pipelines-task-lib/task'; 2 | 3 | async function run() { 4 | try { 5 | // get inputs 6 | var url: string = tl.getInput('url', true) 7 | var accessKey: string = tl.getInput('accessKey', true) 8 | var secretKey: string = tl.getInput('secretKey', true) 9 | var wait: boolean = tl.getBoolInput('wait', false); 10 | var installDocker: boolean = tl.getBoolInput('installDocker', false); 11 | 12 | // install tools 13 | if (installDocker) { 14 | await tl.exec('sudo', ["apt", "install", "docker", "-y"]); 15 | } 16 | 17 | // mount command 18 | const args: Array = new Array(); 19 | args.push('run'); 20 | args.push('thiagobarradas/rancher-upgrader'); 21 | args.push('execute'); 22 | args.push('rollback'); 23 | args.push('--url=' + url); 24 | args.push('--user=' + accessKey); 25 | args.push('--pass=' + secretKey); 26 | 27 | if (wait) { 28 | args.push("--wait"); 29 | } 30 | 31 | // execute rollback 32 | var result = await tl.exec('docker', args); 33 | 34 | if (result > 0) { 35 | tl.setResult(tl.TaskResult.Failed, "------------- Ops, rollback failed!"); 36 | } 37 | } 38 | catch (err) { 39 | tl.setResult(tl.TaskResult.Failed, err.message); 40 | } 41 | } 42 | 43 | run(); -------------------------------------------------------------------------------- /src/finish/finish.ts: -------------------------------------------------------------------------------- 1 | import * as tl from 'azure-pipelines-task-lib/task'; 2 | 3 | async function run() { 4 | try { 5 | // get inputs 6 | var url: string = tl.getInput('url', true) 7 | var accessKey: string = tl.getInput('accessKey', true) 8 | var secretKey: string = tl.getInput('secretKey', true) 9 | var wait: boolean = tl.getBoolInput('wait', false); 10 | var installDocker: boolean = tl.getBoolInput('installDocker', false); 11 | 12 | // install tools 13 | if (installDocker) { 14 | await tl.exec('sudo', ["apt", "install", "docker", "-y"]); 15 | } 16 | 17 | // mount command 18 | const args: Array = new Array(); 19 | args.push('run'); 20 | args.push('thiagobarradas/rancher-upgrader'); 21 | args.push('execute'); 22 | args.push('finishupgrade'); 23 | args.push('--url=' + url); 24 | args.push('--user=' + accessKey); 25 | args.push('--pass=' + secretKey); 26 | 27 | if (wait) { 28 | args.push("--wait"); 29 | } 30 | 31 | // execute finish 32 | var result = await tl.exec('docker', args); 33 | 34 | if (result > 0) { 35 | tl.setResult(tl.TaskResult.Failed, "------------- Ops, finish upgrade failed!"); 36 | } 37 | } 38 | catch (err) { 39 | tl.setResult(tl.TaskResult.Failed, err.message); 40 | } 41 | } 42 | 43 | run(); -------------------------------------------------------------------------------- /src/getcurrentversion/getcurrentversion.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | import * as tl from 'azure-pipelines-task-lib/task'; 3 | 4 | async function run() { 5 | try { 6 | // get inputs 7 | var url: string = tl.getInput('url', true) 8 | var accessKey: string = tl.getInput('accessKey', true) 9 | var secretKey: string = tl.getInput('secretKey', true) 10 | 11 | // install tools 12 | const args = new Array(); 13 | args.push('-s'); 14 | args.push('-f'); 15 | 16 | args.push('--user'); 17 | args.push(accessKey + ':' + secretKey); 18 | 19 | args.push('-w'); 20 | args.push('\nStatusCode: %{http_code}\n\n'); 21 | 22 | args.push('-o'); 23 | args.push('response.json'); 24 | 25 | args.push(url); 26 | 27 | // send request 28 | var result = await tl.exec('curl', args, ); 29 | if (result > 0) { 30 | tl.setResult(tl.TaskResult.Failed, "------------- Ops, get current version failed!"); 31 | } 32 | 33 | var stringContent = fs.readFileSync('response.json','utf8'); 34 | var content = JSON.parse(stringContent); 35 | var fullImage = content.launchConfig.imageUuid.replace("docker:",""); 36 | var imageParts = fullImage.split(":"); 37 | var image = imageParts[0]; 38 | var tag = imageParts[1]; 39 | 40 | tl.setVariable("RANCHER_CURRENT_IMAGE", image); 41 | tl.setVariable("RANCHER_CURRENT_TAG", tag); 42 | 43 | console.log("Image: " + image); 44 | console.log("Tag: " + tag); 45 | } 46 | catch (err) { 47 | tl.setResult(tl.TaskResult.Failed, err.message); 48 | } 49 | } 50 | 51 | run(); -------------------------------------------------------------------------------- /src/getcurrentversion/task.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "c07f0123-0818-4108-b90c-d0255f37b7d2", 3 | "name": "getcurrentversion", 4 | "friendlyName": "Rancher Get Current Version", 5 | "description": "Get current image version from Rancher service", 6 | "helpMarkDown": "Env Var Output: RANCHER_CURRENT_IMAGE and RANCHER_CURRENT_TAG \n[More Information](https://github.com/ThiagoBarradas/rancher-vss-ext)", 7 | "author": "Thiago Barradas", 8 | "preview": false, 9 | "showEnvironmentVariables": true, 10 | "instanceNameFormat" : "Rancher Get Current Version", 11 | "category": "Deploy", 12 | "version": { 13 | "Major": "#{version_major}#", 14 | "Minor": "#{version_minor}#", 15 | "Patch": "#{version_patch}#" 16 | }, 17 | "inputs": [ 18 | { 19 | "name": "url", 20 | "type": "string", 21 | "label": "Service API URl", 22 | "defaultValue": "", 23 | "required": true, 24 | "helpMarkDown": "e.g. http://rancher.mycompany.com:8080/v2-beta/projects/{projectId}}/services/{serviceId}" 25 | }, 26 | { 27 | "name": "accessKey", 28 | "type": "string", 29 | "label": "Access Key", 30 | "defaultValue": "", 31 | "required": true, 32 | "helpMarkDown": "Access Key generated in Rancher ('API' > 'Keys')" 33 | }, 34 | { 35 | "name": "secretKey", 36 | "type": "string", 37 | "label": "Secret Key", 38 | "defaultValue": "", 39 | "required": true, 40 | "helpMarkDown": "Secret Key generated in Rancher ('API' > 'Keys')" 41 | } 42 | ], 43 | "OutputVariables": [ 44 | { 45 | "name" : "RANCHER_CURRENT_IMAGE", 46 | "description" : "Current image slug name or full address. e.g. docker.azurecr.io/xxx/my-image" 47 | }, 48 | { 49 | "name" : "RANCHER_CURRENT_TAG", 50 | "description" : "Current tag. e.g. 'master-20190701.1', '1.5.3' or 'latest'" 51 | } 52 | ], 53 | "execution": { 54 | "Node": { 55 | "target": "getcurrentversion.js" 56 | } 57 | } 58 | } -------------------------------------------------------------------------------- /src/finish/task.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "c07f3415-0818-4108-b90c-d0255f37b7d2", 3 | "name": "finish", 4 | "friendlyName": "Rancher Finish Last Upgrade", 5 | "description": "Finish last upgrade in your Rancher cluster", 6 | "helpMarkDown": "[More Information](https://github.com/ThiagoBarradas/rancher-vss-ext)", 7 | "author": "Thiago Barradas", 8 | "preview": false, 9 | "showEnvironmentVariables": true, 10 | "instanceNameFormat" : "Rancher Finish Last Upgrade", 11 | "category": "Deploy", 12 | "version": { 13 | "Major": "#{version_major}#", 14 | "Minor": "#{version_minor}#", 15 | "Patch": "#{version_patch}#" 16 | }, 17 | "inputs": [ 18 | { 19 | "name": "url", 20 | "type": "string", 21 | "label": "Service API URl", 22 | "defaultValue": "", 23 | "required": true, 24 | "helpMarkDown": "e.g. http://rancher.mycompany.com:8080/v2-beta/projects/{projectId}}/services/{serviceId}" 25 | }, 26 | { 27 | "name": "accessKey", 28 | "type": "string", 29 | "label": "Access Key", 30 | "defaultValue": "", 31 | "required": true, 32 | "helpMarkDown": "Access Key generated in Rancher ('API' > 'Keys')" 33 | }, 34 | { 35 | "name": "secretKey", 36 | "type": "string", 37 | "label": "Secret Key", 38 | "defaultValue": "", 39 | "required": true, 40 | "helpMarkDown": "Secret Key generated in Rancher ('API' > 'Keys')" 41 | }, 42 | { 43 | "name": "wait", 44 | "type": "boolean", 45 | "label": "Wait Complete", 46 | "defaultValue": "true", 47 | "required": false, 48 | "helpMarkDown": "Wait upgrade finish" 49 | }, 50 | { 51 | "name": "installDocker", 52 | "type": "boolean", 53 | "label": "Install Docker", 54 | "defaultValue": "true", 55 | "required": false, 56 | "helpMarkDown": "This task needs docker to work, if you haven't it installed, check this box. Works only with linux" 57 | } 58 | ], 59 | "execution": { 60 | "Node": { 61 | "target": "finish.js" 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /src/rollback/task.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "d07f3415-0818-4108-b90c-d0255f37b7d2", 3 | "name": "rollback", 4 | "friendlyName": "Rancher Rollback Last Upgrade", 5 | "description": "Rollback last upgrade in your Rancher cluster", 6 | "helpMarkDown": "[More Information](https://github.com/ThiagoBarradas/rancher-vss-ext)", 7 | "author": "Thiago Barradas", 8 | "preview": false, 9 | "showEnvironmentVariables": true, 10 | "instanceNameFormat" : "Rancher Rollback Last Upgrade", 11 | "category": "Deploy", 12 | "version": { 13 | "Major": "#{version_major}#", 14 | "Minor": "#{version_minor}#", 15 | "Patch": "#{version_patch}#" 16 | }, 17 | "inputs": [ 18 | { 19 | "name": "url", 20 | "type": "string", 21 | "label": "Service API URl", 22 | "defaultValue": "", 23 | "required": true, 24 | "helpMarkDown": "e.g. http://rancher.mycompany.com:8080/v2-beta/projects/{projectId}}/services/{serviceId}" 25 | }, 26 | { 27 | "name": "accessKey", 28 | "type": "string", 29 | "label": "Access Key", 30 | "defaultValue": "", 31 | "required": true, 32 | "helpMarkDown": "Access Key generated in Rancher ('API' > 'Keys')" 33 | }, 34 | { 35 | "name": "secretKey", 36 | "type": "string", 37 | "label": "Secret Key", 38 | "defaultValue": "", 39 | "required": true, 40 | "helpMarkDown": "Secret Key generated in Rancher ('API' > 'Keys')" 41 | }, 42 | { 43 | "name": "wait", 44 | "type": "boolean", 45 | "label": "Wait Complete", 46 | "defaultValue": "true", 47 | "required": false, 48 | "helpMarkDown": "Wait rollback finish" 49 | }, 50 | { 51 | "name": "installDocker", 52 | "type": "boolean", 53 | "label": "Install Docker", 54 | "defaultValue": "true", 55 | "required": false, 56 | "helpMarkDown": "This task needs docker to work, if you haven't it installed, check this box. Works only with linux" 57 | } 58 | ], 59 | "execution": { 60 | "Node": { 61 | "target": "rollback.js" 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Rancher Upgrader 2 | 3 | Easy upgrade, rollback and finiish upgrade in your rancher cluster. 4 | 5 | ## Usage 6 | Add a new task, select **Rancher Upgrader** from the **Deploy** category and configure it as needed. 7 | 8 | ### Tasks: 9 | 10 | - `Rancher Upgrader Service` 11 | - `Rancher Rollback Last Upgrade` 12 | - `Rancher Finish Last Upgrade` 13 | - `Rancher Get Current Version` 14 | 15 | ## Env Var Ouput: 16 | 17 | For task `Rancher Get Current Version`: 18 | 19 | - `RANCHER_CURRENT_IMAGE` 20 | - `RANCHER_CURRENT_TAG` 21 | 22 | 23 | ### Parameters include: 24 | 25 | ![Rancher Upgrader Parameters](images/rancher-parameters.png) 26 | 27 | - **Service API Url**: Ranchel API URL to service. e.g. http://rancher.mycompany.com:8080/v2-beta/projects/{projectId}}/services/{serviceId} 28 | - **Access Key**: Access Key generated in Rancher ('API' > 'Keys') 29 | - **Secret Key**: Secret Key generated in Rancher ('API' > 'Keys') 30 | - **Force Finish**: Force finish before upgrade, if last upgrade is pending 31 | - **Wait Complete**: Wait upgrade and new services up 32 | - **Image**: Image slug name or full address. e.g. docker.azurecr.io/xxx/my-image 33 | - **Tag**: New tag. e.g. 'master-20190701.1', '1.5.3' or 'latest' 34 | - **Install Docker**: This task needs docker to work, if you haven't it installed, check this box. Works only with linux 35 | - **Environment Vars Prefix**: Import all env vars with this prefix to container 36 | - **Additional Environment Vars**: Import this env vars to container 37 | 38 | ## Release notes 39 | 40 | **New in 1.1.4** 41 | - Add env vars by prefix; 42 | - Add env vars by name; 43 | - Add option to install docker (only linux) 44 | 45 | **New in 1.0.18** 46 | - Fix get current version task output; 47 | - Add docs for env vars output; 48 | 49 | **New in 1.0.17** 50 | - Add get current version task; 51 | 52 | **New in 1.0.16** 53 | - First version with basic commands; 54 | - Upgrade service; 55 | - Rollback last upgrade; 56 | - Finish last upgrade; 57 | - Change image or tag; 58 | - Force finish before upgrade; 59 | - Wait results to continue tasks (success) or abort (fails); 60 | 61 | ## Did you like it? Please, make a donate :) 62 | 63 | if you liked this project, please make a contribution and help to keep this and other initiatives, send me some Satochis. 64 | 65 | BTC Wallet: `1G535x1rYdMo9CNdTGK3eG6XJddBHdaqfX` 66 | 67 | ![1G535x1rYdMo9CNdTGK3eG6XJddBHdaqfX](https://i.imgur.com/mN7ueoE.png) 68 | -------------------------------------------------------------------------------- /src/upgrade/upgrade.ts: -------------------------------------------------------------------------------- 1 | import * as tl from 'azure-pipelines-task-lib/task'; 2 | 3 | async function run() { 4 | try { 5 | // get inputs 6 | var installDocker: boolean = tl.getBoolInput('installDocker', false); 7 | var url: string = tl.getInput('url', true); 8 | var accessKey: string = tl.getInput('accessKey', true); 9 | var secretKey: string = tl.getInput('secretKey', true); 10 | var force: boolean = tl.getBoolInput('force', false); 11 | var wait: boolean = tl.getBoolInput('wait', false); 12 | var image: string = tl.getInput('image', false); 13 | var tag: string = tl.getInput('tag', false); 14 | var prefixVars: string = tl.getInput('prefixVars', false); 15 | var manualVars: string = tl.getInput('manualVars', false); 16 | 17 | // install tools 18 | if (installDocker) { 19 | await tl.exec('sudo', ["apt", "install", "docker", "-y"]); 20 | } 21 | 22 | // mount command 23 | const args: Array = new Array(); 24 | args.push('run'); 25 | args.push('thiagobarradas/rancher-upgrader'); 26 | args.push('execute'); 27 | args.push('upgrade'); 28 | args.push('--url=' + url); 29 | args.push('--user=' + accessKey); 30 | args.push('--pass=' + secretKey); 31 | 32 | if (force) { 33 | args.push("--force"); 34 | } 35 | 36 | if (wait) { 37 | args.push("--wait"); 38 | } 39 | 40 | if (image) { 41 | args.push("--image=" + image); 42 | } 43 | 44 | if (prefixVars || manualVars) { 45 | args.push("--update-env"); 46 | } 47 | 48 | if (prefixVars) { 49 | tl.getVariables().forEach(function (variable) { 50 | if (variable.name.startsWith(prefixVars)) { 51 | args.push("-e", variable.name + "=" + variable.value); 52 | } 53 | }); 54 | } 55 | 56 | if (manualVars) { 57 | var vars = manualVars.replace("\r\n","\n").split("\n"); 58 | vars.forEach(function (varName) { 59 | var value = tl.getVariable(varName); 60 | if (value == null) { 61 | value = ""; 62 | } 63 | 64 | args.push("-e", varName + "=" + value); 65 | }); 66 | } 67 | 68 | if (tag) { 69 | args.push("--tag=" + tag); 70 | } 71 | 72 | // execute upgrade 73 | var result = await tl.exec('docker', args); 74 | 75 | if (result > 0) { 76 | tl.setResult(tl.TaskResult.Failed, "------------- Ops, upgrade failed!"); 77 | } 78 | } 79 | catch (err) { 80 | tl.setResult(tl.TaskResult.Failed, err.message); 81 | } 82 | } 83 | 84 | run(); -------------------------------------------------------------------------------- /src/upgrade/task.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "b07f3415-0818-4108-b90c-d0255f37b7d2", 3 | "name": "upgrade", 4 | "friendlyName": "Rancher Upgrade Service", 5 | "description": "Upgrade a service in your Rancher cluster", 6 | "helpMarkDown": "[More Information](https://github.com/ThiagoBarradas/rancher-vss-ext)", 7 | "author": "Thiago Barradas", 8 | "preview": false, 9 | "showEnvironmentVariables": true, 10 | "instanceNameFormat" : "Rancher Upgrade Service", 11 | "category": "Deploy", 12 | "version": { 13 | "Major": "#{version_major}#", 14 | "Minor": "#{version_minor}#", 15 | "Patch": "#{version_patch}#" 16 | }, 17 | "inputs": [ 18 | { 19 | "name": "url", 20 | "type": "string", 21 | "label": "Service API URl", 22 | "defaultValue": "", 23 | "required": true, 24 | "helpMarkDown": "e.g. http://rancher.mycompany.com:8080/v2-beta/projects/{projectId}}/services/{serviceId}" 25 | }, 26 | { 27 | "name": "accessKey", 28 | "type": "string", 29 | "label": "Access Key", 30 | "defaultValue": "", 31 | "required": true, 32 | "helpMarkDown": "Access Key generated in Rancher ('API' > 'Keys')" 33 | }, 34 | { 35 | "name": "secretKey", 36 | "type": "string", 37 | "label": "Secret Key", 38 | "defaultValue": "", 39 | "required": true, 40 | "helpMarkDown": "Secret Key generated in Rancher ('API' > 'Keys')" 41 | }, 42 | { 43 | "name": "force", 44 | "type": "boolean", 45 | "label": "Force Finish", 46 | "defaultValue": "true", 47 | "required": false, 48 | "helpMarkDown": "Force finish before upgrade, if last upgrade is pending" 49 | }, 50 | { 51 | "name": "wait", 52 | "type": "boolean", 53 | "label": "Wait Complete", 54 | "defaultValue": "true", 55 | "required": false, 56 | "helpMarkDown": "Wait upgrade and new services up" 57 | }, 58 | { 59 | "name": "installDocker", 60 | "type": "boolean", 61 | "label": "Install Docker", 62 | "defaultValue": "true", 63 | "required": false, 64 | "helpMarkDown": "This task needs docker to work, if you haven't it installed, check this box. Works only with linux" 65 | }, 66 | { 67 | "name": "image", 68 | "type": "string", 69 | "label": "Image", 70 | "defaultValue": "", 71 | "required": false, 72 | "helpMarkDown": "Image slug name or full address. e.g. docker.azurecr.io/xxx/my-image" 73 | }, 74 | { 75 | "name": "tag", 76 | "type": "string", 77 | "label": "Tag", 78 | "defaultValue": "", 79 | "required": false, 80 | "helpMarkDown": "New tag. e.g. 'master-20190701.1', '1.5.3' or 'latest'" 81 | }, 82 | { 83 | "name": "prefixVars", 84 | "type": "string", 85 | "label": "Environment Vars Prefix", 86 | "defaultValue": "", 87 | "required": false, 88 | "helpMarkDown": "Import all env vars with this prefix to container" 89 | }, 90 | { 91 | "name": "manualVars", 92 | "type": "multiLine", 93 | "label": "Additional Environment Vars", 94 | "defaultValue": "", 95 | "required": false, 96 | "helpMarkDown": "Import this env vars to container" 97 | } 98 | ], 99 | "execution": { 100 | "Node": { 101 | "target": "upgrade.js" 102 | } 103 | } 104 | } -------------------------------------------------------------------------------- /vss-extension.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifestVersion": 1, 3 | "id": "rancher", 4 | "publisher": "ThiagoBarradas", 5 | "version": "#{version_major}#.#{version_minor}#.#{version_patch}#", 6 | "name": "Rancher Upgrader", 7 | "description": "Easy upgrade, rollback and finiish upgrade in your rancher cluster", 8 | "public": true, 9 | "categories": [ 10 | "Azure Pipelines" 11 | ], 12 | "tags": [ 13 | "deploy", 14 | "rollback", 15 | "docker", 16 | "container", 17 | "orchestration", 18 | "release", 19 | "upgrade", 20 | "complete" 21 | ], 22 | "links": { 23 | "home": { "uri": "https://github.com/ThiagoBarradas/rancher-vss-ext#readme" }, 24 | "repository": { "uri": "https://github.com/ThiagoBarradas/rancher-vss-ext" }, 25 | "support": { "uri": "https://github.com/ThiagoBarradas/rancher-vss-ext/issues" }, 26 | "getstarted": { "uri": "https://github.com/ThiagoBarradas/rancher-vss-ext#readme" }, 27 | "privacypolicy": { "uri" : "https://gist.github.com/ThiagoBarradas/eb56552b4a71cf52141b85a6afa0e526" } 28 | }, 29 | "icons": { 30 | "default": "images/extension-icon.png" 31 | }, 32 | "targets": [ 33 | { "id": "Microsoft.VisualStudio.Services" } 34 | ], 35 | "content": { 36 | "details": { "path": "README.md" }, 37 | "license": { "path": "LICENSE.md" } 38 | }, 39 | "repository": { 40 | "type": "git", 41 | "uri": "https://github.com/ThiagoBarradas/rancher-vss-ext" 42 | }, 43 | "contributions": [ 44 | { 45 | "id": "upgrade-task", 46 | "type": "ms.vss-distributed-task.task", 47 | "targets": [ 48 | "ms.vss-distributed-task.tasks" 49 | ], 50 | "properties": { "name": "upgrade" } 51 | }, 52 | { 53 | "id": "rollback-task", 54 | "type": "ms.vss-distributed-task.task", 55 | "targets": [ 56 | "ms.vss-distributed-task.tasks" 57 | ], 58 | "properties": { "name": "rollback" } 59 | }, 60 | { 61 | "id": "finish-task", 62 | "type": "ms.vss-distributed-task.task", 63 | "targets": [ 64 | "ms.vss-distributed-task.tasks" 65 | ], 66 | "properties": { "name": "finish" } 67 | }, 68 | { 69 | "id": "getcurrentversion-task", 70 | "type": "ms.vss-distributed-task.task", 71 | "targets": [ 72 | "ms.vss-distributed-task.tasks" 73 | ], 74 | "properties": { "name": "getcurrentversion" } 75 | } 76 | ], 77 | "files": [ 78 | { 79 | "path": "images", 80 | "addressable": true 81 | }, 82 | { 83 | "path": "src/upgrade" , 84 | "packagePath": "upgrade" 85 | }, 86 | { 87 | "path": "src/rollback", 88 | "packagePath": "rollback" 89 | }, 90 | { 91 | "path": "src/finish", 92 | "packagePath": "finish" 93 | }, 94 | { 95 | "path": "src/getcurrentversion", 96 | "packagePath": "getcurrentversion" 97 | }, 98 | { 99 | "path": "node_modules", 100 | "packagePath": "upgrade/node_modules" 101 | }, 102 | { 103 | "path": "node_modules", 104 | "packagePath": "rollback/node_modules" 105 | }, 106 | { 107 | "path": "node_modules", 108 | "packagePath": "finish/node_modules" 109 | }, 110 | { 111 | "path": "node_modules", 112 | "packagePath": "getcurrentversion/node_modules" 113 | } 114 | ] 115 | } --------------------------------------------------------------------------------