View a markdown version of this page

Migrasikan pipeline polling untuk menggunakan deteksi perubahan berbasis peristiwa - AWS CodePipeline

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Migrasikan pipeline polling untuk menggunakan deteksi perubahan berbasis peristiwa

AWS CodePipeline mendukung pengiriman berkelanjutan penuh ujung ke ujung, yang mencakup memulai pipeline Anda setiap kali ada perubahan kode. Ada dua cara yang didukung untuk memulai pipeline Anda setelah perubahan kode: deteksi perubahan berbasis peristiwa dan polling. Sebaiknya gunakan deteksi perubahan berbasis peristiwa untuk pipeline.

Gunakan prosedur yang disertakan di sini untuk memigrasikan (memperbarui) pipeline polling Anda ke metode deteksi perubahan berbasis peristiwa untuk pipeline Anda.

Metode deteksi perubahan berbasis peristiwa yang direkomendasikan untuk pipeline ditentukan oleh sumber pipa, seperti CodeCommit. Dalam hal ini, misalnya, pipeline polling perlu bermigrasi ke deteksi perubahan berbasis peristiwa dengan. EventBridge

Cara memigrasikan saluran pemungutan suara

Untuk memigrasikan pipeline polling, tentukan pipeline polling Anda, lalu tentukan metode deteksi perubahan berbasis peristiwa yang direkomendasikan:

  • Gunakan langkah-langkah di dalam Melihat pipeline polling di akun Anda untuk menentukan jalur polling Anda.

  • Dalam tabel, temukan jenis sumber pipeline Anda dan kemudian pilih prosedur dengan implementasi yang ingin Anda gunakan untuk memigrasikan pipeline polling Anda. Setiap bagian berisi beberapa metode untuk migrasi, seperti menggunakan CLI atau CloudFormation.

Cara memigrasikan pipeline ke metode deteksi perubahan yang disarankan
Sumber pipa Metode deteksi berbasis peristiwa yang direkomendasikan Prosedur migrasi
AWS CodeCommit EventBridge (direkomendasikan). Lihat Migrasikan saluran polling dengan sumber CodeCommit.
Amazon S3 EventBridge dan bucket diaktifkan untuk pemberitahuan acara (disarankan). Lihat Migrasikan pipeline polling dengan sumber S3 diaktifkan untuk acara.
Amazon S3 EventBridge dan sebuah AWS CloudTrail jejak. Lihat Migrasikan pipeline polling dengan sumber dan CloudTrail jejak S3.
GitHub (melalui GitHub Aplikasi) Koneksi (disarankan) Lihat Migrasikan saluran polling untuk tindakan sumber GitHub (melalui aplikasi OAuth) ke koneksi.
GitHub (melalui aplikasi OAuth) Webhook Lihat Migrasikan pipeline polling untuk tindakan sumber GitHub (melalui aplikasi OAuth) ke webhook.
penting

Untuk pembaruan konfigurasi tindakan pipeline yang berlaku, seperti pipeline dengan tindakan GitHub (melalui aplikasi OAuth), Anda harus secara eksplisit menyetel PollForSourceChanges parameter ke false dalam konfigurasi tindakan Sumber Anda untuk menghentikan pipeline dari polling. Akibatnya, dimungkinkan untuk secara keliru mengkonfigurasi pipeline dengan deteksi perubahan berbasis peristiwa dan polling dengan, misalnya, mengonfigurasi EventBridge aturan dan juga menghilangkan parameter. PollForSourceChanges Ini menghasilkan eksekusi pipeline duplikat, dan pipeline dihitung terhadap batas jumlah total pipeline polling, yang secara default jauh lebih rendah daripada pipeline berbasis peristiwa. Untuk informasi selengkapnya, lihat Kuota di AWS CodePipeline.

Melihat pipeline polling di akun Anda

Sebagai langkah pertama, gunakan salah satu skrip berikut untuk menentukan pipeline mana di akun Anda yang dikonfigurasi untuk polling. Ini adalah saluran pipa untuk bermigrasi ke deteksi perubahan berbasis peristiwa.

Melihat pipeline polling di akun Anda (skrip)

Ikuti langkah-langkah berikut untuk menggunakan skrip untuk menentukan pipeline di akun Anda yang menggunakan polling.

  1. Buka jendela terminal, lalu lakukan salah satu hal berikut:

    • Jalankan perintah berikut untuk membuat skrip baru bernama PollingPipelinesExtractor.sh.

      vi PollingPipelinesExtractor.sh
    • Untuk menggunakan skrip python, jalankan perintah berikut untuk membuat skrip python baru bernama PollingPipelinesExtractor.py.

      vi PollingPipelinesExtractor.py
  2. Salin dan tempel kode berikut ke dalam PollingPipelinesExtractor skrip. Lakukan salah satu tindakan berikut:

    • Salin dan tempel kode berikut ke dalam PollingPipelinesExtractor.sh skrip.

      #!/bin/bash set +x POLLING_PIPELINES=() LAST_EXECUTED_DATES=() NEXT_TOKEN=null HAS_NEXT_TOKEN=true if [[ $# -eq 0 ]] ; then echo 'Please provide region name' exit 0 fi REGION=$1 while [ "$HAS_NEXT_TOKEN" != "false" ]; do if [ "$NEXT_TOKEN" != "null" ]; then LIST_PIPELINES_RESPONSE=$(aws codepipeline list-pipelines --region $REGION --next-token $NEXT_TOKEN) else LIST_PIPELINES_RESPONSE=$(aws codepipeline list-pipelines --region $REGION) fi LIST_PIPELINES=$(jq -r '.pipelines[].name' <<< "$LIST_PIPELINES_RESPONSE") NEXT_TOKEN=$(jq -r '.nextToken' <<< "$LIST_PIPELINES_RESPONSE") if [ "$NEXT_TOKEN" == "null" ]; then HAS_NEXT_TOKEN=false fi for pipline_name in $LIST_PIPELINES do PIPELINE=$(aws codepipeline get-pipeline --name $pipline_name --region $REGION) HAS_POLLABLE_ACTIONS=$(jq '.pipeline.stages[].actions[] | select(.actionTypeId.category == "Source") | select(.actionTypeId.owner == ("ThirdParty","AWS")) | select(.actionTypeId.provider == ("GitHub","S3","CodeCommit")) | select(.configuration.PollForSourceChanges == ("true",null))' <<< "$PIPELINE") if [ ! -z "$HAS_POLLABLE_ACTIONS" ]; then POLLING_PIPELINES+=("$pipline_name") PIPELINE_EXECUTIONS=$(aws codepipeline list-pipeline-executions --pipeline-name $pipline_name --region $REGION) LAST_EXECUTION=$(jq -r '.pipelineExecutionSummaries[0]' <<< "$PIPELINE_EXECUTIONS") if [ "$LAST_EXECUTION" != "null" ]; then LAST_EXECUTED_TIMESTAMP=$(jq -r '.startTime' <<< "$LAST_EXECUTION") LAST_EXECUTED_DATE="$(date -r ${LAST_EXECUTED_TIMESTAMP%.*})" else LAST_EXECUTED_DATE="Not executed in last year" fi LAST_EXECUTED_DATES+=("$LAST_EXECUTED_DATE") fi done done fileName=$REGION-$(date +%s) printf "| %-30s | %-30s |\n" "Polling Pipeline Name" "Last Executed Time" printf "| %-30s | %-30s |\n" "_____________________" "__________________" for i in "${!POLLING_PIPELINES[@]}"; do printf "| %-30s | %-30s |\n" "${POLLING_PIPELINES[i]}" "${LAST_EXECUTED_DATES[i]}" printf "${POLLING_PIPELINES[i]}," >> $fileName.csv done printf "\nSaving Polling Pipeline Names to file $fileName.csv."
    • Salin dan tempel kode berikut ke dalam PollingPipelinesExtractor.py skrip.

      import boto3 import sys import time import math hasNextToken = True nextToken = "" pollablePipelines = [] lastExecutedTimes = [] if len(sys.argv) == 1: raise Exception("Please provide region name.") session = boto3.Session(profile_name='default', region_name=sys.argv[1]) codepipeline = session.client('codepipeline') def is_pollable_action(action): actionTypeId = action['actionTypeId'] configuration = action['configuration'] return actionTypeId['owner'] in {"AWS", "ThirdParty"} and actionTypeId['provider'] in {"GitHub", "CodeCommit", "S3"} and ('PollForSourceChanges' not in configuration or configuration['PollForSourceChanges'] == 'true') def has_pollable_actions(pipeline): hasPollableAction = False pipelineDefinition = codepipeline.get_pipeline(name=pipeline['name'])['pipeline'] for action in pipelineDefinition['stages'][0]['actions']: hasPollableAction = is_pollable_action(action) if hasPollableAction: break return hasPollableAction def get_last_executed_time(pipelineName): pipelineExecutions=codepipeline.list_pipeline_executions(pipelineName=pipelineName)['pipelineExecutionSummaries'] if pipelineExecutions: return pipelineExecutions[0]['startTime'].strftime("%A %m/%d/%Y, %H:%M:%S") else: return "Not executed in last year" while hasNextToken: if nextToken=="": list_pipelines_response = codepipeline.list_pipelines() else: list_pipelines_response = codepipeline.list_pipelines(nextToken=nextToken) if 'nextToken' in list_pipelines_response: nextToken = list_pipelines_response['nextToken'] else: hasNextToken= False for pipeline in list_pipelines_response['pipelines']: if has_pollable_actions(pipeline): pollablePipelines.append(pipeline['name']) lastExecutedTimes.append(get_last_executed_time(pipeline['name'])) fileName="{region}-{timeNow}.csv".format(region=sys.argv[1],timeNow=math.trunc(time.time())) file = open(fileName, 'w') print ("{:<30} {:<30} {:<30}".format('Polling Pipeline Name', '|','Last Executed Time')) print ("{:<30} {:<30} {:<30}".format('_____________________', '|','__________________')) for i in range(len(pollablePipelines)): print("{:<30} {:<30} {:<30}".format(pollablePipelines[i], '|', lastExecutedTimes[i])) file.write("{pipeline},".format(pipeline=pollablePipelines[i])) file.close() print("\nSaving Polling Pipeline Names to file {fileName}".format(fileName=fileName))
  3. Untuk setiap Wilayah di mana Anda memiliki pipeline, Anda harus menjalankan skrip untuk Wilayah tersebut. Untuk menjalankan skrip, lakukan salah satu hal berikut:

    • Jalankan perintah berikut untuk menjalankan skrip bernama PollingPipelinesExtractor.sh. Dalam contoh ini, Wilayah adalah us-west-2.

      ./PollingPipelinesExtractor.sh us-west-2
    • Untuk skrip python, jalankan perintah berikut untuk menjalankan skrip python bernama PollingPipelinesExtractor.py. Dalam contoh ini, Wilayah adalah us-west-2.

      python3 PollingPipelinesExtractor.py us-west-2

    Dalam contoh output berikut dari skrip, Region us-west-2 mengembalikan daftar pipeline polling dan menunjukkan waktu eksekusi terakhir untuk setiap pipeline.

    % ./pollingPipelineExtractor.sh us-west-2 | Polling Pipeline Name | Last Executed Time | | _____________________ | __________________ | | myCodeBuildPipeline | Wed Mar 8 09:35:49 PST 2023 | | myCodeCommitPipeline | Mon Apr 24 22:32:32 PDT 2023 | | TestPipeline | Not executed in last year | Saving list of polling pipeline names to us-west-2-1682496174.csv...%

    Analisis output skrip dan, untuk setiap pipeline dalam daftar, perbarui sumber polling ke metode deteksi perubahan berbasis peristiwa yang direkomendasikan.

    catatan

    Pipeline polling Anda ditentukan oleh konfigurasi tindakan pipeline untuk PollForSourceChanges parameter. Jika konfigurasi sumber pipeline memiliki PollForSourceChanges parameter yang dihilangkan, maka secara CodePipeline default akan melakukan polling repositori Anda untuk perubahan sumber. Perilaku ini sama seperti jika PollForSourceChanges disertakan dan disetel ke true. Untuk informasi selengkapnya, lihat parameter konfigurasi untuk tindakan sumber pipeline Anda, seperti parameter konfigurasi tindakan sumber Amazon S3 diReferensi tindakan sumber Amazon S3.

    Perhatikan bahwa skrip ini juga menghasilkan file.csv yang berisi daftar pipeline polling di akun Anda dan menyimpan file.csv ke folder kerja saat ini.

Migrasikan saluran polling dengan sumber CodeCommit

Anda dapat memigrasikan pipeline polling untuk digunakan EventBridge untuk mendeteksi perubahan pada repositori CodeCommit sumber atau bucket sumber Amazon S3 Anda.

CodeCommit- Untuk pipa dengan CodeCommit sumber, modifikasi pipa sehingga deteksi perubahan dilakukan secara otomatis EventBridge. Pilih dari metode berikut untuk mengimplementasikan migrasi:

Migrasikan saluran polling (CodeCommit atau sumber Amazon S3) (konsol)

Anda dapat menggunakan CodePipeline konsol untuk memperbarui pipeline untuk digunakan EventBridge untuk mendeteksi perubahan pada repositori CodeCommit sumber atau bucket sumber Amazon S3 Anda.

catatan

Saat Anda menggunakan konsol untuk mengedit pipeline yang memiliki repositori CodeCommit sumber atau bucket sumber Amazon S3, aturan dan peran IAM dibuat untuk Anda. Jika Anda menggunakan AWS CLI untuk mengedit pipeline, Anda harus membuat EventBridge aturan dan peran IAM sendiri. Untuk informasi selengkapnya, lihat CodeCommit Tindakan sumber dan EventBridge.

Gunakan langkah-langkah ini untuk mengedit pipeline yang menggunakan pemeriksaan berkala. Jika Anda ingin membuat pipeline, lihatBuat pipeline, tahapan, dan tindakan.

Untuk mengedit tahap sumber pipeline
  1. Masuk ke Konsol Manajemen AWS dan buka CodePipeline konsol di http://console.aws.amazon.com/codesuite/codepipeline/home.

    Nama-nama semua pipeline yang terkait dengan AWS akun Anda ditampilkan.

  2. Di Nama, pilih nama pipeline yang ingin Anda edit. Ini membuka tampilan rinci dari pipa, termasuk keadaan masing-masing tindakan di setiap tahap pipa.

  3. Pada halaman rincian pipeline, pilih Edit.

  4. Pada tahap Edit, pilih ikon edit pada tindakan sumber.

  5. Per luas Opsi Deteksi Perubahan dan pilih CloudWatch Gunakan Acara untuk memulai pipeline saya secara otomatis ketika perubahan terjadi (disarankan).

    Sebuah pesan muncul yang menunjukkan EventBridge aturan yang akan dibuat untuk pipeline ini. Pilih Perbarui.

    Jika Anda memperbarui pipeline yang memiliki sumber Amazon S3, Anda melihat pesan berikut. Pilih Perbarui.

  6. Setelah selesai mengedit pipeline, pilih S impan perubahan pipeline untuk kembali ke halaman ringkasan.

    Sebuah pesan menampilkan nama EventBridge aturan yang akan dibuat untuk pipeline Anda. Jangan pilih Save and continue (Simpan dan lanjutkan).

  7. Untuk menguji tindakan Anda, lepaskan perubahan dengan menggunakan AWS CLI untuk melakukan perubahan ke sumber yang ditentukan dalam tahap sumber pipeline.

Migrasikan saluran polling (CodeCommit sumber) (CLI)

Ikuti langkah-langkah ini untuk mengedit pipeline yang menggunakan polling (pemeriksaan berkala) untuk menggunakan EventBridge aturan untuk memulai pipeline. Jika Anda ingin membuat pipeline, lihatBuat pipeline, tahapan, dan tindakan.

Untuk membangun pipeline berbasis peristiwa dengan CodeCommit, Anda mengedit PollForSourceChanges parameter pipeline Anda dan kemudian membuat sumber daya berikut:

  • EventBridge acara

  • Peran IAM untuk memungkinkan acara ini memulai pipeline Anda

Untuk mengedit PollForSourceChanges parameter pipeline
penting

Saat Anda membuat pipeline dengan metode ini, PollForSourceChanges parameter default menjadi true jika tidak secara eksplisit disetel ke false. Saat menambahkan deteksi perubahan berbasis peristiwa, Anda harus menambahkan parameter ke output dan menyetelnya ke false untuk menonaktifkan polling. Jika tidak, pipeline Anda dimulai dua kali untuk satu perubahan sumber. Lihat perinciannya di Pengaturan yang valid untuk PollForSourceChanges parameter.

  1. Jalan get-pipeline kan perintah untuk menyalin struktur pipeline ke file JSON. Misalnya, untuk pipeline bernamaMyFirstPipeline, jalankan perintah berikut:

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    Perintah ini tidak mengembalikan apa pun, tetapi file yang Anda buat akan muncul di direktori tempat Anda menjalankan perintah.

  2. Buka file JSON di editor teks biasa dan edit tahap sumber dengan mengubah PollForSourceChanges parameter menjadifalse, seperti yang ditunjukkan dalam contoh ini.

    Mengapa saya membuat perubahan ini? Mengubah parameter ini untuk false mematikan pemeriksaan berkala sehingga Anda dapat menggunakan deteksi perubahan berbasis peristiwa saja.

    "configuration": { "PollForSourceChanges": "false", "BranchName": "main", "RepositoryName": "MyTestRepo" },
  3. Jika Anda bekerja dengan struktur pipa yang diambil menggunakan get-pipeline perintah, hapus metadata garis dari file JSON. Jika tidak, update-pipeline perintah tidak dapat menggunakannya. Hapus "metadata": { } garis dan "updated" bidang "created""pipelineARN",, dan.

    Misalnya, hapus baris berikut dari struktur:

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" },

    Simpan file tersebut.

  4. Untuk menerapkan perubahan Anda, jalankan update-pipeline perintah, tentukan file JSON pipeline:

    penting

    Pastikan untuk menyertakan file:// sebelum nama file. Diperlukan dalam perintah ini.

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    Perintah ini mengembalikan seluruh struktur pipa yang diedit.

    catatan

    Per update-pipeline intah menghentikan pipa. Jika revisi dijalankan melalui pipeline saat Anda menjalankan update-pipeline perintah, proses tersebut dihentikan. Anda harus memulai pipeline secara manual untuk menjalankan revisi tersebut melalui pipeline yang diperbarui. Gunakan start-pipeline-execution perintah untuk memulai pipeline Anda secara manual.

Untuk membuat EventBridge aturan dengan CodeCommit sebagai sumber peristiwa dan CodePipeline sebagai target
  1. Tambahkan izin EventBridge untuk digunakan CodePipeline untuk memanggil aturan. Untuk informasi selengkapnya, lihat Menggunakan kebijakan berbasis sumber daya untuk Amazon. EventBridge

    1. Gunakan contoh berikut untuk membuat kebijakan kepercayaan yang memungkinkan EventBridge untuk mengambil peran layanan. Sebutkan kebijakan kepercayaantrustpolicyforEB.json.

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. Gunakan perintah berikut untuk membuat Role-for-MyRule peran dan melampirkan kebijakan kepercayaan.

      aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
    3. Buat kebijakan izin JSON, seperti yang ditunjukkan dalam contoh ini, untuk pipeline bernamaMyFirstPipeline. Beri nama kebijakan izinpermissionspolicyforEB.json.

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:111122223333:MyFirstPipeline" ] } ] }
    4. Gunakan perintah berikut untuk melampirkan kebijakan CodePipeline-Permissions-Policy-for-EB izin ke Role-for-MyRule peran.

      Mengapa saya membuat perubahan ini? Menambahkan kebijakan ini ke peran akan membuat izin untuk EventBridge.

      aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
  2. Panggil put-rule perintah dan sertakan --role-arn parameter --name--event-pattern,, dan.

    Mengapa saya membuat perubahan ini? Perintah ini CloudFormation memungkinkan untuk membuat acara.

    Perintah contoh berikut membuat aturan yang disebutMyCodeCommitRepoRule.

    aws events put-rule --name "MyCodeCommitRepoRule" --event-pattern "{\"source\":[\"aws.codecommit\"],\"detail-type\":[\"CodeCommit Repository State Change\"],\"resources\":[\"repository-ARN\"],\"detail\":{\"referenceType\":[\"branch\"],\"referenceName\":[\"main\"]}}" --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
  3. Untuk menambahkan CodePipeline sebagai target, panggil put-targets perintah dan sertakan parameter berikut:

    • --ruleParameter digunakan dengan yang rule_name Anda buat dengan menggunakanput-rule.

    • --targetsParameter digunakan dengan Id daftar target dalam daftar target dan ARN pipa target.

    Perintah sampel berikut menentukan bahwa untuk aturan yang Id dipanggilMyCodeCommitRepoRule, target terdiri dari nomor satu, menunjukkan bahwa dalam daftar target untuk aturan, ini adalah target 1. Perintah sampel juga menentukan contoh ARN untuk pipeline. Pipeline dimulai ketika sesuatu berubah di repositori.

    aws events put-targets --rule MyCodeCommitRepoRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
  4. (Opsional) Untuk mengonfigurasi transformator input dengan penggantian sumber untuk ID gambar tertentu, gunakan JSON berikut dalam perintah CLI Anda. Contoh berikut mengonfigurasi penggantian di mana:

    • Dalam actionName contoh ini, adalah nilai dinamis, didefinisikan pada pembuatan pipeline, bukan berasal dari peristiwa sumber. Source

    • Dalam revisionType contoh ini, adalah nilai dinamis, didefinisikan pada pembuatan pipeline, bukan berasal dari peristiwa sumber. COMMIT_ID

    • revisionValue, < revisionValue > dalam contoh ini, diturunkan dari variabel peristiwa sumber.

    { "Rule": "my-rule", "Targets": [ { "Id": "MyTargetId", "Arn": "pipeline-ARN", "InputTransformer": { "sourceRevisions": { "actionName": "Source", "revisionType": "COMMIT_ID", "revisionValue": "<revisionValue>" }, "variables": [ { "name": "Branch_Name", "value": "value" } ] } } ] }

Migrasikan saluran polling (CodeCommit sumber) (CloudFormation templat)

Untuk membangun pipeline berbasis peristiwa AWS CodeCommit, Anda mengedit PollForSourceChanges parameter pipeline Anda dan kemudian menambahkan sumber daya berikut ke template Anda:

  • Sebuah EventBridge aturan

  • Peran IAM untuk aturan Anda EventBridge

Jika Anda menggunakan CloudFormation untuk membuat dan mengelola pipeline Anda, template Anda menyertakan konten seperti berikut ini.

catatan

Pro Configuration perti di tahap sumber disebutPollForSourceChanges. Jika properti itu tidak disertakan dalam template Anda, maka PollForSourceChanges disetel ke true secara default.

YAML
Resources: AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: codecommit-polling-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: CodeCommit OutputArtifacts: - Name: SourceOutput Configuration: BranchName: !Ref BranchName RepositoryName: !Ref RepositoryName PollForSourceChanges: true RunOrder: 1
JSON
"Stages": [ { "Name": "Source", "Actions": [{ "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "CodeCommit" }, "OutputArtifacts": [{ "Name": "SourceOutput" }], "Configuration": { "BranchName": { "Ref": "BranchName" }, "RepositoryName": { "Ref": "RepositoryName" }, "PollForSourceChanges": true }, "RunOrder": 1 }] },
Untuk memperbarui pipeline Anda CloudFormation template dan buat EventBridge aturan
  1. Di template, di bawahResources, gunakan AWS::IAM::Role CloudFormation sumber daya untuk mengonfigurasi peran IAM yang memungkinkan acara Anda memulai pipeline Anda. Entri ini membuat peran yang menggunakan dua kebijakan:

    • Kebijakan pertama memungkinkan peran untuk diasumsikan.

    • Kebijakan kedua memberikan izin untuk memulai pipeline.

    Mengapa saya membuat perubahan ini? Menambahkan AWS::IAM::Role sumber daya memungkinkan CloudFormation untuk membuat izin untuk EventBridge. Sumber daya ini ditambahkan ke CloudFormation tumpukan Anda.

    YAML
    EventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: eb-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ]
    JSON
    "EventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "eb-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ...
  2. Di template, di bawahResources, gunakan AWS::Events::Rule CloudFormation sumber daya untuk menambahkan EventBridge aturan. Pola peristiwa ini menciptakan peristiwa yang memantau perubahan push ke repositori Anda. Saat EventBridge mendeteksi perubahan status repositori, aturan akan dipanggil StartPipelineExecution pada pipeline target Anda.

    Mengapa saya membuat perubahan ini? Menambahkan AWS::Events::Rule sumber daya CloudFormation memungkinkan untuk membuat acara. Sumber daya ini ditambahkan ke CloudFormation tumpukan Anda.

    YAML
    EventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.codecommit detail-type: - 'CodeCommit Repository State Change' resources: - !Join [ '', [ 'arn:aws:codecommit:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref RepositoryName ] ] detail: event: - referenceCreated - referenceUpdated referenceType: - branch referenceName: - main Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt EventRole.Arn Id: codepipeline-AppPipeline
    JSON
    "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "source": [ "aws.codecommit" ], "detail-type": [ "CodeCommit Repository State Change" ], "resources": [ { "Fn::Join": [ "", [ "arn:aws:codecommit:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "RepositoryName" } ] ] } ], "detail": { "event": [ "referenceCreated", "referenceUpdated" ], "referenceType": [ "branch" ], "referenceName": [ "main" ] } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } },
  3. (Opsional) Untuk mengonfigurasi transformator input dengan penggantian sumber untuk ID gambar tertentu, gunakan cuplikan YAML berikut. Contoh berikut mengonfigurasi penggantian di mana:

    • Dalam actionName contoh ini, adalah nilai dinamis, didefinisikan pada pembuatan pipeline, bukan berasal dari peristiwa sumber. Source

    • Dalam revisionType contoh ini, adalah nilai dinamis, didefinisikan pada pembuatan pipeline, bukan berasal dari peristiwa sumber. COMMIT_ID

    • revisionValue, < revisionValue > dalam contoh ini, diturunkan dari variabel peristiwa sumber.

    • Variabel output untuk BranchName dan Value ditentukan.

    Rule: my-rule Targets: - Id: MyTargetId Arn: pipeline-ARN InputTransformer: sourceRevisions: actionName: Source revisionType: COMMIT_ID revisionValue: <revisionValue> variables: - name: BranchName value: value
  4. Simpan template yang diperbarui ke komputer lokal Anda, lalu buka CloudFormation konsol.

  5. Pilih tumpukan Anda, lalu pilih Buat Set Perubahan untuk Tumpukan Saat Ini.

  6. Unggah template, lalu lihat perubahan yang tercantum di CloudFormation. Ini adalah perubahan yang harus dilakukan pada tumpukan. Anda harus melihat sumber daya baru Anda dalam daftar.

  7. Pilih Eksekusi.

Untuk mengedit PollForSourceChanges parameter pipeline
penting

Dalam banyak kasus, PollForSourceChanges parameter default menjadi true saat Anda membuat pipeline. Saat menambahkan deteksi perubahan berbasis peristiwa, Anda harus menambahkan parameter ke output dan menyetelnya ke false untuk menonaktifkan polling. Jika tidak, pipeline Anda dimulai dua kali untuk satu perubahan sumber. Lihat perinciannya di Pengaturan yang valid untuk PollForSourceChanges parameter.

  • Di template, ubah PollForSourceChanges kefalse. Jika Anda tidak menyertakan PollForSourceChanges dalam definisi pipeline Anda, tambahkan dan setel kefalse.

    Mengapa saya membuat perubahan ini? Mengubah parameter ini untuk false mematikan pemeriksaan berkala sehingga Anda dapat menggunakan deteksi perubahan berbasis peristiwa saja.

    YAML
    Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: CodeCommit OutputArtifacts: - Name: SourceOutput Configuration: BranchName: !Ref BranchName RepositoryName: !Ref RepositoryName PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "CodeCommit" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "BranchName": { "Ref": "BranchName" }, "RepositoryName": { "Ref": "RepositoryName" }, "PollForSourceChanges": false }, "RunOrder": 1 } ] },
contoh

Saat Anda membuat sumber daya ini dengan CloudFormation, pipeline Anda dipicu saat file di repositori Anda dibuat atau diperbarui. Berikut cuplikan template terakhir:

YAML
Resources: EventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: eb-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] EventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.codecommit detail-type: - 'CodeCommit Repository State Change' resources: - !Join [ '', [ 'arn:aws:codecommit:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref RepositoryName ] ] detail: event: - referenceCreated - referenceUpdated referenceType: - branch referenceName: - main Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt EventRole.Arn Id: codepipeline-AppPipeline AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: codecommit-events-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: CodeCommit OutputArtifacts: - Name: SourceOutput Configuration: BranchName: !Ref BranchName RepositoryName: !Ref RepositoryName PollForSourceChanges: false RunOrder: 1 ...
JSON
"Resources": { ... "EventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "eb-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] } } ] } } ] } }, "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "source": [ "aws.codecommit" ], "detail-type": [ "CodeCommit Repository State Change" ], "resources": [ { "Fn::Join": [ "", [ "arn:aws:codecommit:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "RepositoryName" } ] ] } ], "detail": { "event": [ "referenceCreated", "referenceUpdated" ], "referenceType": [ "branch" ], "referenceName": [ "main" ] } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } }, "AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "Name": "codecommit-events-pipeline", "RoleArn": { "Fn::GetAtt": [ "CodePipelineServiceRole", "Arn" ] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "CodeCommit" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "BranchName": { "Ref": "BranchName" }, "RepositoryName": { "Ref": "RepositoryName" }, "PollForSourceChanges": false }, "RunOrder": 1 } ] }, ...

Migrasikan pipeline polling dengan sumber S3 diaktifkan untuk acara

Untuk pipeline dengan sumber Amazon S3, ubah pipeline sehingga deteksi perubahan dilakukan secara otomatis melalui EventBridge dan dengan bucket sumber yang diaktifkan untuk notifikasi peristiwa. Ini adalah metode yang disarankan jika Anda menggunakan CLI atau CloudFormation untuk memigrasikan pipeline Anda.

catatan

Ini termasuk menggunakan bucket yang diaktifkan untuk notifikasi acara, di mana Anda tidak perlu membuat CloudTrail jejak terpisah. Jika Anda menggunakan konsol, maka aturan acara dan CloudTrail jejak disiapkan untuk Anda. Untuk langkah-langkah tersebut, lihatMigrasikan pipeline polling dengan sumber dan CloudTrail jejak S3.

Migrasikan pipeline polling dengan sumber S3 diaktifkan untuk peristiwa (CLI)

Ikuti langkah-langkah ini untuk mengedit pipeline yang menggunakan polling (pemeriksaan berkala) untuk menggunakan acara sebagai EventBridge gantinya. Jika Anda ingin membuat pipeline, lihatBuat pipeline, tahapan, dan tindakan.

Untuk membuat pipeline berbasis peristiwa dengan Amazon S3, Anda mengedit PollForSourceChanges parameter pipeline Anda dan kemudian membuat sumber daya berikut:

  • EventBridge aturan acara

  • Peran IAM untuk memungkinkan EventBridge acara memulai pipeline Anda

Untuk membuat EventBridge aturan dengan Amazon S3 sebagai sumber acara dan CodePipeline sebagai target dan menerapkan kebijakan izin
  1. Berikan izin EventBridge untuk digunakan CodePipeline untuk memanggil aturan. Untuk informasi selengkapnya, lihat Menggunakan kebijakan berbasis sumber daya untuk Amazon. EventBridge

    1. Gunakan contoh berikut untuk membuat kebijakan kepercayaan untuk memungkinkan EventBridge untuk mengambil peran layanan. Sebutkan itutrustpolicyforEB.json.

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. Gunakan perintah berikut untuk membuat Role-for-MyRule peran dan melampirkan kebijakan kepercayaan.

      Mengapa saya membuat perubahan ini? Menambahkan kebijakan kepercayaan ini ke peran akan menciptakan izin untuk EventBridge.

      aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
    3. Buat kebijakan izin JSON, seperti yang ditunjukkan di sini untuk pipeline bernamaMyFirstPipeline. Beri nama kebijakan izinpermissionspolicyforEB.json.

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:111122223333:MyFirstPipeline" ] } ] }
    4. Gunakan perintah berikut untuk melampirkan kebijakan CodePipeline-Permissions-Policy-for-EB izin baru ke Role-for-MyRule peran yang Anda buat.

      aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
  2. Panggil put-rule perintah dan sertakan --role-arn parameter --name--event-pattern,, dan.

    Perintah contoh berikut membuat aturan bernamaEnabledS3SourceRule.

    aws events put-rule --name "EnabledS3SourceRule" --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"Object Created\"],\"detail\":{\"bucket\":{\"name\":[\"amzn-s3-demo-source-bucket\"]}}}" --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
  3. Untuk menambahkan CodePipeline sebagai target, panggil put-targets perintah dan sertakan --targets parameter --rule dan.

    Perintah berikut menentukan bahwa untuk aturan bernamaEnabledS3SourceRule, target Id terdiri dari nomor satu, menunjukkan bahwa dalam daftar target untuk aturan, ini adalah target 1. Perintah ini juga menentukan contoh ARN untuk pipeline. Pipeline dimulai ketika sesuatu berubah di repositori.

    aws events put-targets --rule EnabledS3SourceRule --targets Id=codepipeline-AppPipeline,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
Untuk mengedit PollForSourceChanges parameter pipeline
penting

Saat Anda membuat pipeline dengan metode ini, PollForSourceChanges parameter default menjadi true jika tidak secara eksplisit disetel ke false. Saat menambahkan deteksi perubahan berbasis peristiwa, Anda harus menambahkan parameter ke output dan menyetelnya ke false untuk menonaktifkan polling. Jika tidak, pipeline Anda dimulai dua kali untuk satu perubahan sumber. Lihat perinciannya di Pengaturan yang valid untuk PollForSourceChanges parameter.

  1. Jalan get-pipeline kan perintah untuk menyalin struktur pipeline ke file JSON. Misalnya, untuk pipeline bernamaMyFirstPipeline, jalankan perintah berikut:

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    Perintah ini tidak mengembalikan apa pun, tetapi file yang Anda buat akan muncul di direktori tempat Anda menjalankan perintah.

  2. Buka file JSON di editor teks biasa dan edit tahap sumber dengan mengubah PollForSourceChanges parameter untuk bucket bernama amzn-s3-demo-source-bucket tofalse, seperti yang ditunjukkan dalam contoh ini.

    Mengapa saya membuat perubahan ini? Menyetel parameter ini untuk false mematikan pemeriksaan berkala sehingga Anda dapat menggunakan deteksi perubahan berbasis peristiwa saja.

    "configuration": { "S3Bucket": "amzn-s3-demo-source-bucket", "PollForSourceChanges": "false", "S3ObjectKey": "index.zip" },
  3. Jika Anda bekerja dengan struktur pipa yang diambil menggunakan get-pipeline perintah, Anda harus menghapus metadata garis dari file JSON. Jika tidak, update-pipeline perintah tidak dapat menggunakannya. Hapus "metadata": { } garis dan "updated" bidang "created""pipelineARN",, dan.

    Misalnya, hapus baris berikut dari struktur:

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" },

    Simpan file tersebut.

  4. Untuk menerapkan perubahan Anda, jalankan update-pipeline perintah, tentukan file JSON pipeline:

    penting

    Pastikan untuk menyertakan file:// sebelum nama file. Diperlukan dalam perintah ini.

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    Perintah ini mengembalikan seluruh struktur pipa yang diedit.

    catatan

    Per update-pipeline intah menghentikan pipa. Jika revisi dijalankan melalui pipeline saat Anda menjalankan update-pipeline perintah, proses tersebut dihentikan. Anda harus memulai pipeline secara manual untuk menjalankan revisi tersebut melalui pipeline yang diperbarui. Gunakan start-pipeline-execution perintah untuk memulai pipeline Anda secara manual.

Migrasikan pipeline polling dengan sumber S3 diaktifkan untuk acara (CloudFormation templat)

Prosedur ini untuk pipeline di mana bucket sumber mengaktifkan peristiwa.

Gunakan langkah-langkah ini untuk mengedit pipeline Anda dengan sumber Amazon S3 dari polling hingga deteksi perubahan berbasis peristiwa.

Untuk membuat pipeline berbasis peristiwa dengan Amazon S3, Anda mengedit PollForSourceChanges parameter pipeline Anda dan kemudian menambahkan sumber daya berikut ke template Anda:

  • EventBridge aturan dan peran IAM untuk memungkinkan acara ini memulai pipeline Anda.

Jika Anda menggunakan CloudFormation untuk membuat dan mengelola pipeline Anda, template Anda menyertakan konten seperti berikut ini.

catatan

Pro Configuration perti di tahap sumber disebutPollForSourceChanges. Jika template Anda tidak menyertakan properti itu, maka PollForSourceChanges diatur ke true secara default.

YAML
AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref S3SourceObjectKey PollForSourceChanges: true RunOrder: 1 ...
JSON
"AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "RoleArn": { "Fn::GetAtt": ["CodePipelineServiceRole", "Arn"] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": true }, "RunOrder": 1 } ] }, ...
Untuk membuat EventBridge aturan dengan Amazon S3 sebagai sumber acara dan CodePipeline sebagai target dan menerapkan kebijakan izin
  1. Di template, di bawahResources, gunakan AWS::IAM::Role CloudFormation sumber daya untuk mengonfigurasi peran IAM yang memungkinkan acara Anda memulai pipeline Anda. Entri ini membuat peran yang menggunakan dua kebijakan:

    • Kebijakan pertama memungkinkan peran untuk diasumsikan.

    • Kebijakan kedua memberikan izin untuk memulai pipeline.

    Mengapa saya membuat perubahan ini? Menambahkan AWS::IAM::Role sumber daya CloudFormation memungkinkan untuk membuat izin untuk EventBridge. Sumber daya ini ditambahkan ke CloudFormation tumpukan Anda.

    YAML
    EventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: eb-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] ...
    JSON
    "EventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "eb-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] ...
  2. Gunakan sumber AWS::Events::Rule CloudFormation daya untuk menambahkan EventBridge aturan. Pola peristiwa ini membuat peristiwa yang memantau pembuatan atau penghapusan objek di bucket sumber Amazon S3 Anda. Selain itu, sertakan target pipeline Anda. Ketika sebuah objek dibuat, aturan ini dipanggil StartPipelineExecution pada pipeline target Anda.

    Mengapa saya membuat perubahan ini? Menambahkan AWS::Events::Rule sumber daya CloudFormation memungkinkan untuk membuat acara. Sumber daya ini ditambahkan ke CloudFormation tumpukan Anda.

    YAML
    EventRule: Type: AWS::Events::Rule Properties: EventBusName: default EventPattern: source: - aws.s3 detail-type: - Object Created detail: bucket: name: - !Ref SourceBucket Name: EnabledS3SourceRule State: ENABLED Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt EventRole.Arn Id: codepipeline-AppPipeline ...
    JSON
    "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventBusName": "default", "EventPattern": { "source": [ "aws.s3" ], "detail-type": [ "Object Created" ], "detail": { "bucket": { "name": [ "s3-pipeline-source-fra-bucket" ] } } }, "Name": "EnabledS3SourceRule", "State": "ENABLED", "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } } }, ...
  3. Simpan template yang diperbarui ke komputer lokal Anda, dan buka CloudFormation konsol.

  4. Pilih tumpukan Anda, lalu pilih Buat Set Perubahan untuk Tumpukan Saat Ini.

  5. Unggah template yang diperbarui, lalu lihat perubahan yang tercantum di CloudFormation. Ini adalah perubahan yang akan dilakukan pada tumpukan. Anda harus melihat sumber daya baru Anda dalam daftar.

  6. Pilih Eksekusi.

Untuk mengedit PollForSourceChanges parameter pipeline
penting

Saat Anda membuat pipeline dengan metode ini, PollForSourceChanges parameter default menjadi true jika tidak secara eksplisit disetel ke false. Saat menambahkan deteksi perubahan berbasis peristiwa, Anda harus menambahkan parameter ke output dan menyetelnya ke false untuk menonaktifkan polling. Jika tidak, pipeline Anda dimulai dua kali untuk satu perubahan sumber. Lihat perinciannya di Pengaturan yang valid untuk PollForSourceChanges parameter.

  • Di template, ubah PollForSourceChanges kefalse. Jika Anda tidak menyertakan PollForSourceChanges dalam definisi pipeline Anda, tambahkan dan setel kefalse.

    Mengapa saya membuat perubahan ini? Meng PollForSourceChanges ubah false menjadi mematikan pemeriksaan berkala sehingga Anda dapat menggunakan deteksi perubahan berbasis peristiwa saja.

    YAML
    Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref SourceObjectKey PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": false }, "RunOrder": 1 }
contoh

Saat Anda menggunakan CloudFormation untuk membuat sumber daya ini, pipeline Anda dipicu saat file di repositori Anda dibuat atau diperbarui.

catatan

Jangan berhenti di sini. Meskipun pipeline Anda dibuat, Anda harus membuat CloudFormation template kedua untuk pipeline Amazon S3 Anda. Jika Anda tidak membuat template kedua, pipeline Anda tidak memiliki fungsi deteksi perubahan.

YAML
Parameters: SourceObjectKey: Description: 'S3 source artifact' Type: String Default: SampleApp_Linux.zip ApplicationName: Description: 'CodeDeploy application name' Type: String Default: DemoApplication BetaFleet: Description: 'Fleet configured in CodeDeploy' Type: String Default: DemoFleet Resources: SourceBucket: Type: AWS::S3::Bucket Properties: NotificationConfiguration: EventBridgeConfiguration: EventBridgeEnabled: true VersioningConfiguration: Status: Enabled CodePipelineArtifactStoreBucket: Type: AWS::S3::Bucket CodePipelineArtifactStoreBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref CodePipelineArtifactStoreBucket PolicyDocument: Version: 2012-10-17 Statement: - Sid: DenyUnEncryptedObjectUploads Effect: Deny Principal: '*' Action: s3:PutObject Resource: !Join [ '', [ !GetAtt CodePipelineArtifactStoreBucket.Arn, '/*' ] ] Condition: StringNotEquals: s3:x-amz-server-side-encryption: aws:kms - Sid: DenyInsecureConnections Effect: Deny Principal: '*' Action: s3:* Resource: !Sub ${CodePipelineArtifactStoreBucket.Arn}/* Condition: Bool: aws:SecureTransport: false CodePipelineServiceRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - codepipeline.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: AWS-CodePipeline-Service-3 PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - codecommit:CancelUploadArchive - codecommit:GetBranch - codecommit:GetCommit - codecommit:GetUploadArchiveStatus - codecommit:UploadArchive Resource: 'resource_ARN' - Effect: Allow Action: - codedeploy:CreateDeployment - codedeploy:GetApplicationRevision - codedeploy:GetDeployment - codedeploy:GetDeploymentConfig - codedeploy:RegisterApplicationRevision Resource: 'resource_ARN' - Effect: Allow Action: - codebuild:BatchGetBuilds - codebuild:StartBuild Resource: 'resource_ARN' - Effect: Allow Action: - devicefarm:ListProjects - devicefarm:ListDevicePools - devicefarm:GetRun - devicefarm:GetUpload - devicefarm:CreateUpload - devicefarm:ScheduleRun Resource: 'resource_ARN' - Effect: Allow Action: - lambda:InvokeFunction - lambda:ListFunctions Resource: 'resource_ARN' - Effect: Allow Action: - iam:PassRole Resource: 'resource_ARN' - Effect: Allow Action: - elasticbeanstalk:* - ec2:* - elasticloadbalancing:* - autoscaling:* - cloudwatch:* - s3:* - sns:* - cloudformation:* - rds:* - sqs:* - ecs:* Resource: 'resource_ARN' AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: s3-events-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref SourceObjectKey PollForSourceChanges: false RunOrder: 1 - Name: Beta Actions: - Name: BetaAction InputArtifacts: - Name: SourceOutput ActionTypeId: Category: Deploy Owner: AWS Version: 1 Provider: CodeDeploy Configuration: ApplicationName: !Ref ApplicationName DeploymentGroupName: !Ref BetaFleet RunOrder: 1 ArtifactStore: Type: S3 Location: !Ref CodePipelineArtifactStoreBucket EventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: eb-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] EventRule: Type: AWS::Events::Rule Properties: EventBusName: default EventPattern: source: - aws.s3 detail-type: - Object Created detail: bucket: name: - !Ref SourceBucket Name: EnabledS3SourceRule State: ENABLED Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt EventRole.Arn Id: codepipeline-AppPipeline
JSON
JSON
JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "appconfig:StartDeployment", "appconfig:StopDeployment", "appconfig:GetDeployment" ], "Resource": [ "arn:aws:appconfig:*:111122223333:application/[[Application]]", "arn:aws:appconfig:*:111122223333:application/[[Application]]/*", "arn:aws:appconfig:*:111122223333:deploymentstrategy/*" ], "Effect": "Allow" } ] }

Migrasikan pipeline polling dengan sumber dan CloudTrail jejak S3

Untuk pipeline dengan sumber Amazon S3, ubah pipeline sehingga deteksi perubahan dilakukan secara otomatis EventBridge. Pilih dari metode berikut untuk mengimplementasikan migrasi:

Migrasikan pipeline polling dengan sumber S3 dan CloudTrail jejak (CLI)

Ikuti langkah-langkah ini untuk mengedit pipeline yang menggunakan polling (pemeriksaan berkala) untuk menggunakan acara sebagai EventBridge gantinya. Jika Anda ingin membuat pipeline, lihatBuat pipeline, tahapan, dan tindakan.

Untuk membuat pipeline berbasis peristiwa dengan Amazon S3, Anda mengedit PollForSourceChanges parameter pipeline Anda dan kemudian membuat sumber daya berikut:

  • AWS CloudTrail kebijakan trail, bucket, dan bucket yang dapat digunakan Amazon S3 untuk mencatat peristiwa.

  • EventBridge acara

  • Peran IAM untuk memungkinkan EventBridge acara memulai pipeline Anda

Untuk membuat AWS CloudTrail melacak dan mengaktifkan logging

Untuk menggunakan AWS CLI untuk membuat jejak, panggil create-trail perintah, tentukan:

  • Nama jejaknya.

  • Bucket yang telah Anda terapkan kebijakan bucket AWS CloudTrail.

Untuk informasi selengkapnya, lihat Membuat jejak dengan antarmuka baris AWS perintah.

  1. Panggil create-trail perintah dan sertakan --s3-bucket-name parameter --name dan.

    Mengapa saya membuat perubahan ini? Ini membuat CloudTrail jejak yang diperlukan untuk bucket sumber S3 Anda.

    Perintah berikut menggunakan --name dan --s3-bucket-name untuk membuat jejak bernama my-trail dan bucket bernamaamzn-s3-demo-source-bucket.

    aws cloudtrail create-trail --name my-trail --s3-bucket-name amzn-s3-demo-source-bucket
  2. Panggil start-logging perintah dan sertakan --name parameter.

    Mengapa saya membuat perubahan ini? Perintah ini memulai CloudTrail logging untuk bucket sumber Anda dan mengirim acara ke EventBridge.

    Contoh:

    Perintah berikut digunakan --name untuk mulai mencatat pada jejak bernamamy-trail.

    aws cloudtrail start-logging --name my-trail
  3. Panggil put-event-selectors perintah dan sertakan --event-selectors parameter --trail-name dan. Gunakan pemilih peristiwa untuk menentukan bahwa Anda ingin jejak Anda mencatat peristiwa data untuk bucket sumber Anda dan mengirim peristiwa ke EventBridge aturan.

    Mengapa saya membuat perubahan ini? Perintah ini menyaring peristiwa.

    Contoh:

    Perintah berikut menggunakan --trail-name dan --event-selectors untuk menentukan peristiwa data untuk bucket sumber dan awalan bernamaamzn-s3-demo-source-bucket/myFolder.

    aws cloudtrail put-event-selectors --trail-name my-trail --event-selectors '[{ "ReadWriteType": "WriteOnly", "IncludeManagementEvents":false, "DataResources": [{ "Type": "AWS::S3::Object", "Values": ["arn:aws:s3:::amzn-s3-demo-source-bucket/myFolder/file.zip"] }] }]'
Untuk membuat EventBridge aturan dengan Amazon S3 sebagai sumber acara dan CodePipeline sebagai target dan menerapkan kebijakan izin
  1. Berikan izin EventBridge untuk digunakan CodePipeline untuk memanggil aturan. Untuk informasi selengkapnya, lihat Menggunakan kebijakan berbasis sumber daya untuk Amazon. EventBridge

    1. Gunakan contoh berikut untuk membuat kebijakan kepercayaan untuk memungkinkan EventBridge untuk mengambil peran layanan. Sebutkan itutrustpolicyforEB.json.

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. Gunakan perintah berikut untuk membuat Role-for-MyRule peran dan melampirkan kebijakan kepercayaan.

      Mengapa saya membuat perubahan ini? Menambahkan kebijakan kepercayaan ini ke peran akan menciptakan izin untuk EventBridge.

      aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
    3. Buat kebijakan izin JSON, seperti yang ditunjukkan di sini untuk pipeline bernamaMyFirstPipeline. Beri nama kebijakan izinpermissionspolicyforEB.json.

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:111122223333:MyFirstPipeline" ] } ] }
    4. Gunakan perintah berikut untuk melampirkan kebijakan CodePipeline-Permissions-Policy-for-EB izin baru ke Role-for-MyRule peran yang Anda buat.

      aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
  2. Panggil put-rule perintah dan sertakan --role-arn parameter --name--event-pattern,, dan.

    Perintah contoh berikut membuat aturan bernamaMyS3SourceRule.

    aws events put-rule --name "MyS3SourceRule" --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"AWS API Call via CloudTrail\"],\"detail\":{\"eventSource\":[\"s3.amazonaws.com\"],\"eventName\":[\"CopyObject\",\"PutObject\",\"CompleteMultipartUpload\"],\"requestParameters\":{\"bucketName\":[\"amzn-s3-demo-source-bucket\"],\"key\":[\"my-key\"]}}} --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
  3. Untuk menambahkan CodePipeline sebagai target, panggil put-targets perintah dan sertakan --targets parameter --rule dan.

    Perintah berikut menentukan bahwa untuk aturan bernamaMyS3SourceRule, target Id terdiri dari nomor satu, menunjukkan bahwa dalam daftar target untuk aturan, ini adalah target 1. Perintah ini juga menentukan contoh ARN untuk pipeline. Pipeline dimulai ketika sesuatu berubah di repositori.

    aws events put-targets --rule MyS3SourceRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
  4. (Opsional) Untuk mengonfigurasi transformator input dengan penggantian sumber untuk ID gambar tertentu, gunakan JSON berikut dalam perintah CLI Anda. Contoh berikut mengonfigurasi penggantian di mana:

    • Dalam actionName contoh ini, adalah nilai dinamis, didefinisikan pada pembuatan pipeline, bukan berasal dari peristiwa sumber. Source

    • Dalam revisionType contoh ini, adalah nilai dinamis, didefinisikan pada pembuatan pipeline, bukan berasal dari peristiwa sumber. S3_OBJECT_VERSION_ID

    • revisionValue, < revisionValue > dalam contoh ini, diturunkan dari variabel peristiwa sumber.

    { "Rule": "my-rule", "Targets": [ { "Id": "MyTargetId", "Arn": "ARN", "InputTransformer": { "InputPathsMap": { "revisionValue": "$.detail.object.version-id" }, "InputTemplate": { "sourceRevisions": { "actionName": "Source", "revisionType": "S3_OBJECT_VERSION_ID", "revisionValue": "<revisionValue>" } } } } ] }
Untuk mengedit PollForSourceChanges parameter pipeline Anda
penting

Saat Anda membuat pipeline dengan metode ini, PollForSourceChanges parameter default menjadi true jika tidak secara eksplisit disetel ke false. Saat menambahkan deteksi perubahan berbasis peristiwa, Anda harus menambahkan parameter ke output dan menyetelnya ke false untuk menonaktifkan polling. Jika tidak, pipeline Anda dimulai dua kali untuk satu perubahan sumber. Lihat perinciannya di Pengaturan yang valid untuk PollForSourceChanges parameter.

  1. Jalan get-pipeline kan perintah untuk menyalin struktur pipeline ke file JSON. Misalnya, untuk pipeline bernamaMyFirstPipeline, jalankan perintah berikut:

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    Perintah ini tidak mengembalikan apa pun, tetapi file yang Anda buat akan muncul di direktori tempat Anda menjalankan perintah.

  2. Buka file JSON di editor teks biasa dan edit tahap sumber dengan mengubah PollForSourceChanges parameter untuk bucket bernama amzn-s3-demo-source-bucket tofalse, seperti yang ditunjukkan dalam contoh ini.

    Mengapa saya membuat perubahan ini? Menyetel parameter ini untuk false mematikan pemeriksaan berkala sehingga Anda dapat menggunakan deteksi perubahan berbasis peristiwa saja.

    "configuration": { "S3Bucket": "amzn-s3-demo-source-bucket", "PollForSourceChanges": "false", "S3ObjectKey": "index.zip" },
  3. Jika Anda bekerja dengan struktur pipa yang diambil menggunakan get-pipeline perintah, Anda harus menghapus metadata garis dari file JSON. Jika tidak, update-pipeline perintah tidak dapat menggunakannya. Hapus "metadata": { } garis dan "updated" bidang "created""pipelineARN",, dan.

    Misalnya, hapus baris berikut dari struktur:

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" },

    Simpan file tersebut.

  4. Untuk menerapkan perubahan Anda, jalankan update-pipeline perintah, tentukan file JSON pipeline:

    penting

    Pastikan untuk menyertakan file:// sebelum nama file. Diperlukan dalam perintah ini.

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    Perintah ini mengembalikan seluruh struktur pipa yang diedit.

    catatan

    Per update-pipeline intah menghentikan pipa. Jika revisi dijalankan melalui pipeline saat Anda menjalankan update-pipeline perintah, proses tersebut dihentikan. Anda harus memulai pipeline secara manual untuk menjalankan revisi tersebut melalui pipeline yang diperbarui. Gunakan start-pipeline-execution perintah untuk memulai pipeline Anda secara manual.

Migrasikan pipeline polling dengan sumber dan CloudTrail jejak S3 (CloudFormation templat)

Gunakan langkah-langkah ini untuk mengedit pipeline Anda dengan sumber Amazon S3 dari polling hingga deteksi perubahan berbasis peristiwa.

Untuk membuat pipeline berbasis peristiwa dengan Amazon S3, Anda mengedit PollForSourceChanges parameter pipeline Anda dan kemudian menambahkan sumber daya berikut ke template Anda:

  • EventBridge mengharuskan semua peristiwa Amazon S3 harus dicatat. Anda harus membuat kebijakan AWS CloudTrail jejak, bucket, dan bucket yang dapat digunakan Amazon S3 untuk mencatat peristiwa yang terjadi. Untuk informasi selengkapnya, lihat Pencatatan peristiwa data untuk jalur dan Acara pengelolaan logging untuk jalur.

  • EventBridge aturan dan peran IAM untuk memungkinkan acara ini memulai pipeline Anda.

Jika Anda menggunakan CloudFormation untuk membuat dan mengelola pipeline Anda, template Anda menyertakan konten seperti berikut ini.

catatan

Pro Configuration perti di tahap sumber disebutPollForSourceChanges. Jika template Anda tidak menyertakan properti itu, maka PollForSourceChanges diatur ke true secara default.

YAML
AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref S3SourceObjectKey PollForSourceChanges: true RunOrder: 1 ...
JSON
"AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "RoleArn": { "Fn::GetAtt": ["CodePipelineServiceRole", "Arn"] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": true }, "RunOrder": 1 } ] }, ...
Untuk membuat EventBridge aturan dengan Amazon S3 sebagai sumber acara dan CodePipeline sebagai target dan menerapkan kebijakan izin
  1. Di template, di bawahResources, gunakan AWS::IAM::Role CloudFormation sumber daya untuk mengonfigurasi peran IAM yang memungkinkan acara Anda memulai pipeline Anda. Entri ini membuat peran yang menggunakan dua kebijakan:

    • Kebijakan pertama memungkinkan peran untuk diasumsikan.

    • Kebijakan kedua memberikan izin untuk memulai pipeline.

    Mengapa saya membuat perubahan ini? Menambahkan AWS::IAM::Role sumber daya CloudFormation memungkinkan untuk membuat izin untuk EventBridge. Sumber daya ini ditambahkan ke CloudFormation tumpukan Anda.

    YAML
    EventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: eb-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] ...
    JSON
    "EventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "eb-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] ...
  2. Gunakan sumber AWS::Events::Rule CloudFormation daya untuk menambahkan EventBridge aturan. Pola peristiwa ini membuat peristiwa yang memantauCopyObject, PutObject dan CompleteMultipartUpload di bucket sumber Amazon S3 Anda. Selain itu, sertakan target pipeline Anda. KetikaCopyObject,PutObject, atau CompleteMultipartUpload terjadi, aturan ini dipanggil StartPipelineExecution pada pipeline target Anda.

    Mengapa saya membuat perubahan ini? Menambahkan AWS::Events::Rule sumber daya CloudFormation memungkinkan untuk membuat acara. Sumber daya ini ditambahkan ke CloudFormation tumpukan Anda.

    YAML
    EventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.s3 detail-type: - 'AWS API Call via CloudTrail' detail: eventSource: - s3.amazonaws.com eventName: - CopyObject - PutObject - CompleteMultipartUpload requestParameters: bucketName: - !Ref SourceBucket key: - !Ref SourceObjectKey Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt EventRole.Arn Id: codepipeline-AppPipeline ...
    JSON
    "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "source": [ "aws.s3" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "s3.amazonaws.com" ], "eventName": [ "CopyObject", "PutObject", "CompleteMultipartUpload" ], "requestParameters": { "bucketName": [ { "Ref": "SourceBucket" } ], "key": [ { "Ref": "SourceObjectKey" } ] } } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } } }, ...
  3. Tambahkan cuplikan ini ke template pertama Anda untuk memungkinkan fungsionalitas cross-stack:

    YAML
    Outputs: SourceBucketARN: Description: "S3 bucket ARN that Cloudtrail will use" Value: !GetAtt SourceBucket.Arn Export: Name: SourceBucketARN
    JSON
    "Outputs" : { "SourceBucketARN" : { "Description" : "S3 bucket ARN that Cloudtrail will use", "Value" : { "Fn::GetAtt": ["SourceBucket", "Arn"] }, "Export" : { "Name" : "SourceBucketARN" } } ...
  4. (Opsional) Untuk mengonfigurasi transformator input dengan penggantian sumber untuk ID gambar tertentu, gunakan cuplikan YAML berikut. Contoh berikut mengonfigurasi penggantian di mana:

    • Dalam actionName contoh ini, adalah nilai dinamis, didefinisikan pada pembuatan pipeline, bukan berasal dari peristiwa sumber. Source

    • Dalam revisionType contoh ini, adalah nilai dinamis, didefinisikan pada pembuatan pipeline, bukan berasal dari peristiwa sumber. S3_OBJECT_VERSION_ID

    • revisionValue, < revisionValue > dalam contoh ini, diturunkan dari variabel peristiwa sumber.

    --- Rule: my-rule Targets: - Id: MyTargetId Arn: pipeline-ARN InputTransformer: InputPathsMap: revisionValue: "$.detail.object.version-id" InputTemplate: sourceRevisions: actionName: Source revisionType: S3_OBJECT_VERSION_ID revisionValue: '<revisionValue>'
  5. Simpan template yang diperbarui ke komputer lokal Anda, dan buka CloudFormation konsol.

  6. Pilih tumpukan Anda, lalu pilih Buat Set Perubahan untuk Tumpukan Saat Ini.

  7. Unggah template yang diperbarui, lalu lihat perubahan yang tercantum di CloudFormation. Ini adalah perubahan yang akan dilakukan pada tumpukan. Anda harus melihat sumber daya baru Anda dalam daftar.

  8. Pilih Eksekusi.

Untuk mengedit PollForSourceChanges parameter pipeline
penting

Saat Anda membuat pipeline dengan metode ini, PollForSourceChanges parameter default menjadi true jika tidak secara eksplisit disetel ke false. Saat menambahkan deteksi perubahan berbasis peristiwa, Anda harus menambahkan parameter ke output dan menyetelnya ke false untuk menonaktifkan polling. Jika tidak, pipeline Anda dimulai dua kali untuk satu perubahan sumber. Lihat perinciannya di Pengaturan yang valid untuk PollForSourceChanges parameter.

  • Di template, ubah PollForSourceChanges kefalse. Jika Anda tidak menyertakan PollForSourceChanges dalam definisi pipeline Anda, tambahkan dan setel kefalse.

    Mengapa saya membuat perubahan ini? Meng PollForSourceChanges ubah false menjadi mematikan pemeriksaan berkala sehingga Anda dapat menggunakan deteksi perubahan berbasis peristiwa saja.

    YAML
    Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref SourceObjectKey PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": false }, "RunOrder": 1 }
Untuk membuat template kedua untuk CloudTrail sumber daya pipeline Amazon S3 Anda
  • Dalam template terpisah, di bawahResources, gunakanAWS::S3::Bucket,AWS::S3::BucketPolicy, dan AWS::CloudTrail::Trail CloudFormation sumber daya untuk memberikan definisi bucket dan jejak sederhana untuk CloudTrail.

    Mengapa saya membuat perubahan ini? Mengingat batas saat ini lima jalur per akun, CloudTrail jalur harus dibuat dan dikelola secara terpisah. (Lihat Batas di AWS CloudTrail.) Namun, Anda dapat menyertakan banyak bucket Amazon S3 pada satu jejak, sehingga Anda dapat membuat jejak satu kali dan kemudian menambahkan bucket Amazon S3 untuk pipeline lain seperlunya. Tempelkan yang berikut ini ke file template sampel kedua Anda.

    YAML
    ################################################################################### # Prerequisites: # - S3 SourceBucket and SourceObjectKey must exist ################################################################################### Parameters: SourceObjectKey: Description: 'S3 source artifact' Type: String Default: SampleApp_Linux.zip Resources: AWSCloudTrailBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref AWSCloudTrailBucket PolicyDocument: Version: 2012-10-17 Statement: - Sid: AWSCloudTrailAclCheck Effect: Allow Principal: Service: - cloudtrail.amazonaws.com Action: s3:GetBucketAcl Resource: !GetAtt AWSCloudTrailBucket.Arn - Sid: AWSCloudTrailWrite Effect: Allow Principal: Service: - cloudtrail.amazonaws.com Action: s3:PutObject Resource: !Join [ '', [ !GetAtt AWSCloudTrailBucket.Arn, '/AWSLogs/', !Ref 'AWS::AccountId', '/*' ] ] Condition: StringEquals: s3:x-amz-acl: bucket-owner-full-control AWSCloudTrailBucket: Type: AWS::S3::Bucket DeletionPolicy: Retain AwsCloudTrail: DependsOn: - AWSCloudTrailBucketPolicy Type: AWS::CloudTrail::Trail Properties: S3BucketName: !Ref AWSCloudTrailBucket EventSelectors: - DataResources: - Type: AWS::S3::Object Values: - !Join [ '', [ !ImportValue SourceBucketARN, '/', !Ref SourceObjectKey ] ] ReadWriteType: WriteOnly IncludeManagementEvents: false IncludeGlobalServiceEvents: true IsLogging: true IsMultiRegionTrail: true ...
    JSON
    { "Parameters": { "SourceObjectKey": { "Description": "S3 source artifact", "Type": "String", "Default": "SampleApp_Linux.zip" } }, "Resources": { "AWSCloudTrailBucket": { "Type": "AWS::S3::Bucket", "DeletionPolicy": "Retain" }, "AWSCloudTrailBucketPolicy": { "Type": "AWS::S3::BucketPolicy", "Properties": { "Bucket": { "Ref": "AWSCloudTrailBucket" }, "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailAclCheck", "Effect": "Allow", "Principal": { "Service": [ "cloudtrail.amazonaws.com" ] }, "Action": "s3:GetBucketAcl", "Resource": { "Fn::GetAtt": [ "AWSCloudTrailBucket", "Arn" ] } }, { "Sid": "AWSCloudTrailWrite", "Effect": "Allow", "Principal": { "Service": [ "cloudtrail.amazonaws.com" ] }, "Action": "s3:PutObject", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "AWSCloudTrailBucket", "Arn" ] }, "/AWSLogs/", { "Ref": "AWS::AccountId" }, "/*" ] ] }, "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] } } }, "AwsCloudTrail": { "DependsOn": [ "AWSCloudTrailBucketPolicy" ], "Type": "AWS::CloudTrail::Trail", "Properties": { "S3BucketName": { "Ref": "AWSCloudTrailBucket" }, "EventSelectors": [ { "DataResources": [ { "Type": "AWS::S3::Object", "Values": [ { "Fn::Join": [ "", [ { "Fn::ImportValue": "SourceBucketARN" }, "/", { "Ref": "SourceObjectKey" } ] ] } ] } ], "ReadWriteType": "WriteOnly", "IncludeManagementEvents": false } ], "IncludeGlobalServiceEvents": true, "IsLogging": true, "IsMultiRegionTrail": true } } } } ...
contoh

Saat Anda menggunakan CloudFormation untuk membuat sumber daya ini, pipeline Anda dipicu saat file di repositori Anda dibuat atau diperbarui.

catatan

Jangan berhenti di sini. Meskipun pipeline Anda dibuat, Anda harus membuat CloudFormation template kedua untuk pipeline Amazon S3 Anda. Jika Anda tidak membuat template kedua, pipeline Anda tidak memiliki fungsi deteksi perubahan.

YAML
Resources: SourceBucket: Type: AWS::S3::Bucket Properties: VersioningConfiguration: Status: Enabled CodePipelineArtifactStoreBucket: Type: AWS::S3::Bucket CodePipelineArtifactStoreBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref CodePipelineArtifactStoreBucket PolicyDocument: Version: 2012-10-17 Statement: - Sid: DenyUnEncryptedObjectUploads Effect: Deny Principal: '*' Action: s3:PutObject Resource: !Join [ '', [ !GetAtt CodePipelineArtifactStoreBucket.Arn, '/*' ] ] Condition: StringNotEquals: s3:x-amz-server-side-encryption: aws:kms - Sid: DenyInsecureConnections Effect: Deny Principal: '*' Action: s3:* Resource: !Join [ '', [ !GetAtt CodePipelineArtifactStoreBucket.Arn, '/*' ] ] Condition: Bool: aws:SecureTransport: false CodePipelineServiceRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - codepipeline.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: AWS-CodePipeline-Service-3 PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - codecommit:CancelUploadArchive - codecommit:GetBranch - codecommit:GetCommit - codecommit:GetUploadArchiveStatus - codecommit:UploadArchive Resource: 'resource_ARN' - Effect: Allow Action: - codedeploy:CreateDeployment - codedeploy:GetApplicationRevision - codedeploy:GetDeployment - codedeploy:GetDeploymentConfig - codedeploy:RegisterApplicationRevision Resource: 'resource_ARN' - Effect: Allow Action: - codebuild:BatchGetBuilds - codebuild:StartBuild Resource: 'resource_ARN' - Effect: Allow Action: - devicefarm:ListProjects - devicefarm:ListDevicePools - devicefarm:GetRun - devicefarm:GetUpload - devicefarm:CreateUpload - devicefarm:ScheduleRun Resource: 'resource_ARN' - Effect: Allow Action: - lambda:InvokeFunction - lambda:ListFunctions Resource: 'resource_ARN' - Effect: Allow Action: - iam:PassRole Resource: 'resource_ARN' - Effect: Allow Action: - elasticbeanstalk:* - ec2:* - elasticloadbalancing:* - autoscaling:* - cloudwatch:* - s3:* - sns:* - cloudformation:* - rds:* - sqs:* - ecs:* Resource: 'resource_ARN' AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: s3-events-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref SourceObjectKey PollForSourceChanges: false RunOrder: 1 - Name: Beta Actions: - Name: BetaAction InputArtifacts: - Name: SourceOutput ActionTypeId: Category: Deploy Owner: AWS Version: 1 Provider: CodeDeploy Configuration: ApplicationName: !Ref ApplicationName DeploymentGroupName: !Ref BetaFleet RunOrder: 1 ArtifactStore: Type: S3 Location: !Ref CodePipelineArtifactStoreBucket EventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: eb-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] EventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.s3 detail-type: - 'AWS API Call via CloudTrail' detail: eventSource: - s3.amazonaws.com eventName: - PutObject - CompleteMultipartUpload resources: ARN: - !Join [ '', [ !GetAtt SourceBucket.Arn, '/', !Ref SourceObjectKey ] ] Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt EventRole.Arn Id: codepipeline-AppPipeline Outputs: SourceBucketARN: Description: "S3 bucket ARN that Cloudtrail will use" Value: !GetAtt SourceBucket.Arn Export: Name: SourceBucketARN
JSON
"Resources": { "SourceBucket": { "Type": "AWS::S3::Bucket", "Properties": { "VersioningConfiguration": { "Status": "Enabled" } } }, "CodePipelineArtifactStoreBucket": { "Type": "AWS::S3::Bucket" }, "CodePipelineArtifactStoreBucketPolicy": { "Type": "AWS::S3::BucketPolicy", "Properties": { "Bucket": { "Ref": "CodePipelineArtifactStoreBucket" }, "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "CodePipelineArtifactStoreBucket", "Arn" ] }, "/*" ] ] }, "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms" } } }, { "Sid": "DenyInsecureConnections", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "CodePipelineArtifactStoreBucket", "Arn" ] }, "/*" ] ] }, "Condition": { "Bool": { "aws:SecureTransport": false } } } ] } } }, "CodePipelineServiceRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "codepipeline.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "AWS-CodePipeline-Service-3", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:CancelUploadArchive", "codecommit:GetBranch", "codecommit:GetCommit", "codecommit:GetUploadArchiveStatus", "codecommit:UploadArchive" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "codedeploy:CreateDeployment", "codedeploy:GetApplicationRevision", "codedeploy:GetDeployment", "codedeploy:GetDeploymentConfig", "codedeploy:RegisterApplicationRevision" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "codebuild:BatchGetBuilds", "codebuild:StartBuild" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "devicefarm:ListProjects", "devicefarm:ListDevicePools", "devicefarm:GetRun", "devicefarm:GetUpload", "devicefarm:CreateUpload", "devicefarm:ScheduleRun" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:ListFunctions" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "elasticbeanstalk:*", "ec2:*", "elasticloadbalancing:*", "autoscaling:*", "cloudwatch:*", "s3:*", "sns:*", "cloudformation:*", "rds:*", "sqs:*", "ecs:*" ], "Resource": "resource_ARN" } ] } } ] } }, "AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "Name": "s3-events-pipeline", "RoleArn": { "Fn::GetAtt": [ "CodePipelineServiceRole", "Arn" ] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": false }, "RunOrder": 1 } ] }, { "Name": "Beta", "Actions": [ { "Name": "BetaAction", "InputArtifacts": [ { "Name": "SourceOutput" } ], "ActionTypeId": { "Category": "Deploy", "Owner": "AWS", "Version": 1, "Provider": "CodeDeploy" }, "Configuration": { "ApplicationName": { "Ref": "ApplicationName" }, "DeploymentGroupName": { "Ref": "BetaFleet" } }, "RunOrder": 1 } ] } ], "ArtifactStore": { "Type": "S3", "Location": { "Ref": "CodePipelineArtifactStoreBucket" } } } }, "EventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "eb-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] } } ] } } ] } }, "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "source": [ "aws.s3" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "s3.amazonaws.com" ], "eventName": [ "PutObject", "CompleteMultipartUpload" ], "resources": { "ARN": [ { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "SourceBucket", "Arn" ] }, "/", { "Ref": "SourceObjectKey" } ] ] } ] } } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } } }, "Outputs" : { "SourceBucketARN" : { "Description" : "S3 bucket ARN that Cloudtrail will use", "Value" : { "Fn::GetAtt": ["SourceBucket", "Arn"] }, "Export" : { "Name" : "SourceBucketARN" } } } } ...

Migrasikan saluran polling untuk tindakan sumber GitHub (melalui aplikasi OAuth) ke koneksi

Anda dapat memigrasikan tindakan sumber GitHub (melalui aplikasi OAuth) untuk menggunakan koneksi untuk repositori eksternal Anda. Ini adalah metode deteksi perubahan yang disarankan untuk pipeline dengan tindakan sumber GitHub (melalui aplikasi OAuth).

Untuk pipeline dengan tindakan sumber GitHub (melalui aplikasi OAuth), kami sarankan memodifikasi pipeline untuk menggunakan tindakan GitHub (melalui GitHub Aplikasi) sehingga deteksi perubahan dilakukan secara otomatis. AWS CodeConnections Untuk informasi selengkapnya tentang bekerja dengan koneksi, lihatGitHub koneksi.

Buat koneksi ke GitHub (konsol)

Anda dapat menggunakan konsol untuk membuat koneksi ke GitHub.

Langkah 1: Ganti tindakan Anda GitHub (melalui aplikasi OAuth)

Gunakan halaman edit pipeline untuk mengganti tindakan Anda GitHub (melalui aplikasi OAuth) dengan tindakan GitHub (melalui GitHub Aplikasi).

Untuk mengganti tindakan Anda GitHub (melalui aplikasi OAuth)
  1. Masuk ke CodePipeline konsol.

  2. Pilih pipeline Anda, dan pilih Edit. Pilih Edit stage pada panggung sumber Anda. Sebuah pesan ditampilkan yang menyarankan Anda memperbarui tindakan Anda.

  3. Di penyedia Action, pilih GitHub (melalui GitHub Aplikasi).

  4. Lakukan salah satu tindakan berikut:

    • Di bawah Kon eksi, jika Anda belum membuat koneksi ke penyedia Anda, pilih Hubun gkan ke GitHub. Lanjutkan ke Langkah 2: Buat koneksi ke GitHub.

    • Di bawah Kon eksi, jika Anda telah membuat koneksi ke penyedia Anda, pilih koneksi. Lanjutkan ke Langkah 3: Simpan Aksi Sumber untuk Koneksi Anda.

Langkah 2: Buat koneksi ke GitHub

Setelah Anda memilih untuk membuat koneksi, GitHub halaman Connect to ditampilkan.

Untuk membuat koneksi ke GitHub
  1. Di bawah pengaturan GitHub koneksi, nama koneksi Anda ditampilkan di Nama koneksi.

    Di bawah GitHub Aplikasi, pilih instalasi aplikasi atau pilih Instal aplikasi baru untuk membuatnya.

    catatan

    Anda menginstal satu aplikasi untuk semua koneksi Anda ke penyedia tertentu. Jika Anda telah menginstal GitHub aplikasi, pilih dan lewati langkah ini.

  2. Jika halaman otorisasi untuk GitHub ditampilkan, masuk dengan kredensional Anda dan kemudian pilih untuk melanjutkan.

  3. Pada halaman instalasi aplikasi, sebuah pesan menunjukkan bahwa AWS CodeStar aplikasi sedang mencoba menyambung ke GitHub akun Anda.

    catatan

    Anda hanya menginstal aplikasi sekali untuk setiap GitHub akun. Jika sebelumnya Anda menginstal aplikasi, Anda dapat memilih Konfigurasi untuk melanjutkan ke halaman modifikasi untuk instalasi aplikasi Anda, atau Anda dapat menggunakan tombol kembali untuk kembali ke konsol.

  4. Pada AWS CodeStar halaman Instal, pilih Instal.

  5. Pada GitHub halaman Connect to, ID koneksi untuk instalasi baru Anda ditampilkan. Pilih Hubungkan.

Langkah 3: Simpan tindakan GitHub sumber Anda

Selesaikan pembaruan Anda di halaman Edit tindakan untuk menyimpan tindakan sumber baru Anda.

Untuk menyimpan tindakan GitHub sumber Anda
  1. Di Repositori, masukkan nama repositori pihak ketiga Anda. Di Cab ang, masukkan cabang tempat Anda ingin pipeline mendeteksi perubahan sumber.

    catatan

    Di Repositori, ke owner-name/repository-name tik seperti yang ditunjukkan dalam contoh ini:

    my-account/my-repository
  2. Dalam format artefak keluaran, pilih format untuk artefak Anda.

  3. Di artefak keluaran, Anda dapat mempertahankan nama artefak keluaran untuk tindakan ini, sepertiSourceArtifact. Pilih Selesai untuk menutup halaman tindakan Edit.

  4. Pilih Sel esai untuk menutup halaman pengeditan panggung. Pilih Simpan untuk menutup halaman pengeditan pipeline.

Buat koneksi ke GitHub (CLI)

Anda dapat menggunakan AWS Command Line Interface (AWS CLI) untuk membuat koneksi ke GitHub.

Untuk melakukannya, gunakan perintah create-connection.

penting

Koneksi yang dibuat melalui AWS CLI atau AWS CloudFormation berada dalam PENDING status secara default. Setelah Anda membuat koneksi dengan CLI atau CloudFormation, gunakan konsol untuk mengedit koneksi untuk membuat stat AVAILABLE usnya.

Untuk membuat koneksi ke GitHub
  1. Buka terminal (Linux, macOS, atau Unix) atau command prompt (Windows). Gunakan AWS CLI untuk menjalankan create-connection perintah, menentukan --provider-type dan --connection-name untuk koneksi Anda. Dalam contoh ini, nama penyedia pihak ketiga adalah GitHub dan nama koneksi yang ditentukan adalah MyConnection.

    aws codeconnections create-connection --provider-type GitHub --connection-name MyConnection

    Jika berhasil, perintah ini mengembalikan informasi ARN koneksi seperti berikut ini.

    { "ConnectionArn": "arn:aws:codeconnections:us-west-2:account_id:connection/aEXAMPLE-8aad-4d5d-8878-dfcab0bc441f" }
  2. Gunakan konsol untuk menyelesaikan koneksi.

Migrasikan pipeline polling untuk tindakan sumber GitHub (melalui aplikasi OAuth) ke webhook

Anda dapat memigrasikan pipeline Anda untuk menggunakan webhook untuk mendeteksi perubahan di repositori GitHub sumber Anda. Migrasi ke webhook ini hanya untuk tindakan GitHub (melalui aplikasi OAuth).

penting

Saat membuat CodePipeline webhook, jangan gunakan kredenSIAL Anda sendiri atau gunakan kembali token rahasia yang sama di beberapa webhook. Untuk keamanan optimal, buat token rahasia unik untuk setiap webhook yang Anda buat. Token rahasia adalah string arbitrer yang Anda berikan, yang digunakan untuk GitHub menghitung dan menandatangani muatan webhook yang dikirim ke CodePipeline, untuk melindungi integritas dan keaslian muatan webhook. Menggunakan kredenSIAL Anda sendiri atau menggunakan kembali token yang sama di beberapa webhook dapat menyebabkan kerentanan keamanan.

Migrasikan saluran polling ke webhook (GitHub (melalui aplikasi OAuth) tindakan sumber) (konsol)

Untuk tindakan sumber GitHub (melalui aplikasi OAuth), Anda dapat menggunakan CodePipeline konsol untuk memperbarui pipeline Anda untuk menggunakan webhook untuk mendeteksi perubahan di repositori sumber Anda GitHub .

Ikuti langkah-langkah ini untuk mengedit pipeline yang menggunakan polling (pemeriksaan berkala) untuk digunakan sebagai EventBridge gantinya. Jika Anda ingin membuat pipeline, lihatBuat pipeline, tahapan, dan tindakan.

Saat Anda menggunakan konsol, PollForSourceChanges parameter untuk pipeline Anda diubah untuk Anda. GitHub Webhook dibuat dan didaftarkan untuk Anda.

Untuk mengedit tahap sumber pipeline
  1. Masuk ke Konsol Manajemen AWS dan buka CodePipeline konsol di http://console.aws.amazon.com/codesuite/codepipeline/home.

    Nama-nama semua pipeline yang terkait dengan AWS akun Anda ditampilkan.

  2. Di Nama, pilih nama pipeline yang ingin Anda edit. Ini membuka tampilan rinci dari pipa, termasuk keadaan masing-masing tindakan di setiap tahap pipa.

  3. Pada halaman rincian pipeline, pilih Edit.

  4. Pada tahap Edit, pilih ikon edit pada tindakan sumber.

  5. Per luas Opsi deteksi perubahan dan pilih Gunakan Amazon CloudWatch Events untuk memulai pipeline saya secara otomatis saat terjadi perubahan (disarankan).

    Sebuah pesan ditampilkan untuk menyarankan bahwa CodePipeline membuat webhook GitHub untuk mendeteksi perubahan sumber: AWS CodePipeline akan membuat webhook untuk Anda. Anda dapat memilih keluar dalam opsi di bawah ini. Pilih Perbarui. Selain webhook, membuat CodePipeline yang berikut:

    • Rahasia, dibuat secara acak dan digunakan untuk mengotorisasi koneksi ke GitHub.

    • URL webhook, dibuat menggunakan titik akhir publik untuk Wilayah.

    CodePipeline mendaftarkan webhook dengan GitHub. Ini berlangganan URL untuk menerima peristiwa repositori.

  6. Setelah selesai mengedit pipeline, pilih S impan perubahan pipeline untuk kembali ke halaman ringkasan.

    Sebuah pesan menampilkan nama webhook yang akan dibuat untuk pipeline Anda. Jangan pilih Save and continue (Simpan dan lanjutkan).

  7. Untuk menguji tindakan Anda, lepaskan perubahan dengan menggunakan AWS CLI untuk melakukan perubahan ke sumber yang ditentukan dalam tahap sumber pipeline.

Migrasikan pipeline polling ke webhook (GitHub (melalui aplikasi OAuth) tindakan sumber) (CLI)

Ikuti langkah-langkah ini untuk mengedit pipeline yang menggunakan pemeriksaan berkala untuk menggunakan webhook sebagai gantinya. Jika Anda ingin membuat pipeline, lihatBuat pipeline, tahapan, dan tindakan.

Untuk membangun pipeline berbasis peristiwa, Anda mengedit PollForSourceChanges parameter pipeline Anda dan kemudian membuat sumber daya berikut secara manual:

  • GitHub parameter webhook dan otorisasi

Untuk membuat dan mendaftarkan webhook Anda
catatan

Saat Anda menggunakan CLI atau CloudFormation untuk membuat pipeline dan menambahkan webhook, Anda harus menonaktifkan pemeriksaan berkala. Untuk menonaktifkan pemeriksaan berkala, Anda harus menambahkan PollForSourceChanges parameter secara eksplisit dan mengaturnya ke false, seperti yang dijelaskan dalam prosedur akhir di bawah ini. Jika tidak, default untuk CLI atau CloudFormation pipeline adalah PollForSourceChanges default true dan tidak ditampilkan dalam output struktur pipa. Untuk informasi selengkapnya tentang PollForSourceChanges default, lihatPengaturan yang valid untuk PollForSourceChanges parameter.

  1. Dalam editor teks, buat dan simpan file JSON untuk webhook yang ingin Anda buat. Gunakan file sampel ini untuk webhook bernama: my-webhook

    { "webhook": { "name": "my-webhook", "targetPipeline": "pipeline_name", "targetAction": "source_action_name", "filters": [{ "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" }], "authentication": "GITHUB_HMAC", "authenticationConfiguration": { "SecretToken": "secret" } } }
  2. Panggil put-webhook perintah dan sertakan --region parameter --cli-input dan.

    Perintah contoh berikut membuat webhook dengan file webhook_json JSON.

    aws codepipeline put-webhook --cli-input-json file://webhook_json.json --region "eu-central-1"
  3. Dalam output yang ditunjukkan dalam contoh ini, URL dan ARN dikembalikan untuk webhook bernamamy-webhook.

    { "webhook": { "url": "https://webhooks.domain.com/trigger111111111EXAMPLE11111111111111111", "definition": { "authenticationConfiguration": { "SecretToken": "secret" }, "name": "my-webhook", "authentication": "GITHUB_HMAC", "targetPipeline": "pipeline_name", "targetAction": "Source", "filters": [ { "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" } ] }, "arn": "arn:aws:codepipeline:eu-central-1:ACCOUNT_ID:webhook:my-webhook" }, "tags": [{ "key": "Project", "value": "ProjectA" }] }

    Contoh ini menambahkan tagging ke webhook dengan menyertakan kunci Project tag dan ProjectA nilai pada webhook. Untuk informasi selengkapnya tentang menandai sumber daya di CodePipeline, lihatPenandaan pada sumber daya.

  4. Panggil register-webhook-with-third-party perintah dan sertakan --webhook-name parameter.

    Contoh perintah berikut mendaftarkan webhook bernamamy-webhook.

    aws codepipeline register-webhook-with-third-party --webhook-name my-webhook
Untuk mengedit PollForSourceChanges parameter pipeline
penting

Saat Anda membuat pipeline dengan metode ini, PollForSourceChanges parameter default menjadi true jika tidak secara eksplisit disetel ke false. Saat menambahkan deteksi perubahan berbasis peristiwa, Anda harus menambahkan parameter ke output dan menyetelnya ke false untuk menonaktifkan polling. Jika tidak, pipeline Anda dimulai dua kali untuk satu perubahan sumber. Lihat perinciannya di Pengaturan yang valid untuk PollForSourceChanges parameter.

  1. Jalan get-pipeline kan perintah untuk menyalin struktur pipeline ke file JSON. Misalnya, untuk pipeline bernamaMyFirstPipeline, Anda akan mengetikkan perintah berikut:

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    Perintah ini tidak mengembalikan apa pun, tetapi file yang Anda buat akan muncul di direktori tempat Anda menjalankan perintah.

  2. Buka file JSON di editor teks biasa dan edit tahap sumber dengan mengubah atau menambahkan parameter. PollForSourceChanges Dalam contoh ini, untuk repositori bernamaUserGitHubRepo, parameter disetel kefalse.

    Mengapa saya membuat perubahan ini? Mengubah parameter ini akan mematikan pemeriksaan berkala sehingga Anda dapat menggunakan deteksi perubahan berbasis peristiwa saja.

    "configuration": { "Owner": "name", "Repo": "UserGitHubRepo", "PollForSourceChanges": "false", "Branch": "main", "OAuthToken": "****" },
  3. Jika Anda bekerja dengan struktur pipeline yang diambil menggunakan get-pipeline perintah, Anda harus mengedit struktur dalam file JSON dengan menghapus metadata garis dari file. Jika tidak, update-pipeline perintah tidak dapat menggunakannya. Hapus "metadata" bagian dari struktur pipeline dalam file JSON, termasuk "updated" bidang: { } dan"created","pipelineARN", dan.

    Misalnya, hapus baris berikut dari struktur:

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" },

    Simpan file tersebut.

  4. Untuk menerapkan perubahan Anda, jalankan update-pipeline perintah, tentukan file JSON pipeline, mirip dengan yang berikut:

    penting

    Pastikan untuk menyertakan file:// sebelum nama file. Diperlukan dalam perintah ini.

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    Perintah ini mengembalikan seluruh struktur pipa yang diedit.

    catatan

    Per update-pipeline intah menghentikan pipa. Jika revisi dijalankan melalui pipeline saat Anda menjalankan update-pipeline perintah, proses tersebut dihentikan. Anda harus memulai pipeline secara manual untuk menjalankan revisi tersebut melalui pipeline yang diperbarui. Gunakan start-pipeline-execution perintah untuk memulai pipeline Anda secara manual.

Perbarui pipeline untuk peristiwa push (GitHub (melalui aplikasi OAuth) tindakan sumber) (CloudFormation templat)

Ikuti langkah-langkah berikut untuk memperbarui pipeline Anda (dengan GitHub sumber) dari pemeriksaan berkala (polling) hingga deteksi perubahan berbasis peristiwa menggunakan webhook.

Untuk membangun pipeline berbasis peristiwa AWS CodeCommit, Anda mengedit PollForSourceChanges parameter pipeline Anda dan kemudian menambahkan sumber daya GitHub webhook ke template Anda.

Jika Anda menggunakan CloudFormation untuk membuat dan mengelola pipeline Anda, template Anda memiliki konten seperti berikut ini.

catatan

Perhatikan properti PollForSourceChanges konfigurasi di tahap sumber. Jika template Anda tidak menyertakan properti itu, maka PollForSourceChanges disetel ke true secara default.

YAML
Resources: AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: github-polling-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: ThirdParty Version: 1 Provider: GitHub OutputArtifacts: - Name: SourceOutput Configuration: Owner: !Ref GitHubOwner Repo: !Ref RepositoryName Branch: !Ref BranchName OAuthToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} PollForSourceChanges: true RunOrder: 1 ...
JSON
"AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "Name": "github-polling-pipeline", "RoleArn": { "Fn::GetAtt": [ "CodePipelineServiceRole", "Arn" ] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "ThirdParty", "Version": 1, "Provider": "GitHub" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "Owner": { "Ref": "GitHubOwner" }, "Repo": { "Ref": "RepositoryName" }, "Branch": { "Ref": "BranchName" }, "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}", "PollForSourceChanges": true }, "RunOrder": 1 } ] }, ...
Untuk menambahkan parameter dan membuat webhook di template Anda

Kami sangat menyarankan Anda menggunakan AWS Secrets Manager untuk menyimpan kredensibilitas Anda. Jika Anda menggunakan Secrets Manager, Anda harus sudah mengkonfigurasi dan menyimpan parameter rahasia Anda di Secrets Manager. Contoh ini menggunakan referensi dinamis ke Secrets Manager untuk GitHub kredenSIAL untuk webhook Anda. Untuk informasi selengkapnya, lihat Menggunakan Referensi Dinamis untuk Menentukan Nilai Templat.

penting

Saat meneruskan parameter rahasia, jangan masukkan nilainya langsung ke templat. Nilai tersebut diberikan sebagai teks biasa dan karena itu dapat dibaca. Untuk alasan keamanan, jangan gunakan plaintext di CloudFormation template Anda untuk menyimpan kredensibilitas Anda.

Saat Anda menggunakan CLI atau CloudFormation untuk membuat pipeline dan menambahkan webhook, Anda harus menonaktifkan pemeriksaan berkala.

catatan

Untuk menonaktifkan pemeriksaan berkala, Anda harus menambahkan PollForSourceChanges parameter secara eksplisit dan mengaturnya ke false, seperti yang dijelaskan dalam prosedur akhir di bawah ini. Jika tidak, default untuk CLI atau CloudFormation pipeline adalah PollForSourceChanges default true dan tidak ditampilkan dalam output struktur pipa. Untuk informasi selengkapnya tentang PollForSourceChanges default, lihatPengaturan yang valid untuk PollForSourceChanges parameter.

  1. Di template, di bawahResources, tambahkan parameter Anda:

    YAML
    Parameters: GitHubOwner: Type: String ...
    JSON
    { "Parameters": { "BranchName": { "Description": "GitHub branch name", "Type": "String", "Default": "main" }, "GitHubOwner": { "Type": "String" }, ...
  2. Gunakan sumber AWS::CodePipeline::Webhook CloudFormation daya untuk menambahkan webhook.

    catatan

    Yang TargetAction Anda tentukan harus sesuai Name dengan properti tindakan sumber yang ditentukan dalam pipeline.

    Jika RegisterWithThirdParty disetel ketrue, pastikan pengguna yang terkait dengan OAuthToken dapat mengatur cakupan yang diperlukan di GitHub. Token dan webhook memerlukan cakupan berikut GitHub :

    • repo- digunakan untuk kontrol penuh untuk membaca dan menarik artefak dari repositori publik dan pribadi ke dalam pipa.

    • admin:repo_hook- digunakan untuk kontrol penuh kait repositori.

    Jika tidak, GitHub mengembalikan 404. Untuk informasi lebih lanjut tentang 404 yang dikembalikan, lihathttps://help.github.com/articles/about-webhooks.

    YAML
    AppPipelineWebhook: Type: AWS::CodePipeline::Webhook Properties: Authentication: GITHUB_HMAC AuthenticationConfiguration: SecretToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} Filters: - JsonPath: "$.ref" MatchEquals: refs/heads/{Branch} TargetPipeline: !Ref AppPipeline TargetAction: SourceAction Name: AppPipelineWebhook TargetPipelineVersion: !GetAtt AppPipeline.Version RegisterWithThirdParty: true ...
    JSON
    "AppPipelineWebhook": { "Type": "AWS::CodePipeline::Webhook", "Properties": { "Authentication": "GITHUB_HMAC", "AuthenticationConfiguration": { "SecretToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}" }, "Filters": [{ "JsonPath": "$.ref", "MatchEquals": "refs/heads/{Branch}" }], "TargetPipeline": { "Ref": "AppPipeline" }, "TargetAction": "SourceAction", "Name": "AppPipelineWebhook", "TargetPipelineVersion": { "Fn::GetAtt": [ "AppPipeline", "Version" ] }, "RegisterWithThirdParty": true } }, ...
  3. Simpan template yang diperbarui ke komputer lokal Anda, lalu buka CloudFormation konsol.

  4. Pilih tumpukan Anda, lalu pilih Buat Set Perubahan untuk Tumpukan Saat Ini.

  5. Unggah template, lalu lihat perubahan yang tercantum di CloudFormation. Ini adalah perubahan yang harus dilakukan pada tumpukan. Anda harus melihat sumber daya baru Anda dalam daftar.

  6. Pilih Eksekusi.

Untuk mengedit PollForSourceChanges parameter pipeline
penting

Saat Anda membuat pipeline dengan metode ini, PollForSourceChanges parameter default menjadi true jika tidak secara eksplisit disetel ke false. Saat menambahkan deteksi perubahan berbasis peristiwa, Anda harus menambahkan parameter ke output dan menyetelnya ke false untuk menonaktifkan polling. Jika tidak, pipeline Anda dimulai dua kali untuk satu perubahan sumber. Lihat perinciannya di Pengaturan yang valid untuk PollForSourceChanges parameter.

  • Di template, ubah PollForSourceChanges kefalse. Jika Anda tidak menyertakan PollForSourceChanges dalam definisi pipeline Anda, tambahkan dan setel ke false.

    Mengapa saya membuat perubahan ini? Mengubah parameter ini untuk false mematikan pemeriksaan berkala sehingga Anda dapat menggunakan deteksi perubahan berbasis peristiwa saja.

    YAML
    Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: ThirdParty Version: 1 Provider: GitHub OutputArtifacts: - Name: SourceOutput Configuration: Owner: !Ref GitHubOwner Repo: !Ref RepositoryName Branch: !Ref BranchName OAuthToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "Source", "Actions": [{ "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "ThirdParty", "Version": 1, "Provider": "GitHub" }, "OutputArtifacts": [{ "Name": "SourceOutput" }], "Configuration": { "Owner": { "Ref": "GitHubOwner" }, "Repo": { "Ref": "RepositoryName" }, "Branch": { "Ref": "BranchName" }, "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}", PollForSourceChanges: false }, "RunOrder": 1 }]
contoh

Saat Anda membuat sumber daya ini dengan CloudFormation, webhook yang ditentukan dibuat di GitHub repositori yang ditentukan. Pipeline Anda dipicu saat komit.

YAML
Parameters: GitHubOwner: Type: String Resources: AppPipelineWebhook: Type: AWS::CodePipeline::Webhook Properties: Authentication: GITHUB_HMAC AuthenticationConfiguration: SecretToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} Filters: - JsonPath: "$.ref" MatchEquals: refs/heads/{Branch} TargetPipeline: !Ref AppPipeline TargetAction: SourceAction Name: AppPipelineWebhook TargetPipelineVersion: !GetAtt AppPipeline.Version RegisterWithThirdParty: true AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: github-events-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: ThirdParty Version: 1 Provider: GitHub OutputArtifacts: - Name: SourceOutput Configuration: Owner: !Ref GitHubOwner Repo: !Ref RepositoryName Branch: !Ref BranchName OAuthToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} PollForSourceChanges: false RunOrder: 1 ...
JSON
{ "Parameters": { "BranchName": { "Description": "GitHub branch name", "Type": "String", "Default": "main" }, "RepositoryName": { "Description": "GitHub repository name", "Type": "String", "Default": "test" }, "GitHubOwner": { "Type": "String" }, "ApplicationName": { "Description": "CodeDeploy application name", "Type": "String", "Default": "DemoApplication" }, "BetaFleet": { "Description": "Fleet configured in CodeDeploy", "Type": "String", "Default": "DemoFleet" } }, "Resources": { ... }, "AppPipelineWebhook": { "Type": "AWS::CodePipeline::Webhook", "Properties": { "Authentication": "GITHUB_HMAC", "AuthenticationConfiguration": { "SecretToken": { "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}" } }, "Filters": [ { "JsonPath": "$.ref", "MatchEquals": "refs/heads/{Branch}" } ], "TargetPipeline": { "Ref": "AppPipeline" }, "TargetAction": "SourceAction", "Name": "AppPipelineWebhook", "TargetPipelineVersion": { "Fn::GetAtt": [ "AppPipeline", "Version" ] }, "RegisterWithThirdParty": true } }, "AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "Name": "github-events-pipeline", "RoleArn": { "Fn::GetAtt": [ "CodePipelineServiceRole", "Arn" ] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "ThirdParty", "Version": 1, "Provider": "GitHub" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "Owner": { "Ref": "GitHubOwner" }, "Repo": { "Ref": "RepositoryName" }, "Branch": { "Ref": "BranchName" }, "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}", "PollForSourceChanges": false }, "RunOrder": 1 ...