Wir haben: ein Web-API-Projekt auf .net Core mit Quellen in GitHub.
Was wir wollen: Autodeploy auf einer virtuellen AWS EC2-Maschine nach Abschluss der Arbeit mit dem Code (z. B. Push an einen Entwicklungszweig).
Toolkit: GitHub-Aktionen, AWS CodeDeploy, S3, EC2.
Unterhalb des Ablaufs des Prozesses, den wir implementieren werden, sind wir gefahren.

1. Benutzer und Rollen
1.1. Benutzer, der über GitHub Action auf AWS zugreift
Dieser Benutzer wird verwendet, um über AWS CLI 2 eine Verbindung zu AWS S3- und CodeDeploy-Diensten herzustellen, wenn GitHub-Aktionen ausgeführt werden.
1. Gehen Sie zur AWS IAM-Konsole links im Benutzermenü und fügen Sie Benutzer hinzu
2. Legen Sie einen beliebigen Namen fest und aktivieren Sie das Kontrollkästchen Programmatischer Zugriff
3. Wählen Sie als Nächstes im Abschnitt Berechtigungen die Option Vorhandene Richtlinien direkt anhängen aus und fügen Sie die Richtlinien AmazonS3FullAccess und AWSCodeDeployDeployerAccess hinzu.
4. Tags können übersprungen werden. In der Überprüfungsphase sollten Sie Folgendes erhalten:

5. Klicken Sie auf Benutzer erstellen und speichern Sie die Benutzerdaten. Wir benötigen später die Zugangsschlüssel-ID und den geheimen Zugangsschlüssel.
1.2. Servicerolle für AWS EC2-Instanzen
EC2, , AWS CodeDeploy.
AWS IAM, Role, Add Role
AWS Service, Choose a use case EC2
AmazonEC2RoleforAWSCodeDeploy.
Review
, , ProjectXCodeDeployInstanceRole Review :

1.3. AWS CodeDeploy
AWS CodeDeploy AWS EC2.
1. AWS IAM, Role, Add Role
2. AWS Service, Use case CodeDeploy:

3. , (AWSCodeDeployRole)
4. , , ProjectXCodeDeploy Review :

2. AWS EC2
AWS EC2
ProjectXCodeDeployInstanceRole, 1.2
CodeDeploy Agent . .
: , , sudo service codedeploy-agent restart
3. AWS CodeDeploy
1. AWS CodeDeploy
2. Deploy, Applications
3. Create application
4. , , projectx Compute platform EC2/On-Premises

5. , Create deployment group
6. , develop . , 1.3 (ProjectXCodeDeploy).
7. Deployment type In place ( ).
8. Environment configuration Amazon EC2 Instances .
4. AWS S3
AWS S3.
AWS S3, Create bucket.
, , projectx-codedeploy-deployments. Block all public access. Create bucket.

5. appspec.yml
, CodeDeploy Agent . AWS CodeDeploy appspec.yml. :
version: 0.0
os: linux
files:
- source: /
destination: /opt/projectx
permissions:
- object: /opt/projectx
owner: ubuntu
group: ubuntu
type:
- directory
- file
hooks:
ApplicationStart:
- location: scripts/start_server.sh
timeout: 300
runas: ubuntu
ApplicationStop:
- location: scripts/stop_server.sh
timeout: 300
runas: ubuntu
-
-
-
appspec.yml version: 0.0 os: linux files:
, ( 4), ( 5) ( 6-12). . .
: 0.0, .. CodeDeploy - 0.0 ¯\_(ツ)/¯. : ApplicationStop, . , , . ApplicationStop .
6. GitHub Actions
, CI/CD pipeline GitHub Actions.
6.1.
GitHub Settings, Secrets :
AWS_ACCESS_KEY_ID: 5 1.1 AWS
AWS_SECRET_ACCESS_KEY: 5 1.1 AWS

6.2.
.github/workflows
. pipeline'. , , develop.yaml. :
name: build-app-action
on:
push:
branches:
- develop
jobs:
build:
name: CI part
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 5.0.101
- name: Install dependencies
run: dotnet restore
- name: Build
run: dotnet build --configuration Release --no-restore
deploy:
name: CD part
runs-on: ubuntu-latest
strategy:
matrix:
app-name: ['projectx']
s3-bucket: ['projectx-codedeploy-deployments']
s3-filename: ['develop-aws-codedeploy-${{ github.sha }}']
deploy-group: ['develop']
needs: build
steps:
- uses: actions/checkout@v2
# set up .net core
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 5.0.101
# restore packages and build
- name: Install dependencies
run: dotnet restore
- name: Build
run: dotnet build ProjectX --configuration Release --no-restore -o ./bin/app
# copying appspec file
- name: Copying appspec.yml
run: cp appspec.yml ./bin/app
# copying scripts
- name: Copying scripts
run: cp -R ./scripts ./bin/app/scripts
# Install AWS CLI 2
- name: Install AWS CLI 2
run: |
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
# Configure AWS credentials
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-south-1
# Deploy push to S3
- name: AWS Deploy push
run: |
aws deploy push \
--application-name ${{ matrix.app-name }} \
--description "Revision of the ${{ matrix.appname }}-${{ github.sha }}" \
--ignore-hidden-files \
--s3-location s3://${{ matrix.s3-bucket }}/${{ matrix.s3-filename }}.zip \
--source ./bin/app
# Creating deployment via CodeDeploy
- name: Creating AWS Deployment
run: |
aws deploy create-deployment \
--application-name ${{ matrix.app-name }} \
--deployment-config-name CodeDeployDefault.AllAtOnce \
--deployment-group-name ${{ matrix.deploy-group }} \
--file-exists-behavior OVERWRITE \
--s3-location bucket=${{ matrix.s3-bucket }},key=${{ matrix.s3-filename }}.zip,bundleType=zip \
: , ( needs deploy, 31). push develop ( 2-5).
build
.net, . 11-19. Ubuntu ( 9 23) unit-. , deploy.
deploy
.
app-name: 4 3 CodeDeploy
s3-bucket: , 2 4
s3-filename: ,
deploy-group: 6 3.
build: .net, , ( , .., , , ) (./bin/app , 48). appspec.yml ( 43-48). 51 AWS CLI v2, action GitHub. AWS CLI2, GitHub , 6.1, AWS. AWS S3 . AWS CodeDeploy. GitHub Actions.
Danach benachrichtigt AWS CodeDeploy die darin konfigurierten EC2-Instanzen über das Vorhandensein eines neuen Builds. Der CodeDeploy-Agent wird für eine neue Version zu AWS S3 absteigen und diese bereitstellen. Sie können dies über die AWS CodeDeploy-Konsole anzeigen.
Fassen wir zusammen
Zu diesem Zeitpunkt haben wir die Konfiguration vollständig abgeschlossen und Sie können versuchen, auf GitHub zu pushen und zu überprüfen, wie es funktioniert hat oder nicht :) Unterwegs habe ich versucht, den Rechen hervorzuheben, auf den ich während des Test-Setups getreten bin, also hoffe ich, dass Sie es getan haben sofort.
Die resultierende Beschreibung der Pipeline kann weiter optimiert werden, indem verschiedene Überprüfungen des Quellcodes auf Fehler, Schwachstellen, Tests durchgeführt, verschiedene Trigger hinzugefügt und in verschiedene Schaltkreise eingeführt werden.