从 jenkins 部署 Maven 到 s3 bucket

Deploy Maven to s3 bucket from jenkins

我对 CI/CD 实现完全陌生。我正在尝试创建一个将我的 jar 打包并部署到 s3 存储桶的管道。

请注意: 在 aws 控制台中,我创建的 IAM 用户具有对 s3 的完全访问权限,并且策略模拟器运行良好。 我已经在 jenkins 中创建了我的 s3 配置文件并且 "test connection" 运行良好。

“向 aws 发布”阶段失败,出现以下情况。任何人都可以在这里指导我。无法看到我缺少的内容。

Downloading from s3.artifacts.snapshot: s3://panda.bucket.net/snapshot/com/panda/panda-app/1.0- 
SNAPSHOT/maven-metadata.xml
[WARNING] s3://panda.bucket.net/snapshot - Connection refused
[WARNING] Could not transfer metadata com.panda:panda-app:1.0-SNAPSHOT/maven-metadata.xml from/to 
s3.artifacts.snapshot (s3://panda.bucket.net/snapshot): Could not connect to repository
[INFO] Logged off - panda.bucket.net
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE

我的詹金斯文件:

pipeline {
agent any
tools {
    maven 'maven'
    jdk 'jdk1.8'
}
stages {
    stage('SCM') {
                steps {
                    git 'https://username:password@gitlab.com/my-repo/panda-app'
                }
     }
    stage('Build') {
        steps {
            bat 'mvn clean compile'
        }
    }
    stage('Release to aws') {
        steps {
            bat 'mvn deploy'
        }
     }
   }}

我在 pom 中的构建和分发配置:

<properties>
    <java.version>1.8</java.version>
    <artifactrepo.url>panda.bucket.net</artifactrepo.url>
</properties>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
    <extensions>
        <extension>
            <groupId>com.allogy.maven.wagon</groupId>
            <artifactId>maven-s3-wagon</artifactId>
            <version>1.2.0</version>
        </extension>
    </extensions>
</build>
<distributionManagement>
    <repository>
        <id>s3.artifacts.release</id>
        <url>s3://${artifactrepo.url}/release</url>
    </repository>
    <snapshotRepository>
        <id>s3.artifacts.snapshot</id>
        <url>s3://${artifactrepo.url}/snapshot</url>
    </snapshotRepository>
    </distributionManagement>

Settings.xml

<settings>
<server>
  <id>s3.artifacts.release</id>
  <username>MY_ACCESS_KEY</username>
  <password>MY_SECRET</password>
  <filePermissions>AuthenticatedRead</filePermissions>
</server>
<server>
  <id>s3.artifacts.snapshot</id>
  <username>MY_ACCESS_KEY</username>
  <password>MY_SECRET</password>
  <filePermissions>AuthenticatedRead</filePermissions>
</server>

你真的需要在maven中部署到S3吗?如果您可以选择 Jenkins 管道,那么在 Jenkins 管道上执行此操作会更简单。

您需要 AWS steps plugin.

pipeline {
agent any
tools {
    maven 'maven'
    jdk 'jdk1.8'
}
stages {
    stage('SCM') {
                steps {
                    git 'https://username:password@gitlab.com/my-repo/panda-app'
                }
     }
    stage('Build') {
        steps {
            bat 'mvn clean compile' //maybe package goal to leave the artifact ready to be released
        }
    }
    stage('Release to aws') {
        steps {
            withAWS(region:'yourS3Region', credentials:'awscredentialsID'){
                s3Upload(bucket:"yourBucketName", workingDir:'target', includePathPattern:'**/*'); // pick your jar or whatever you need
            }
        }
     }
   }}