mirror of
https://github.com/elastic/kibana.git
synced 2025-06-28 03:01:21 -04:00
[build] Add support for configurable docker tag (#148692)
Unreverts #148603 with [a order of operations fix for the tag
conditional](9ec1e8634d
)
. This surfaced during a cloud deployment - so adding a deployment step.
This will be used to tag a version with an abbreviated commit sha
opposed to the current semver style approach.
e.g. `kibana:8.7.0` -> `kibana:abcdef1`
Defaults will remain semver style - this is in support of a testing
pipeline.
## Testing
```
node scripts/build \
--docker-images \
--docker-tag="abcdef1" \
--skip-docker-ubi \
--skip-docker-cloud \
--skip-docker-context
```
should produce an image `docker.elastic.co/kibana/kibana:abcdef1`
```
node scripts/build \
--docker-images \
--skip-docker-ubi \
--skip-docker-cloud \
--skip-docker-context
```
This commit is contained in:
parent
b254abaf08
commit
ec55a5768e
13 changed files with 34 additions and 3 deletions
|
@ -41,6 +41,7 @@ it('build default and oss dist for current platform, without packages, by defaul
|
||||||
"dockerContextUseLocalArtifact": null,
|
"dockerContextUseLocalArtifact": null,
|
||||||
"dockerCrossCompile": false,
|
"dockerCrossCompile": false,
|
||||||
"dockerPush": false,
|
"dockerPush": false,
|
||||||
|
"dockerTag": null,
|
||||||
"dockerTagQualifier": null,
|
"dockerTagQualifier": null,
|
||||||
"downloadCloudDependencies": true,
|
"downloadCloudDependencies": true,
|
||||||
"downloadFreshNode": true,
|
"downloadFreshNode": true,
|
||||||
|
@ -75,6 +76,7 @@ it('builds packages if --all-platforms is passed', () => {
|
||||||
"dockerContextUseLocalArtifact": null,
|
"dockerContextUseLocalArtifact": null,
|
||||||
"dockerCrossCompile": false,
|
"dockerCrossCompile": false,
|
||||||
"dockerPush": false,
|
"dockerPush": false,
|
||||||
|
"dockerTag": null,
|
||||||
"dockerTagQualifier": null,
|
"dockerTagQualifier": null,
|
||||||
"downloadCloudDependencies": true,
|
"downloadCloudDependencies": true,
|
||||||
"downloadFreshNode": true,
|
"downloadFreshNode": true,
|
||||||
|
@ -109,6 +111,7 @@ it('limits packages if --rpm passed with --all-platforms', () => {
|
||||||
"dockerContextUseLocalArtifact": null,
|
"dockerContextUseLocalArtifact": null,
|
||||||
"dockerCrossCompile": false,
|
"dockerCrossCompile": false,
|
||||||
"dockerPush": false,
|
"dockerPush": false,
|
||||||
|
"dockerTag": null,
|
||||||
"dockerTagQualifier": null,
|
"dockerTagQualifier": null,
|
||||||
"downloadCloudDependencies": true,
|
"downloadCloudDependencies": true,
|
||||||
"downloadFreshNode": true,
|
"downloadFreshNode": true,
|
||||||
|
@ -143,6 +146,7 @@ it('limits packages if --deb passed with --all-platforms', () => {
|
||||||
"dockerContextUseLocalArtifact": null,
|
"dockerContextUseLocalArtifact": null,
|
||||||
"dockerCrossCompile": false,
|
"dockerCrossCompile": false,
|
||||||
"dockerPush": false,
|
"dockerPush": false,
|
||||||
|
"dockerTag": null,
|
||||||
"dockerTagQualifier": null,
|
"dockerTagQualifier": null,
|
||||||
"downloadCloudDependencies": true,
|
"downloadCloudDependencies": true,
|
||||||
"downloadFreshNode": true,
|
"downloadFreshNode": true,
|
||||||
|
@ -178,6 +182,7 @@ it('limits packages if --docker passed with --all-platforms', () => {
|
||||||
"dockerContextUseLocalArtifact": null,
|
"dockerContextUseLocalArtifact": null,
|
||||||
"dockerCrossCompile": false,
|
"dockerCrossCompile": false,
|
||||||
"dockerPush": false,
|
"dockerPush": false,
|
||||||
|
"dockerTag": null,
|
||||||
"dockerTagQualifier": null,
|
"dockerTagQualifier": null,
|
||||||
"downloadCloudDependencies": true,
|
"downloadCloudDependencies": true,
|
||||||
"downloadFreshNode": true,
|
"downloadFreshNode": true,
|
||||||
|
@ -220,6 +225,7 @@ it('limits packages if --docker passed with --skip-docker-ubi and --all-platform
|
||||||
"dockerContextUseLocalArtifact": null,
|
"dockerContextUseLocalArtifact": null,
|
||||||
"dockerCrossCompile": false,
|
"dockerCrossCompile": false,
|
||||||
"dockerPush": false,
|
"dockerPush": false,
|
||||||
|
"dockerTag": null,
|
||||||
"dockerTagQualifier": null,
|
"dockerTagQualifier": null,
|
||||||
"downloadCloudDependencies": true,
|
"downloadCloudDependencies": true,
|
||||||
"downloadFreshNode": true,
|
"downloadFreshNode": true,
|
||||||
|
@ -255,6 +261,7 @@ it('limits packages if --all-platforms passed with --skip-docker-ubuntu', () =>
|
||||||
"dockerContextUseLocalArtifact": null,
|
"dockerContextUseLocalArtifact": null,
|
||||||
"dockerCrossCompile": false,
|
"dockerCrossCompile": false,
|
||||||
"dockerPush": false,
|
"dockerPush": false,
|
||||||
|
"dockerTag": null,
|
||||||
"dockerTagQualifier": null,
|
"dockerTagQualifier": null,
|
||||||
"downloadCloudDependencies": true,
|
"downloadCloudDependencies": true,
|
||||||
"downloadFreshNode": true,
|
"downloadFreshNode": true,
|
||||||
|
|
|
@ -58,6 +58,7 @@ export function readCliArgs(argv: string[]) {
|
||||||
'docker-context-use-local-artifact': null,
|
'docker-context-use-local-artifact': null,
|
||||||
'docker-cross-compile': false,
|
'docker-cross-compile': false,
|
||||||
'docker-push': false,
|
'docker-push': false,
|
||||||
|
'docker-tag': null,
|
||||||
'docker-tag-qualifier': null,
|
'docker-tag-qualifier': null,
|
||||||
'version-qualifier': '',
|
'version-qualifier': '',
|
||||||
'epr-registry': 'snapshot',
|
'epr-registry': 'snapshot',
|
||||||
|
@ -120,6 +121,7 @@ export function readCliArgs(argv: string[]) {
|
||||||
dockerContextUseLocalArtifact: flags['docker-context-use-local-artifact'],
|
dockerContextUseLocalArtifact: flags['docker-context-use-local-artifact'],
|
||||||
dockerCrossCompile: Boolean(flags['docker-cross-compile']),
|
dockerCrossCompile: Boolean(flags['docker-cross-compile']),
|
||||||
dockerPush: Boolean(flags['docker-push']),
|
dockerPush: Boolean(flags['docker-push']),
|
||||||
|
dockerTag: flags['docker-tag'],
|
||||||
dockerTagQualifier: flags['docker-tag-qualifier'],
|
dockerTagQualifier: flags['docker-tag-qualifier'],
|
||||||
initialize: !Boolean(flags['skip-initialize']),
|
initialize: !Boolean(flags['skip-initialize']),
|
||||||
downloadFreshNode: !Boolean(flags['skip-node-download']),
|
downloadFreshNode: !Boolean(flags['skip-node-download']),
|
||||||
|
|
|
@ -16,6 +16,7 @@ export interface BuildOptions {
|
||||||
dockerContextUseLocalArtifact: boolean | null;
|
dockerContextUseLocalArtifact: boolean | null;
|
||||||
dockerCrossCompile: boolean;
|
dockerCrossCompile: boolean;
|
||||||
dockerPush: boolean;
|
dockerPush: boolean;
|
||||||
|
dockerTag: string | null;
|
||||||
dockerTagQualifier: string | null;
|
dockerTagQualifier: string | null;
|
||||||
downloadFreshNode: boolean;
|
downloadFreshNode: boolean;
|
||||||
downloadCloudDependencies: boolean;
|
downloadCloudDependencies: boolean;
|
||||||
|
|
|
@ -35,6 +35,7 @@ const config = new Config(
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
'',
|
'',
|
||||||
|
'',
|
||||||
false,
|
false,
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
|
@ -32,6 +32,7 @@ const setup = async ({ targetAllPlatforms = true }: { targetAllPlatforms?: boole
|
||||||
dockerContextUseLocalArtifact: false,
|
dockerContextUseLocalArtifact: false,
|
||||||
dockerCrossCompile: false,
|
dockerCrossCompile: false,
|
||||||
dockerPush: false,
|
dockerPush: false,
|
||||||
|
dockerTag: '',
|
||||||
dockerTagQualifier: '',
|
dockerTagQualifier: '',
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,6 +21,7 @@ interface Options {
|
||||||
versionQualifier?: string;
|
versionQualifier?: string;
|
||||||
dockerContextUseLocalArtifact: boolean | null;
|
dockerContextUseLocalArtifact: boolean | null;
|
||||||
dockerCrossCompile: boolean;
|
dockerCrossCompile: boolean;
|
||||||
|
dockerTag: string | null;
|
||||||
dockerTagQualifier: string | null;
|
dockerTagQualifier: string | null;
|
||||||
dockerPush: boolean;
|
dockerPush: boolean;
|
||||||
}
|
}
|
||||||
|
@ -32,6 +33,7 @@ export class Config {
|
||||||
versionQualifier,
|
versionQualifier,
|
||||||
dockerContextUseLocalArtifact,
|
dockerContextUseLocalArtifact,
|
||||||
dockerCrossCompile,
|
dockerCrossCompile,
|
||||||
|
dockerTag,
|
||||||
dockerTagQualifier,
|
dockerTagQualifier,
|
||||||
dockerPush,
|
dockerPush,
|
||||||
}: Options) {
|
}: Options) {
|
||||||
|
@ -52,6 +54,7 @@ export class Config {
|
||||||
}),
|
}),
|
||||||
dockerContextUseLocalArtifact,
|
dockerContextUseLocalArtifact,
|
||||||
dockerCrossCompile,
|
dockerCrossCompile,
|
||||||
|
dockerTag,
|
||||||
dockerTagQualifier,
|
dockerTagQualifier,
|
||||||
dockerPush,
|
dockerPush,
|
||||||
isRelease
|
isRelease
|
||||||
|
@ -66,6 +69,7 @@ export class Config {
|
||||||
private readonly versionInfo: VersionInfo,
|
private readonly versionInfo: VersionInfo,
|
||||||
private readonly dockerContextUseLocalArtifact: boolean | null,
|
private readonly dockerContextUseLocalArtifact: boolean | null,
|
||||||
private readonly dockerCrossCompile: boolean,
|
private readonly dockerCrossCompile: boolean,
|
||||||
|
private readonly dockerTag: string | null,
|
||||||
private readonly dockerTagQualifier: string | null,
|
private readonly dockerTagQualifier: string | null,
|
||||||
private readonly dockerPush: boolean,
|
private readonly dockerPush: boolean,
|
||||||
public readonly isRelease: boolean
|
public readonly isRelease: boolean
|
||||||
|
@ -85,6 +89,13 @@ export class Config {
|
||||||
return this.nodeVersion;
|
return this.nodeVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the docker tag qualifier
|
||||||
|
*/
|
||||||
|
getDockerTag() {
|
||||||
|
return this.dockerTag;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the docker tag qualifier
|
* Get the docker tag qualifier
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -49,6 +49,7 @@ const setup = async () => {
|
||||||
dockerContextUseLocalArtifact: false,
|
dockerContextUseLocalArtifact: false,
|
||||||
dockerCrossCompile: false,
|
dockerCrossCompile: false,
|
||||||
dockerPush: false,
|
dockerPush: false,
|
||||||
|
dockerTag: '',
|
||||||
dockerTagQualifier: '',
|
dockerTagQualifier: '',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ async function setup({ failOnUrl }: { failOnUrl?: string } = {}) {
|
||||||
dockerContextUseLocalArtifact: false,
|
dockerContextUseLocalArtifact: false,
|
||||||
dockerCrossCompile: false,
|
dockerCrossCompile: false,
|
||||||
dockerPush: false,
|
dockerPush: false,
|
||||||
|
dockerTag: '',
|
||||||
dockerTagQualifier: '',
|
dockerTagQualifier: '',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@ async function setup() {
|
||||||
dockerContextUseLocalArtifact: false,
|
dockerContextUseLocalArtifact: false,
|
||||||
dockerCrossCompile: false,
|
dockerCrossCompile: false,
|
||||||
dockerPush: false,
|
dockerPush: false,
|
||||||
|
dockerTag: '',
|
||||||
dockerTagQualifier: '',
|
dockerTagQualifier: '',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@ async function setup(actualShaSums?: Record<string, string>) {
|
||||||
dockerContextUseLocalArtifact: false,
|
dockerContextUseLocalArtifact: false,
|
||||||
dockerCrossCompile: false,
|
dockerCrossCompile: false,
|
||||||
dockerPush: false,
|
dockerPush: false,
|
||||||
|
dockerTag: '',
|
||||||
dockerTagQualifier: '',
|
dockerTagQualifier: '',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,7 @@ export async function runDockerGenerator(
|
||||||
];
|
];
|
||||||
|
|
||||||
const dockerPush = config.getDockerPush();
|
const dockerPush = config.getDockerPush();
|
||||||
|
const dockerTag = config.getDockerTag();
|
||||||
const dockerTagQualifier = config.getDockerTagQualfiier();
|
const dockerTagQualifier = config.getDockerTagQualfiier();
|
||||||
const dockerCrossCompile = config.getDockerCrossCompile();
|
const dockerCrossCompile = config.getDockerCrossCompile();
|
||||||
const publicArtifactSubdomain = config.isRelease ? 'artifacts' : 'snapshots-no-kpi';
|
const publicArtifactSubdomain = config.isRelease ? 'artifacts' : 'snapshots-no-kpi';
|
||||||
|
@ -90,6 +91,7 @@ export async function runDockerGenerator(
|
||||||
dockerBuildDir,
|
dockerBuildDir,
|
||||||
dockerTargetFilename,
|
dockerTargetFilename,
|
||||||
dockerPush,
|
dockerPush,
|
||||||
|
dockerTag,
|
||||||
dockerTagQualifier,
|
dockerTagQualifier,
|
||||||
dockerCrossCompile,
|
dockerCrossCompile,
|
||||||
baseImageName,
|
baseImageName,
|
||||||
|
|
|
@ -15,6 +15,7 @@ export interface TemplateContext {
|
||||||
license: string;
|
license: string;
|
||||||
artifactsDir: string;
|
artifactsDir: string;
|
||||||
dockerPush: boolean;
|
dockerPush: boolean;
|
||||||
|
dockerTag: string | null;
|
||||||
dockerTagQualifier: string | null;
|
dockerTagQualifier: string | null;
|
||||||
dockerCrossCompile: boolean;
|
dockerCrossCompile: boolean;
|
||||||
imageTag: string;
|
imageTag: string;
|
||||||
|
|
|
@ -14,6 +14,7 @@ function generator({
|
||||||
imageTag,
|
imageTag,
|
||||||
imageFlavor,
|
imageFlavor,
|
||||||
dockerPush,
|
dockerPush,
|
||||||
|
dockerTag,
|
||||||
dockerTagQualifier,
|
dockerTagQualifier,
|
||||||
dockerCrossCompile,
|
dockerCrossCompile,
|
||||||
version,
|
version,
|
||||||
|
@ -21,9 +22,9 @@ function generator({
|
||||||
baseImageName,
|
baseImageName,
|
||||||
architecture,
|
architecture,
|
||||||
}: TemplateContext) {
|
}: TemplateContext) {
|
||||||
const dockerTargetName = `${imageTag}${imageFlavor}:${version}${
|
const tag =
|
||||||
dockerTagQualifier ? '-' + dockerTagQualifier : ''
|
(dockerTag ? dockerTag : version) + (dockerTagQualifier ? '-' + dockerTagQualifier : '');
|
||||||
}`;
|
const dockerTargetName = `${imageTag}${imageFlavor}:${tag}`;
|
||||||
const dockerArchitecture = architecture === 'aarch64' ? 'linux/arm64' : 'linux/amd64';
|
const dockerArchitecture = architecture === 'aarch64' ? 'linux/arm64' : 'linux/amd64';
|
||||||
const dockerBuild = dockerCrossCompile
|
const dockerBuild = dockerCrossCompile
|
||||||
? `docker buildx build --platform ${dockerArchitecture} -t ${dockerTargetName} -f Dockerfile . || exit 1;`
|
? `docker buildx build --platform ${dockerArchitecture} -t ${dockerTargetName} -f Dockerfile . || exit 1;`
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue