Compare commits
	
		
			17 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 40a6bba338 | |||
| f98f490956 | |||
| 15714204a6 | |||
| 35c4963192 | |||
| b3c5db3ed9 | |||
| 0701429782 | |||
| 24dd9edcae | |||
| 3e1397e13f | |||
| ecb21a787f | |||
| 10233ffae0 | |||
| 4cea1d29d2 | |||
| 3bf2502f87 | |||
| c012810a8c | |||
| ae5b1b1fa7 | |||
| f1bf000744 | |||
| 30e16cb33d | |||
| 16984d811f | 
							
								
								
									
										2
									
								
								dist/mod_docker/mod.builddocker.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/mod_docker/mod.builddocker.d.ts
									
									
									
									
										vendored
									
									
								
							| @@ -91,7 +91,7 @@ export declare let dockerBaseImage: (dockerfileContentArg: string) => string; | ||||
| /** | ||||
|  * returns the docker tag | ||||
|  */ | ||||
| export declare let dockerTag: (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string) => string; | ||||
| export declare let getDockerTagString: (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string) => string; | ||||
| /** | ||||
|  * | ||||
|  */ | ||||
|   | ||||
							
								
								
									
										33
									
								
								dist/mod_docker/mod.builddocker.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								dist/mod_docker/mod.builddocker.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										40
									
								
								dist/mod_prepare/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								dist/mod_prepare/index.js
									
									
									
									
										vendored
									
									
								
							| @@ -34,28 +34,40 @@ let npm = () => __awaiter(this, void 0, void 0, function* () { | ||||
|  */ | ||||
| let docker = () => __awaiter(this, void 0, void 0, function* () { | ||||
|     env.setDockerRegistry('docker.io'); // TODO: checkup why we set this here | ||||
|     let dockerRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)/; | ||||
|     // Login external reigstry | ||||
|     if (!process.env.NPMCI_LOGIN_DOCKER) { | ||||
|         plugins.beautylog.warn('You have to specify Login Data to an external Docker Registry'); | ||||
|         plugins.beautylog.warn('|- As a result only the gitlab registry is availble for this build.'); | ||||
|     } | ||||
|     else { | ||||
|         let dockerRegexResultArray = dockerRegex.exec(process.env.NPMCI_LOGIN_DOCKER); | ||||
|     // handle registries | ||||
|     plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_LOGIN_DOCKER*', (envString) => __awaiter(this, void 0, void 0, function* () { | ||||
|         let dockerRegexResultArray = envString.split('|'); | ||||
|         if (dockerRegexResultArray.length !== 3) { | ||||
|             plugins.beautylog.error('malformed docker env var...'); | ||||
|             process.exit(1); | ||||
|             return; | ||||
|         } | ||||
|         let registry = dockerRegexResultArray[0]; | ||||
|         let username = dockerRegexResultArray[1]; | ||||
|         let password = dockerRegexResultArray[2]; | ||||
|         yield npmci_bash_1.bash('docker login -u ' + username + ' -p ' + password); | ||||
|     } | ||||
|         if (registry === 'docker.io') { | ||||
|             yield npmci_bash_1.bash(`docker login -u ${username} -p ${password}`); | ||||
|             plugins.beautylog.info('Logged in to standard docker hub'); | ||||
|         } | ||||
|         else { | ||||
|             yield npmci_bash_1.bash(`docker login -u ${username} -p ${password} ${registry}`); | ||||
|         } | ||||
|         plugins.beautylog.success(`docker authenticated for ${registry}!`); | ||||
|     })); | ||||
|     // Always login to GitLab Registry | ||||
|     plugins.shelljs.exec('docker login -u gitlab-ci-token -p ' + process.env.CI_BUILD_TOKEN + ' ' + 'registry.gitlab.com'); | ||||
|     yield dockerGitlab(); | ||||
|     return; | ||||
| }); | ||||
| /** | ||||
|  * prepare docker for gitlab registry | ||||
|  */ | ||||
| let dockerGitlab = () => __awaiter(this, void 0, void 0, function* () { | ||||
|     env.setDockerRegistry('registry.gitlab.com'); | ||||
|     plugins.shelljs.exec('docker login -u gitlab-ci-token -p ' + process.env.CI_BUILD_TOKEN + ' ' + 'registry.gitlab.com'); | ||||
|     if (!process.env.CI_BUILD_TOKEN || process.env.CI_BUILD_TOKEN === '') { | ||||
|         plugins.beautylog.error('No registry token specified by gitlab!'); | ||||
|         process.exit(1); | ||||
|     } | ||||
|     yield npmci_bash_1.bash(`docker login -u gitlab-ci-token -p ${process.env.CI_BUILD_TOKEN} registry.gitlab.com`); | ||||
|     plugins.beautylog.success(`docker authenticated for registry.gitlab.com!`); | ||||
|     return; | ||||
| }); | ||||
| /** | ||||
| @@ -83,4 +95,4 @@ exports.prepare = (serviceArg) => __awaiter(this, void 0, void 0, function* () { | ||||
|             break; | ||||
|     } | ||||
| }); | ||||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfcHJlcGFyZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEseUNBQXdDO0FBQ3hDLDhDQUFvQztBQUNwQyxvQ0FBbUM7QUFDbkMsMkNBQTBDO0FBUzFDOztHQUVHO0FBQ0gsSUFBSSxHQUFHLEdBQUc7SUFDUixJQUFJLFdBQVcsR0FBVyxtQ0FBbUMsQ0FBQTtJQUM3RCxJQUFJLFFBQVEsR0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQTtJQUNsRCxJQUFJLGVBQWUsR0FBVyxXQUFXLEdBQUcsUUFBUSxDQUFBO0lBQ3BELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDYixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUE7UUFDMUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUNsRSxNQUFNLENBQUE7QUFDUixDQUFDLENBQUEsQ0FBQTtBQUVEOztHQUVHO0FBQ0gsSUFBSSxNQUFNLEdBQUc7SUFDWCxHQUFHLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUEsQ0FBQyxxQ0FBcUM7SUFDeEUsSUFBSSxXQUFXLEdBQUcscUNBQXFDLENBQUE7SUFFdkQsMEJBQTBCO0lBQzFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDcEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsK0RBQStELENBQUMsQ0FBQTtRQUN2RixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxRUFBcUUsQ0FBQyxDQUFBO0lBQy9GLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLElBQUksc0JBQXNCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDN0UsSUFBSSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDeEMsSUFBSSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDeEMsTUFBTSxpQkFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUE7SUFDL0QsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxHQUFHLEdBQUcscUJBQXFCLENBQUMsQ0FBQTtJQUN0SCxNQUFNLENBQUE7QUFDUixDQUFDLENBQUEsQ0FBQTtBQUVEOztHQUVHO0FBQ0gsSUFBSSxZQUFZLEdBQUc7SUFDakIsR0FBRyxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDNUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsR0FBRyxHQUFHLHFCQUFxQixDQUFDLENBQUE7SUFDdEgsTUFBTSxDQUFBO0FBQ1IsQ0FBQyxDQUFBLENBQUE7QUFFRDs7R0FFRztBQUNILElBQUksR0FBRyxHQUFHO0lBQ1IsSUFBSSxTQUFTLEdBQUcsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzdDLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ3ZCLENBQUMsQ0FBQSxDQUFBO0FBRUQ7OztHQUdHO0FBQ1EsUUFBQSxPQUFPLEdBQUcsQ0FBTyxVQUF3QjtJQUNsRCxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssS0FBSztZQUNSLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBQ3BCLEtBQUssUUFBUTtZQUNYLE1BQU0sQ0FBQyxNQUFNLE1BQU0sRUFBRSxDQUFBO1FBQ3ZCLEtBQUssZUFBZTtZQUNsQixNQUFNLENBQUMsTUFBTSxZQUFZLEVBQUUsQ0FBQTtRQUM3QixLQUFLLEtBQUs7WUFDUixNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUNwQjtZQUNFLEtBQUssQ0FBQTtJQUNULENBQUM7QUFDSCxDQUFDLENBQUEsQ0FBQSJ9 | ||||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfcHJlcGFyZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEseUNBQXdDO0FBQ3hDLDhDQUFvQztBQUNwQyxvQ0FBbUM7QUFDbkMsMkNBQTBDO0FBUzFDOztHQUVHO0FBQ0gsSUFBSSxHQUFHLEdBQUc7SUFDUixJQUFJLFdBQVcsR0FBVyxtQ0FBbUMsQ0FBQTtJQUM3RCxJQUFJLFFBQVEsR0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQTtJQUNsRCxJQUFJLGVBQWUsR0FBVyxXQUFXLEdBQUcsUUFBUSxDQUFBO0lBQ3BELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDYixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUE7UUFDMUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUNsRSxNQUFNLENBQUE7QUFDUixDQUFDLENBQUEsQ0FBQTtBQUVEOztHQUVHO0FBQ0gsSUFBSSxNQUFNLEdBQUc7SUFDWCxHQUFHLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUEsQ0FBQyxxQ0FBcUM7SUFFeEUsb0JBQW9CO0lBQ3BCLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxDQUFPLFNBQVM7UUFDdEYsSUFBSSxzQkFBc0IsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFB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 | ||||
							
								
								
									
										19
									
								
								docs/ssh.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								docs/ssh.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| # SSH | ||||
| npmci allows easy usage of ssh: | ||||
|  | ||||
| ## Add the SSH KEY to the environment | ||||
|  | ||||
| To make npmci aware of any SSH KEY add it to the environment in the following format | ||||
| ``` | ||||
| # Key | ||||
| NPMCI_SSHKEY_[A_NAME_FROM_YOU] | ||||
| # Value: | ||||
| [targeted host]|[privatekey as base64]|*** | ||||
| ``` | ||||
|  | ||||
| ## Use npmci cli tool in your ci script | ||||
| ``` | ||||
| npmci prepare ssh | ||||
| npmci command git remote add heroku ssh://git@heroku.com/[you project name].git | ||||
| npmci command git push heroku master | ||||
| ``` | ||||
							
								
								
									
										26
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "npmci", | ||||
|   "version": "2.4.6", | ||||
|   "version": "2.4.14", | ||||
|   "description": "node and docker in gitlab ci on steroids", | ||||
|   "main": "dist/index.js", | ||||
|   "typings": "dist/index.d.ts", | ||||
| @@ -22,34 +22,34 @@ | ||||
|   }, | ||||
|   "homepage": "https://gitlab.com/gitzone/npmci#README", | ||||
|   "devDependencies": { | ||||
|     "tapbundle": "^1.0.14" | ||||
|     "tapbundle": "^1.1.1" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@types/lodash": "^4.14.67", | ||||
|     "@types/node": "^8.0.6", | ||||
|     "@types/shelljs": "^0.7.2", | ||||
|     "@types/lodash": "^4.14.74", | ||||
|     "@types/node": "^8.0.25", | ||||
|     "@types/shelljs": "^0.7.4", | ||||
|     "@types/through2": "^2.0.33", | ||||
|     "beautylog": "^6.1.10", | ||||
|     "cflare": "^1.0.5", | ||||
|     "gulp": "^3.9.1", | ||||
|     "gulp-function": "^2.2.9", | ||||
|     "lodash": "^4.17.4", | ||||
|     "npmextra": "^2.0.5", | ||||
|     "npmextra": "^2.0.9", | ||||
|     "projectinfo": "^3.0.2", | ||||
|     "request": "^2.81.0", | ||||
|     "shelljs": "^0.7.8", | ||||
|     "smartcli": "^2.0.7", | ||||
|     "smartdelay": "^1.0.3", | ||||
|     "smartfile": "^4.2.17", | ||||
|     "smartfile": "^4.2.20", | ||||
|     "smartmonitor": "^1.0.3", | ||||
|     "smartparam": "^0.1.1", | ||||
|     "smartq": "^1.1.1", | ||||
|     "smartshell": "^1.0.8", | ||||
|     "smartsocket": "^1.1.7", | ||||
|     "smartparam": "^1.0.1", | ||||
|     "smartq": "^1.1.6", | ||||
|     "smartshell": "^1.0.13", | ||||
|     "smartsocket": "^1.1.10", | ||||
|     "smartssh": "^1.2.2", | ||||
|     "smartstring": "^2.0.24", | ||||
|     "smartsystem": "^1.0.18", | ||||
|     "smartsystem": "^2.0.2", | ||||
|     "through2": "^2.0.3", | ||||
|     "typings-global": "^1.0.19" | ||||
|     "typings-global": "^1.0.20" | ||||
|   } | ||||
| } | ||||
|   | ||||
							
								
								
									
										12
									
								
								test/test.ts
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								test/test.ts
									
									
									
									
									
								
							| @@ -10,12 +10,12 @@ process.cwd = () => { | ||||
| } | ||||
|  | ||||
| // require NPMCI files | ||||
| import '../dist/index' | ||||
| import NpmciBuildDocker = require('../dist/mod_docker/index') | ||||
| import NpmciPublish = require('../dist/mod_publish/index') | ||||
| import NpmciTest = require('../dist/mod_test/index') | ||||
| import NpmciSsh = require('../dist/mod_ssh/index') | ||||
| import NpmciEnv = require('../dist/npmci.env') | ||||
| import '../ts/index' | ||||
| import NpmciBuildDocker = require('../ts/mod_docker/index') | ||||
| import NpmciPublish = require('../ts/mod_publish/index') | ||||
| import NpmciTest = require('../ts/mod_test/index') | ||||
| import NpmciSsh = require('../ts/mod_ssh/index') | ||||
| import NpmciEnv = require('../ts/npmci.env') | ||||
|  | ||||
| let dockerfile1: NpmciBuildDocker.Dockerfile | ||||
| let dockerfile2: NpmciBuildDocker.Dockerfile | ||||
|   | ||||
| @@ -111,7 +111,7 @@ export let buildDockerfiles = async (sortedArrayArg: Dockerfile[]) => { | ||||
| export let pushDockerfiles = async (sortedArrayArg: Dockerfile[]) => { | ||||
|   let stageArg = (function () { | ||||
|     if (modArgvArg._ && modArgvArg._.length >= 3) { | ||||
|       return modArgvArg._[2] | ||||
|       return modArgvArg._[ 2 ] | ||||
|     } else { | ||||
|       return NpmciEnv.buildStage | ||||
|     } | ||||
| @@ -167,9 +167,12 @@ export class Dockerfile { | ||||
|     this.version = dockerFileVersion(plugins.path.parse(options.filePath).base) | ||||
|     this.cleanTag = this.repo + ':' + this.version | ||||
|     this.buildTag = this.cleanTag | ||||
|     this.gitlabTestTag = dockerTag('registry.gitlab.com', this.repo, this.version, 'test') | ||||
|     this.gitlabReleaseTag = dockerTag('registry.gitlab.com', this.repo, this.version) | ||||
|     this.releaseTag = dockerTag(NpmciEnv.dockerRegistry, this.repo, this.version) | ||||
|     this.gitlabTestTag = getDockerTagString('registry.gitlab.com', this.repo, this.version, 'test') | ||||
|     this.gitlabReleaseTag = getDockerTagString('registry.gitlab.com', this.repo, this.version) | ||||
|  | ||||
|     // the releaseTag determines where the image gets released | ||||
|     this.releaseTag = getDockerTagString('docker.io', this.repo, this.version) | ||||
|  | ||||
|     this.containerName = 'dockerfile-' + this.version | ||||
|     if (options.filePath && options.read) { | ||||
|       this.content = plugins.smartfile.fs.toStringSync(plugins.path.resolve(options.filePath)) | ||||
| @@ -193,20 +196,16 @@ export class Dockerfile { | ||||
|    * pushes the Dockerfile to a registry | ||||
|    */ | ||||
|   async push (stageArg) { | ||||
|     await bash(`docker tag ${this.buildTag} ${this.releaseTag}`) | ||||
|     await bash(`docker tag ${this.buildTag} ${this.gitlabReleaseTag}`) | ||||
|     await bash(`docker tag ${this.buildTag} ${this.gitlabTestTag}`) | ||||
|     switch (stageArg) { | ||||
|       case 'release': | ||||
|         await bash(`docker tag ${this.buildTag} ${this.releaseTag}`) | ||||
|         await bash(`docker push ${this.gitlabReleaseTag}`) | ||||
|         await bash(`docker push ${this.releaseTag}`) | ||||
|  | ||||
|         // if release registry is different from gitlab | ||||
|         if (NpmciEnv.dockerRegistry !== 'registry.gitlab.com') { | ||||
|           await bash(`docker tag ${this.buildTag} ${this.gitlabReleaseTag}`) | ||||
|           await bash(`docker push ${this.gitlabReleaseTag}`) | ||||
|         } | ||||
|         break | ||||
|       case 'test': | ||||
|       default: | ||||
|         await bash(`docker tag ${this.buildTag} ${this.gitlabTestTag}`) | ||||
|         await bash(`docker push ${this.gitlabTestTag}`) | ||||
|         break | ||||
|     } | ||||
| @@ -216,9 +215,8 @@ export class Dockerfile { | ||||
|    * pulls the Dockerfile from a registry | ||||
|    */ | ||||
|   async pull (registryArg: string) { | ||||
|     let pullTag = this.gitlabTestTag | ||||
|     await bash('docker pull ' + pullTag) | ||||
|     await bash('docker tag ' + pullTag + ' ' + this.buildTag) | ||||
|     await bash(`docker pull ${this.gitlabTestTag}`) | ||||
|     await bash(`docker tag ${this.gitlabTestTag} ${this.buildTag}`) | ||||
|   } | ||||
|  | ||||
|   /** | ||||
| @@ -258,7 +256,7 @@ export let dockerFileVersion = (dockerfileNameArg: string): string => { | ||||
|   let versionRegex = /Dockerfile_([a-zA-Z0-9\.]*)$/ | ||||
|   let regexResultArray = versionRegex.exec(dockerfileNameArg) | ||||
|   if (regexResultArray && regexResultArray.length === 2) { | ||||
|     versionString = regexResultArray[1] | ||||
|     versionString = regexResultArray[ 1 ] | ||||
|   } else { | ||||
|     versionString = 'latest' | ||||
|   } | ||||
| @@ -271,21 +269,19 @@ export let dockerFileVersion = (dockerfileNameArg: string): string => { | ||||
| export let dockerBaseImage = function (dockerfileContentArg: string) { | ||||
|   let baseImageRegex = /FROM\s([a-zA-z0-9\/\-\:]*)\n?/ | ||||
|   let regexResultArray = baseImageRegex.exec(dockerfileContentArg) | ||||
|   return regexResultArray[1] | ||||
|   return regexResultArray[ 1 ] | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * returns the docker tag | ||||
|  */ | ||||
| export let dockerTag = function (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string): string { | ||||
|   let tagString: string | ||||
|   let registry = registryArg | ||||
|   let repo = repoArg | ||||
| export let getDockerTagString = function (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string): string { | ||||
|   // determine wether the suffix is needed | ||||
|   let version = versionArg | ||||
|   if (suffixArg) { | ||||
|     version = versionArg + '_' + suffixArg | ||||
|   } | ||||
|   tagString = registry + '/' + repo + ':' + version | ||||
|   let tagString = `${registryArg}/${repoArg}:${version}` | ||||
|   return tagString | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -32,21 +32,29 @@ let npm = async () => { | ||||
|  */ | ||||
| let docker = async () => { | ||||
|   env.setDockerRegistry('docker.io') // TODO: checkup why we set this here | ||||
|   let dockerRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)/ | ||||
|  | ||||
|   // Login external reigstry | ||||
|   if (!process.env.NPMCI_LOGIN_DOCKER) { | ||||
|     plugins.beautylog.warn('You have to specify Login Data to an external Docker Registry') | ||||
|     plugins.beautylog.warn('|- As a result only the gitlab registry is availble for this build.') | ||||
|   } else { | ||||
|     let dockerRegexResultArray = dockerRegex.exec(process.env.NPMCI_LOGIN_DOCKER) | ||||
|   // handle registries | ||||
|   plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_LOGIN_DOCKER*', async (envString) => { | ||||
|     let dockerRegexResultArray = envString.split('|') | ||||
|     if (dockerRegexResultArray.length !== 3) { | ||||
|       plugins.beautylog.error('malformed docker env var...') | ||||
|       process.exit(1) | ||||
|       return | ||||
|     } | ||||
|     let registry = dockerRegexResultArray[0] | ||||
|     let username = dockerRegexResultArray[1] | ||||
|     let password = dockerRegexResultArray[2] | ||||
|     await bash('docker login -u ' + username + ' -p ' + password) | ||||
|   } | ||||
|     if (registry === 'docker.io') { | ||||
|       await bash(`docker login -u ${username} -p ${password}`) | ||||
|       plugins.beautylog.info('Logged in to standard docker hub') | ||||
|     } else { | ||||
|       await bash(`docker login -u ${username} -p ${password} ${registry}`) | ||||
|     } | ||||
|     plugins.beautylog.success(`docker authenticated for ${registry}!`) | ||||
|   }) | ||||
|  | ||||
|   // Always login to GitLab Registry | ||||
|   plugins.shelljs.exec('docker login -u gitlab-ci-token -p ' + process.env.CI_BUILD_TOKEN + ' ' + 'registry.gitlab.com') | ||||
|   await dockerGitlab() | ||||
|   return | ||||
| } | ||||
|  | ||||
| @@ -54,8 +62,12 @@ let docker = async () => { | ||||
|  * prepare docker for gitlab registry | ||||
|  */ | ||||
| let dockerGitlab = async () => { | ||||
|   env.setDockerRegistry('registry.gitlab.com') | ||||
|   plugins.shelljs.exec('docker login -u gitlab-ci-token -p ' + process.env.CI_BUILD_TOKEN + ' ' + 'registry.gitlab.com') | ||||
|   if (!process.env.CI_BUILD_TOKEN || process.env.CI_BUILD_TOKEN === '') { | ||||
|     plugins.beautylog.error('No registry token specified by gitlab!') | ||||
|     process.exit(1) | ||||
|   } | ||||
|   await bash(`docker login -u gitlab-ci-token -p ${process.env.CI_BUILD_TOKEN} registry.gitlab.com`) | ||||
|   plugins.beautylog.success(`docker authenticated for registry.gitlab.com!`) | ||||
|   return | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user