こんにちは、ちゃりおです。
CloudformationからCodepipelineを作る際に、github organizationユーザでWebhookを作れなくてハマりました。
事象と解決策についてメモします。
結論から書くと以下です。
- Githubでトークンを発行したユーザに該当リポジトリのAdmin権限を付与する
- OwnerにはOrganization名を指定する(orgname/reponameのOrgnameの部分)
事象
Cloudformation
Codepipelineのトリガーとして、githubのwebhookを使います。
下記はWebhookの定義のCloudformationです。
githubの個人アカウントで下記の記述が含まれたCloudformationテンプレートを実行したら成功しました。
AppPipelineWebhook:
Type: AWS::CodePipeline::Webhook
Properties:
Authentication: GITHUB_HMAC
AuthenticationConfiguration:
SecretToken: !Ref GitHubWebhookSecret
Filters:
- JsonPath: !Ref GitHubWebhookJsonPath
MatchEquals: !Ref GitHubWebhookMatchEquals
TargetPipeline: !Ref AppPipeline
TargetAction: SourceAction
Name: Test-Webhook
TargetPipelineVersion: !GetAtt AppPipeline.Version
RegisterWithThirdParty: true
## ~~抜粋~~
AppPipeline:
Type: AWS::CodePipeline::Pipeline
Properties:
Name: !Ref Name
RoleArn: !GetAtt CodePipelineServiceRole.Arn
ArtifactStore:
Type: S3
Location: !Ref ArtifactBucketName
Stages:
- Name: Source
Actions:
- Name: SourceAction
ActionTypeId:
Category: Source
Owner: ThirdParty
Version: "1"
Provider: GitHub
Configuration:
Owner: !Ref GitHubOwner
Repo: !Ref RepositoryName
Branch: !Ref BranchName
OAuthToken: !Ref GitHubOAuthToken
PollForSourceChanges: false
## ~~抜粋~~
エラーメッセージ
しかし、Organizationユーザ(Orgname/repo)で実行した場合、下記のエラーが出ます。
Webhook could not be registered with GitHub. Error cause: Not found [StatusCode: 404, Body: {“message”:”Not Found”,”documentation_url”:”https://developer.github.com/v3/repos/hooks/#create-a-hook”}] (Service: AWSCodePipeline; Status Code: 400; Error Code: ValidationException; Request ID: e6755c89-9698-478b-a434-d80763f37e95)
解決策
Githubでトークンを発行したユーザに該当リポジトリのAdmin権限を付与する
Admin権限がないと、Webhookを発行できないようでした。
Tokenを発行したユーザにAdmin権限を付与します。
OwnerにはOrganization名を指定する
CodepipelineのConfigurationのところ下記のようにしていました。
同じように、Organizationユーザのリポジトリでやっていたのですがエラーが出ていました。
(Parameterで渡していました)
Configuration:
Owner: usename
Repo: orgname/reponame
下記のように変更したら上手くいきました。
上の例だと、リポジトリ名が「username/orgname/reponame」になってしまうようです。
Configuration:
Owner: orgname
Repo: reponame
[Stack Overflow]AWS Codepipeline Github Webhook not being registered through cloudformation
まとめ
CloudformationからCodepipelineのWebhook作れなくてハマった件でした。
Githubのユーザについてのいい勉強になりました。
似たような問題で困っている方の、参考になればと思います