使用 JFrog Artifactory 进行云构建

Cloud build with JFrog Artifactory

我正在使用 google 云构建来构建我的 Maven 项目,我使用 JFrog antifactory 注册表来存储 Maven 工件。在云构建中需要这些工件。我尝试了几个文档 [1]、[2]。但有时它会给出很多错误。我可以采取适当的最新更新指南来集成云构建和 JFrog antifactory 吗?正确的身份验证方法需要使用用户名密码以外的其他方式。 API可以使用按键方式

[1]。 https://github.com/GoogleCloudPlatform/cloud-builders-community/tree/master/jfrog

[2]。 https://cloud.google.com/blog/products/application-development/integrating-google-cloud-build-with-jfrog-artifactory

编辑 1

我把M2_HOME设为MAVEN_HOME。然后那个问题就解决了。但是新错误给出为 Unsupported major.minor version 52.0。这是 java 版本不匹配的常见问题。

错误信息:

Step #1: [Info] Running Mvn...
Step #1: [Info] The build-info-extractor jar is not cached locally. Downloading it now...
Step #1: You can set the repository from which this jar is downloaded. Read more about it at https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory#CLIforJFrogArtifactory-DownloadingtheMavenandGradleExtractorJARs
Step #1: [Info] Downloading build-info-extractor from https://oss.jfrog.org/artifactory/oss-release-local/org/jfrog/buildinfo/build-info-extractor-maven3/2.26.1/build-info-extractor-maven3-2.26.1-uber.jar
Step #1: [main] WARN Sisu - Error injecting: org.jfrog.build.extractor.maven.DependencyResolutionSpy
Step #1: java.lang.TypeNotPresentException: Type org.jfrog.build.extractor.maven.DependencyResolutionSpy not present
Step #1: at org.eclipse.sisu.space.URLClassSpace.loadClass(URLClassSpace.java:115)
Step #1: at org.eclipse.sisu.space.NamedClass.load(NamedClass.java:46)
Step #1: at org.eclipse.sisu.space.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
Step #1: at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:86)
Step #1: at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:54)
Step #1: at com.google.inject.internal.ProviderInternalFactory.call(ProviderInternalFactory.java:70)
Step #1: at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:113)
Step #1: at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:129)
Step #1: at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68)
Step #1: at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:68)
Step #1: at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:46)
Step #1: at com.google.inject.internal.ProviderToInternalFactoryAdapter.call(ProviderToInternalFactoryAdapter.java:46)
Step #1: at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1066)
Step #1: at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
Step #1: at com.google.inject.Scopes.get(Scopes.java:59)
Step #1: at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
Step #1: at com.google.inject.internal.InjectorImpl.call(InjectorImpl.java:1009)
Step #1: at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1066)
Step #1: at com.google.inject.internal.InjectorImpl.get(InjectorImpl.java:1005)
Step #1: at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:82)
Step #1: at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51)
Step #1: at org.eclipse.sisu.wire.EntryListAdapter$ValueIterator.next(EntryListAdapter.java:111)
Step #1: at java.util.AbstractCollection.toArray(AbstractCollection.java:141)
Step #1: at java.util.ArrayList.(ArrayList.java:164)
Step #1: at org.apache.maven.eventspy.internal.EventSpyDispatcher.setEventSpies(EventSpyDispatcher.java:49)
Step #1: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Step #1: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
Step #1: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Step #1: at java.lang.reflect.Method.invoke(Method.java:606)
Step #1: at org.eclipse.sisu.bean.BeanPropertySetter.set(BeanPropertySetter.java:76)
Step #1: at org.eclipse.sisu.plexus.ProvidedPropertyBinding.injectProperty(ProvidedPropertyBinding.java:48)
Step #1: at org.eclipse.sisu.bean.BeanInjector.injectMembers(BeanInjector.java:52)
Step #1: at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:140)
Step #1: at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:117)
Step #1: at com.google.inject.internal.ConstructorInjector.access[=10=]0(ConstructorInjector.java:32)
Step #1: at com.google.inject.internal.ConstructorInjector.call(ConstructorInjector.java:92)
Step #1: at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:113)
Step #1: at org.eclipse.sisu.bean.BeanScheduler$Activator.onProvision(BeanScheduler.java:176)
Step #1: at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:122)
Step #1: at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68)
Step #1: at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:90)
Step #1: at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:269)
Step #1: at com.google.inject.internal.ProviderToInternalFactoryAdapter.call(ProviderToInternalFactoryAdapter.java:46)
Step #1: at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1066)
Step #1: at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
Step #1: at com.google.inject.Scopes.get(Scopes.java:59)
Step #1: at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
Step #1: at com.google.inject.internal.InjectorImpl.call(InjectorImpl.java:1009)
Step #1: at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1059)
Step #1: at com.google.inject.internal.InjectorImpl.get(InjectorImpl.java:1005)
Step #1: at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:82)
Step #1: at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51)
Step #1: at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:263)
Step #1: at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:255)
Step #1: at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:249)
Step #1: at org.apache.maven.cli.MavenCli.container(MavenCli.java:419)
Step #1: at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:210)
Step #1: at org.apache.maven.cli.MavenCli.main(MavenCli.java:160)
Step #1: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Step #1: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
Step #1: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Step #1: at java.lang.reflect.Method.invoke(Method.java:606)
Step #1: at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
Step #1: at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
Step #1: at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
Step #1: at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Step #1: Caused by: java.lang.UnsupportedClassVersionError: org/jfrog/build/extractor/maven/DependencyResolutionSpy : Unsupported major.minor version 52.0
Step #1: at java.lang.ClassLoader.defineClass1(Native Method)
Step #1: at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
Step #1: at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
Step #1: at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
Step #1: at java.net.URLClassLoader.access0(URLClassLoader.java:71)
Step #1: at java.net.URLClassLoader.run(URLClassLoader.java:361)
Step #1: at java.net.URLClassLoader.run(URLClassLoader.java:355)
Step #1: at java.security.AccessController.doPrivileged(Native Method)
Step #1: at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
Step #1: at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:401)
Step #1: at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)
Step #1: at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
Step #1: at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
Step #1: at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
Step #1: at org.eclipse.sisu.space.URLClassSpace.loadClass(URLClassSpace.java:107)
Step #1: ... 65 more
Step #1: [main] ERROR org.apache.maven.cli.MavenCli - Error executing Maven.
Step #1: [main] ERROR org.apache.maven.cli.MavenCli - com.google.inject.ProvisionException: Unable to provision, see the following errors:
Step #1:
Step #1: 1) Error injecting: public void org.apache.maven.eventspy.internal.EventSpyDispatcher.setEventSpies(java.util.List)
Step #1: at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
Step #1: while locating org.apache.maven.eventspy.internal.EventSpyDispatcher
Step #1:
Step #1: 1 error
Step #1: role: org.apache.maven.eventspy.internal.EventSpyDispatcher
Step #1: roleHint:
Step #1: [main] ERROR org.apache.maven.cli.MavenCli - Caused by: Unable to provision, see the following errors:
Step #1:
Step #1: 1) Error injecting: public void org.apache.maven.eventspy.internal.EventSpyDispatcher.setEventSpies(java.util.List)
Step #1: at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
Step #1: while locating org.apache.maven.eventspy.internal.EventSpyDispatcher
Step #1:
Step #1: 1 error
Step #1: [main] ERROR org.apache.maven.cli.MavenCli - Caused by: Unable to provision, see the following errors:
Step #1:
Step #1: 1) Error in custom provider, java.lang.TypeNotPresentException: Type org.jfrog.build.extractor.maven.DependencyResolutionSpy not present
Step #1: at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
Step #1: at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
Step #1: while locating org.apache.maven.eventspy.EventSpy
Step #1:
Step #1: 1 error
Step #1: [main] ERROR org.apache.maven.cli.MavenCli - Caused by: Type org.jfrog.build.extractor.maven.DependencyResolutionSpy not present
Step #1: [main] ERROR org.apache.maven.cli.MavenCli - Caused by: org/jfrog/build/extractor/maven/DependencyResolutionSpy : Unsupported major.minor version 52.0
Step #1: [Error] exit status 1

但是我的

项目java版本:1.8

Maven 版本:3.5.0

Maven docker 图片:gcr.io/cloud-builders/mvn:3.5.0-jdk-8

JFrog CLI 版本:1.48.0

此错误是由于 https://oss.jfrog.org/artifactory/oss-release-local/org/jfrog/buildinfo/build-info-extractor-maven3/2.26.1/build-info-extractor-maven3-2.26.1-uber.jar 还是任何其他原因造成的?

如何解决这个问题?

我使用 maven 设置 xml 文件解决了这个问题。我按照以下步骤操作。

  1. 在根目录创建maven settings.xml。

     <servers>
         <server>
             <id>repo</id>
             <username>${server.username}</username>
             <password>${server.password}</password>
         </server>
     </servers>
    
  2. 在 google 云中创建密钥环和密钥。

    gcloud kms keyrings create [KEYRING-NAME] --location=global

    gcloud kms keys create [KEY-NAME] --location=global --keyring=[KEYRING-NAME] --purpose=encryption

  3. 使用上面的密钥环和密钥加密 JFrog 用户名和密码

    USERNAME=aaa

    echo $USERNAME | gcloud kms encrypt --plaintext-file=- --ciphertext-file=- --location=global --keyring=[KEYRING-NAME] --key=[KEY-NAME] | base64

  4. 创建云构建文件来构建maven

    steps:
    - name: 'gcr.io/cloud-builders/mvn:3.5.0-jdk-8'
      entrypoint: 'bash'
      args: ['-c', 'mvn clean package -DskipTests=true -Dserver.username=$$USERNAME -Dserver.password=$$PASSWORD -s settings.xml -q']
      secretEnv: ['USERNAME', 'PASSWORD']
    
    secrets:
    - kmsKeyName: projects/[PROJECT]/locations/global/keyRings/jfrog/cryptoKeys/jfrog
      secretEnv:
        USERNAME: [ENCRYPTED-USERNAME]
    
        PASSWORD: [ENCRYPTED-PASSWORD]