Edited at

俺でも泣いたAWS CodePipeline未対応なSCMを使っちゃってるので俺ージドにJenkinsからAWS CodeBuildを蹴り倒すためのtips

俺です。

GitなどのSCMつかうのが呼吸なワケですが、

AWS CodePipelineやAWS CodeBuildのSourceが未対応だったときってあるじゃないですか。

例えばBacklogのGitとか。

source未対応だった衝撃をうけて、現世からいなくなりたいと思う気持ちを抑えて

以下のようにJenkinsに寄せた俺の記録を残します。


  • CodePipelineを捨てる

  • Jenkins Pipelineに寄せる

  • JenkinsにAWS CodeBuild Pluginを導入して蹴る

なお、すでにCode3兄弟がsourceとして対応してるSCMを使えてる人は帰ってどうぞ。

当初 @inokappaエントリ を実装して幸せ一直線なんじゃないかとおもうてましたがRepositoryがLambdaの一時ストレージサイズ超えたらどうすんべとなり諦めました。悲しい


構成

non-supported-scm.png


IAM Policy

Jenkins用EC2に適用するIAM RoleのPolicyをドキュメント参照して作ります。


Jenkinsfile

GUIでポチポチするのはしんどいのでPipelineジョブを使います。

便利ですねーJenkinsfile.appspec書くより楽かも..と思ってしまった俺達はJenkins初老丸の仲間入りです。

具体的なJenkinsfileの書き方はこちら参照してください。

pipeline {

agent any
parameters {
string(name: 'SyncTargetS3', defaultValue: 'orenosaikoubucket', description: 'codebuild source s3 bucket')
}
stages {
/*
// Pipeline from SCMしない場合は以下なかんじでgit cloneするstepを作る
stage('git clone') {
steps {
git(
url: "${params.GitURL}",
credentialsId: '<Jenkinsで作ったCredentialsID>',
branch: "${params.GitBranch}"
)
}
}
*/
stage('zip archive ${env.WORKSPACE} to /tmp/${env.WORKSPACE}.zip') {
steps {
sh("cd ../ && zip -r /tmp/${env.JOB_NAME}.zip ${env.JOB_NAME} -x *.git*")
}
}
stage('aws s3 cp') {
steps {
sh("aws s3 cp /tmp/${env.JOB_NAME}.zip s3://${params.SyncTargetS3}")
sh("aws s3 ls s3://${params.SyncTargetS3}/")
sh("rm -f /tmp/${env.JOB_NAME}.zip")
echo "done"
}
}
stage('start AWS CodeBuild'){
steps {
awsCodeBuild(
projectName: 'sandbox',
region: 'ap-northeast-1',
credentialsType: 'keys', // Jenkins用EC2でIAM InstanceProfileを呼ぶ場合はこのパラメータをkeysとして、credentialsとsecret_keyは設定しないこと
sourceControlType: 'jenkins'
)
}
}
}
}

良いJenkins Pipelineライフを!!!!!!