1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2025-09-16 09:26:22 +02:00

Add option to tag artifact version to containerPushToRegistryStep (#2859)

* Add option to tag artifact version to containerPushToRegistryStep

* Update vars/containerPushToRegistry.groovy

Co-authored-by: breuerjo <36748317+breuerjo@users.noreply.github.com>

* commonPipelineEnvironment instead of globalPipelineEnvironment

Co-authored-by: breuerjo <36748317+breuerjo@users.noreply.github.com>
Co-authored-by: Oliver Nocon <33484802+OliverNocon@users.noreply.github.com>
This commit is contained in:
Hans Schulz
2021-06-28 08:02:06 +02:00
committed by GitHub
parent b5357f9437
commit d2f75044d0
3 changed files with 94 additions and 2 deletions

View File

@@ -28,7 +28,7 @@ containerPushToRegistry script: this,
dockerRegistryUrl: 'https://my.target.docker.registry:50000'
```
**OPTION B:** To push a locally build docker image into the target registry (only possible when a Docker deamon is available on your Jenkins node):
**OPTION B:** To push a locally built docker image into the target registry (only possible when a Docker daemon is available on your Jenkins node):
```groovy
containerPushToRegistry script: this,

View File

@@ -161,7 +161,48 @@ class ContainerPushToRegistryTest extends BasePiperTest {
assertThat(dockerMockPushes, hasItem('latest'))
}
@Test
void testBuildImagePushArtifactVersion() throws Exception {
nullScript.commonPipelineEnvironment.setArtifactVersion('1.0.0')
def dockerBuildImage = new ContainerImageMock()
stepRule.step.containerPushToRegistry(
script: nullScript,
dockerRegistryUrl: 'https://testRegistry',
dockerCredentialsId: 'testCredentialsId',
dockerBuildImage: dockerBuildImage,
tagArtifactVersion: true
)
assertThat(dockerMock.targetRegistry.url, is('https://testRegistry'))
assertThat(dockerMock.targetRegistry.credentials, is('testCredentialsId'))
assertThat(dockerMock.sourceRegistry, is (null))
assertThat(dockerMock.image, is('test'))
assertThat(dockerMockPushes, hasItem('default'))
assertThat(dockerMockPushes, not(hasItem('latest')))
assertThat(dockerMockPushes, hasItem('1.0.0'))
}
@Test
void testBuildImagePushLatestAndArtifactVersion() throws Exception {
nullScript.commonPipelineEnvironment.setArtifactVersion('1.0.0')
def dockerBuildImage = new ContainerImageMock()
stepRule.step.containerPushToRegistry(
script: nullScript,
dockerRegistryUrl: 'https://testRegistry',
dockerCredentialsId: 'testCredentialsId',
dockerBuildImage: dockerBuildImage,
tagArtifactVersion: true,
tagLatest: true
)
assertThat(dockerMock.targetRegistry.url, is('https://testRegistry'))
assertThat(dockerMock.targetRegistry.credentials, is('testCredentialsId'))
assertThat(dockerMock.sourceRegistry, is (null))
assertThat(dockerMock.image, is('test'))
assertThat(dockerMockPushes, hasItem('default'))
assertThat(dockerMockPushes, hasItem('latest'))
assertThat(dockerMockPushes, hasItem('1.0.0'))
}
@Test
void testFromEnv() {
@@ -278,6 +319,48 @@ class ContainerPushToRegistryTest extends BasePiperTest {
assertThat(shellCallRule.shell, hasItem('skopeo copy --src-tls-verify=false --dest-tls-verify=false --dest-creds=\'registryUser\':\'********\' docker://my.source.registry:44444/sourceImage:sourceTag docker://my.registry:55555/testImage:latest'))
}
@Test
void testKubernetesMoveTagArtifactVersion() {
nullScript.commonPipelineEnvironment.setArtifactVersion('1.0.0')
binding.setVariable('docker', null)
shellCallRule.setReturnValue('docker ps -q > /dev/null', 1)
stepRule.step.containerPushToRegistry(
script: nullScript,
dockerCredentialsId: 'testCredentialsId',
dockerImage: 'testImage:tag',
dockerRegistryUrl: 'https://my.registry:55555',
sourceImage: 'sourceImage:sourceTag',
sourceRegistryUrl: 'https://my.source.registry:44444',
tagArtifactVersion: true
)
assertThat(shellCallRule.shell, hasItem('skopeo copy --src-tls-verify=false --dest-tls-verify=false --dest-creds=\'registryUser\':\'********\' docker://my.source.registry:44444/sourceImage:sourceTag docker://my.registry:55555/testImage:tag'))
assertThat(shellCallRule.shell, hasItem('skopeo copy --src-tls-verify=false --dest-tls-verify=false --dest-creds=\'registryUser\':\'********\' docker://my.source.registry:44444/sourceImage:sourceTag docker://my.registry:55555/testImage:1.0.0'))
}
@Test
void testKubernetesMoveTagLatestAndArtifactVersion() {
nullScript.commonPipelineEnvironment.setArtifactVersion('1.0.0')
binding.setVariable('docker', null)
shellCallRule.setReturnValue('docker ps -q > /dev/null', 1)
stepRule.step.containerPushToRegistry(
script: nullScript,
dockerCredentialsId: 'testCredentialsId',
dockerImage: 'testImage:tag',
dockerRegistryUrl: 'https://my.registry:55555',
sourceImage: 'sourceImage:sourceTag',
sourceRegistryUrl: 'https://my.source.registry:44444',
tagLatest: true,
tagArtifactVersion: true
)
assertThat(shellCallRule.shell, hasItem('skopeo copy --src-tls-verify=false --dest-tls-verify=false --dest-creds=\'registryUser\':\'********\' docker://my.source.registry:44444/sourceImage:sourceTag docker://my.registry:55555/testImage:tag'))
assertThat(shellCallRule.shell, hasItem('skopeo copy --src-tls-verify=false --dest-tls-verify=false --dest-creds=\'registryUser\':\'********\' docker://my.source.registry:44444/sourceImage:sourceTag docker://my.registry:55555/testImage:latest'))
assertThat(shellCallRule.shell, hasItem('skopeo copy --src-tls-verify=false --dest-tls-verify=false --dest-creds=\'registryUser\':\'********\' docker://my.source.registry:44444/sourceImage:sourceTag docker://my.registry:55555/testImage:1.0.0'))
}
@Test
void testKubernetesSourceOnly() {
binding.setVariable('docker', null)

View File

@@ -41,7 +41,9 @@ import static com.sap.piper.Prerequisites.checkScript
/** Defines the id of the Jenkins username/password credentials containing the credentials for the source Docker registry. */
'sourceCredentialsId',
/** Defines if the image should be tagged as `latest`*/
'tagLatest'
'tagLatest',
/** Defines if the image should be tagged with the artifact version */
'tagArtifactVersion'
])
@Field Set PARAMETER_KEYS = STEP_CONFIG_KEYS
@@ -68,6 +70,7 @@ void call(Map parameters = [:]) {
.mixin(parameters, PARAMETER_KEYS)
.addIfEmpty('sourceImage', script.commonPipelineEnvironment.getValue('containerImage'))
.addIfEmpty('sourceRegistryUrl', script.commonPipelineEnvironment.getValue('containerRegistryUrl'))
.mixin(artifactVersion: script.commonPipelineEnvironment.getArtifactVersion())
.withMandatoryProperty('dockerCredentialsId')
.withMandatoryProperty('dockerRegistryUrl')
.use()
@@ -113,6 +116,8 @@ void call(Map parameters = [:]) {
config.dockerBuildImage.push()
if (config.tagLatest)
config.dockerBuildImage.push('latest')
if (config.tagArtifactVersion )
config.dockerBuildImage.push(config.artifactVersion)
}
} else {
//handling for Kubernetes case
@@ -127,6 +132,10 @@ void call(Map parameters = [:]) {
def latestImage = "${config.dockerImage.split(':')[0]}:latest"
dockerUtils.moveImage([image: config.sourceImage, registryUrl: config.sourceRegistryUrl], [image: latestImage, registryUrl: config.dockerRegistryUrl, credentialsId: config.dockerCredentialsId])
}
if (config.tagArtifactVersion) {
def imageName = "${config.dockerImage.split(':')[0]}:${config.artifactVersion}"
dockerUtils.moveImage([image: config.sourceImage, registryUrl: config.sourceRegistryUrl], [image: imageName, registryUrl: config.dockerRegistryUrl, credentialsId: config.dockerCredentialsId])
}
} else {
error "[${STEP_NAME}] Running on Kubernetes: Only moving images from one registry to another supported."
}