如何在AWS CodeBuild中运行我的jenkins管道代码?

时间:2018-04-25 17:15:24

标签: amazon-web-services aws-codebuild

我可以从jenkins触发我的AWS管道,但我不想创建buildspec.yaml,而是使用已经适用于jenkins的管道脚本。

3 个答案:

答案 0 :(得分:1)

为了使用Codebuild,您需要为Codebuild项目提供buildspec.yaml文件以及源代码,或将命令合并到实际项目中。

但是,我认为您有兴趣在Jenkins管道中创建buildspec.yaml文件。

下面是Jenkinsfile中一个阶段的片段,它创建一个构建规范文件,用于构建docker镜像,然后将工作区的内容发送到codebuild项目。这使用Codebuild的插件。

stage('Build - Non Prod'){

    String nonProductionBuildSpec = """
version: 0.1

phases:
  pre_build:
    commands:
      - \$(aws ecr get-login --registry-ids <number> --region us-east-1)
  build:
    commands:
      - docker build -t ces-sample-docker .
      - docker tag $NAME:$TAG <account-number>.dkr.ecr.us-east-1.amazonaws.com/$NAME:$TAG
  post_build:
    commands:
      - docker push <account-number>.dkr.ecr.us-east-1.amazonaws.com/$NAME:$TAG
""".replace("\t","    ")
    writeFile file: 'buildspec.yml', text: nonProductionBuildSpec

    //Send checked out files to AWS
    awsCodeBuild projectName: "<codebuild-projectname>",region: "us-east-1", sourceControlType: "jenkins"

}

我希望这会让你知道什么是可能的。

祝你好运! 帕特里克

答案 1 :(得分:0)

您需要为希望AWS CodeBuild运行的命令编写一个buildspec。如果你使用Jenkins的CodeBuild插件,可以将它添加到Jenkins管道中,并使用CodeBuild作为Jenkins构建从属来执行buildspec中的命令。

在此处查看更多详情:https://docs.aws.amazon.com/codebuild/latest/userguide/jenkins-plugin.html

答案 2 :(得分:0)

@hynespm-出色的榜样伴侣。

这是另一个基于您的人,但是具有stripIndent()和“ withAWS”来切换角色:

#!/usr/bin/env groovy

def cbResult = null

pipeline {
.
.
.
                script {
                        echo ("app_version TestwithAWS value : " + "${app_version}")

                        String buildspec = """\
                        version: 0.2
                        env:
                            parameter-store:
                                TOKEN: /some/token
                        phases:
                            pre_build:
                                commands:
                                - echo "List files...."
                                - ls -l
                                - echo "TOKEN is ':' \${TOKEN}"
                            build:
                                commands:
                                - echo "build':' Do something here..."
                                - echo "\${CODEBUILD_SRC_DIR}"
                                - ls -l "\${CODEBUILD_SRC_DIR}"
                            post_build:
                                commands:
                                - pwd
                                - echo "postbuild':' Done..."
                        """.stripIndent()

                        withAWS(region: 'ap-southeast-2', role: 'CodeBuildWithJenkinsRole', roleAccount: '123456789123', externalId: '123456-2c1a-4367-aa09-7654321') {
                            sh 'aws ssm get-parameter --name "/some/token"'
                            try {
                            cbResult = awsCodeBuild projectName: 'project-lambda',
                                sourceControlType: 'project',
                                credentialsType: 'keys',
                                awsAccessKey: env.AWS_ACCESS_KEY_ID,
                                awsSecretKey: env.AWS_SECRET_ACCESS_KEY,
                                awsSessionToken: env.AWS_SESSION_TOKEN,
                                region: 'ap-southeast-2',
                                envVariables: '[ { GITHUB_OWNER, special }, { GITHUB_REPO, project-lambda } ]',
                                artifactTypeOverride: 'S3', 
                                artifactLocationOverride: 'special-artifacts',
                                overrideArtifactName: 'True',
                                buildSpecFile: buildspec
                            } catch (Exception cbEx) {
                                cbResult = cbEx.getCodeBuildResult()
                            }
                        }
                } //script

.
.
.
}