俺です。
GitなどのSCMつかうのが呼吸なワケですが、
AWS CodePipelineやAWS CodeBuildのSourceが未対応だったときってあるじゃないですか。
例えばBacklogのGitとか。
source未対応だった衝撃をうけて、現世からいなくなりたいと思う気持ちを抑えて
以下のようにJenkinsに寄せた俺の記録を残します。
- CodePipelineを捨てる
- Jenkins Pipelineに寄せる
- JenkinsにAWS CodeBuild Pluginを導入して蹴る
なお、すでにCode3兄弟がsourceとして対応してるSCMを使えてる人は帰ってどうぞ。
当初 @inokappa の エントリ を実装して幸せ一直線なんじゃないかとおもうてましたがRepositoryがLambdaの一時ストレージサイズ超えたらどうすんべとなり諦めました。悲しい
構成
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ライフを!!!!!!