Как добавить метку времени для артефактов в Jenkins - PullRequest
0 голосов
/ 13 сентября 2018

Я подписан на Jenkisfile и пытаюсь загрузить артефакты с отметкой времени.

import groovy.transform.Field
@Field def timeStamp = Calendar.getInstance().getTime().format('YYYYMMdd-hhmmss',TimeZone.getTimeZone('CST'))

node {
stage('Creating some artifacts') {
    sh 'touch hello.txt hi.txt'
}

stage('Uploading artifacts') {
    def server = Artifactory.server ('art-1')
    def uploadSpec = """{
        "files": [
        {
        "pattern": "*.txt",
        "target": "repo1/Dev/${env.BUILD_NUMBER}/*.txt.${timeStamp}"
         }
  ]
    }"""
            def buildInfo1 = server.upload(uploadSpec)
            server.publishBuildInfo(buildInfo1)
  }
}

Тем не менее, я получаю следующую ошибку при попытке этого.

[consumer_1] Deploying artifact: http://learner.blr.example.com:8081/artifactory/repo1/Dev/12/*.txt.20180913-044451
[Thread consumer_1] An exception occurred during execution:
java.lang.RuntimeException: java.io.IOException: Failed to deploy file. Status code: 500 Response message: Artifactory returned the following errors: 
Invalid path. '*' is not a valid name character: repo1/Dev/12/*.txt.20180913-044451 Status code: 500
    at org.jfrog.build.extractor.clientConfiguration.util.spec.SpecDeploymentConsumer.consumerRun(SpecDeploymentConsumer.java:44)
    at org.jfrog.build.extractor.producerConsumer.ConsumerRunnableBase.run(ConsumerRunnableBase.java:11)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Failed to deploy file. Status code: 500 Response message: Artifactory returned the following errors: 
Invalid path. '*' is not a valid name character: repo1/Dev/12/*.txt.20180913-044451 Status code: 500
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.uploadFile(ArtifactoryBuildInfoClient.java:692)
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.doDeployArtifact(ArtifactoryBuildInfoClient.java:374)
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.deployArtifact(ArtifactoryBuildInfoClient.java:362)
    at org.jfrog.build.extractor.clientConfiguration.util.spec.SpecDeploymentConsumer.consumerRun(SpecDeploymentConsumer.java:39)
    ... 2 more

[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
java.lang.Exception: Error occurred during operation, please refer to logs for more information.
    at org.jfrog.build.extractor.producerConsumer.ProducerConsumerExecutor.start(ProducerConsumerExecutor.java:84)
    at org.jfrog.build.extractor.clientConfiguration.util.spec.SpecsHelper.uploadArtifactsBySpec(SpecsHelper.java:71)
    at org.jfrog.hudson.generic.GenericArtifactsDeployer$FilesDeployerCallable.invoke(GenericArtifactsDeployer.java:190)
Caused: java.lang.RuntimeException: Failed uploading artifacts by spec
    at org.jfrog.hudson.generic.GenericArtifactsDeployer$FilesDeployerCallable.invoke(GenericArtifactsDeployer.java:194)
    at org.jfrog.hudson.generic.GenericArtifactsDeployer$FilesDeployerCallable.invoke(GenericArtifactsDeployer.java:131)
    at hudson.FilePath.act(FilePath.java:1042)
    at hudson.FilePath.act(FilePath.java:1025)
    at org.jfrog.hudson.pipeline.executors.GenericUploadExecutor.execution(GenericUploadExecutor.java:52)
    at org.jfrog.hudson.pipeline.steps.UploadStep$Execution.run(UploadStep.java:65)
    at org.jfrog.hudson.pipeline.steps.UploadStep$Execution.run(UploadStep.java:46)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
    at hudson.security.ACL.impersonate(ACL.java:290)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Finished: FAILURE

Есть ли альтернативный / простой способ добавить метку времени в артефактах в Jenkins?

П.С .: Я новичок в классных скриптах Jenkins и JFrog

1 Ответ

0 голосов
/ 13 сентября 2018

В сообщении об ошибке говорится, что * является недопустимым символом для имени файла, поэтому я не думаю, что вы можете использовать его в целевом поле. Тем не менее, артефактные документы говорят, что вы можете сделать это вместо этого (ссылки на документы ниже):

def uploadSpec = """{
    "files": [
        {
             "pattern": "(*).txt",
             "target": "repo1/Dev/${env.BUILD_NUMBER}/{1}.txt.${timeStamp}"
        }
    ]

В этом коде {1} означает «все, что было найдено внутри первой круглой скобки в pattern» (каждая открывающая / закрывающая скобка в регулярном выражении определяет группу захвата ).

Примечание: я не использую артефакт, поэтому я не тестировал приведенный выше код, я выхожу из документации по артефакту: https://www.jfrog.com/confluence/display/RTF/Using+File+Specs https://www.jfrog.com/confluence/display/RTF/Using+File+Specs#UsingFileSpecs-UsingPlaceholders

Я бы также предложил вам переместить метку времени к имени файла, а не к расширению файла, чтобы при загрузке файла ваш компьютер знал, какую программу использовать для его открытия. Поэтому я бы поменял цель на что-то вроде:

  • файлы закорочены сначала по имени, а затем по метке времени: repo1/Dev/${env.BUILD_NUMBER}/{1}-${timeStamp}.txt
  • файлы сначала записываются по метке времени, а затем по имени: repo1/Dev/${env.BUILD_NUMBER}/${timeStamp}-{1}.txt
...