എന്റെ സിഐ/സിഡി പൈപ്പ്ലൈൻ, നിർമ്മാണത്തിലേക്ക്
നിർമ്മിക്കുക, പരീക്ഷിക്കുക, സ്കാൻ ചെയ്യുക, വിന്യസിക്കുക, പരിശോധിക്കുക. നിങ്ങള് ക്ക് പകര് ക്കാവുന്ന ഒരു മുഴുവൻ പൈപ്പ് ലൈനും.
നിർമ്മിക്കുക, പരീക്ഷിക്കുക, സ്കാൻ ചെയ്യുക, വിന്യസിക്കുക, പരിശോധിക്കുക. നിങ്ങള് ക്ക് പകര് ക്കാവുന്ന ഒരു മുഴുവൻ പൈപ്പ് ലൈനും.

പത്ത് ഡി.വി.ഒ. എഞ്ചിനീയർമാരോട് ഒരു ഐ.സി. /സിഡി പൈപ്പ്ലൈൻ വരയ്ക്കാൻ ആവശ്യപ്പെടുക, നിങ്ങൾക്ക് പത്ത് വ്യത്യസ്ത ഡ്രോയിംഗുകൾ ലഭിക്കും. പക്ഷേ, നല്ല പൈപ്പ്ലൈനിന് റെ അടിഭാഗം ഒരേ രൂപമാണ്. അവ വേഗത്തിൽ ഫീഡ്ബാക്ക് നൽകുന്നു, പ്രശ്നങ്ങൾ നേരത്തേ കണ്ടെത്തുന്നു, വിന്യസനം മടുപ്പിക്കുന്നു.
ഇതാ ഒരു സാധാരണ കണ്ടെയ്നറൈസ്ഡ് വെബ് സർവീസ് ഉപയോഗിക്കുന്ന പൈപ്പ്ലൈൻ, ഗിറ്റ്ഹബ് ആക്ഷനുകളിലെ ഒരു പ്രവർത്തന ഉദാഹരണത്തിലൂടെ പടിപടിയായി.
രണ്ടാമത്തെ ഘട്ടത്തില് ഏറ്റവും പ്രധാനപ്പെട്ട തത്ത്വം ഒളിഞ്ഞിരിക്കുന്നു: ഒരിക്കൽ നിർമ്മിച്ചാലും, എല്ലായിടത്തും ഒരേ കൃത്രിമ വസ്തു വിന്യസിക്കും. ഒരിക്കലും ഉല്പാദനത്തിനായി പുനർനിര് മിക്കുകയില്ല. നിങ്ങള് പരീക്ഷിച്ചതൊക്കെ നിങ്ങള് കയറ്റി അയയ്ക്കുന്നതാകും.
നല്ല പൈപ്പ്ലൈനില് ശരിയായ കാര്യം ഓട്ടോമാറ്റിക് ആക്കുകയും അപകടകരമായ കാര്യം ദൃശ്യമാക്കുകയും ചെയ്യും.
ഗിറ്റ്ഹബ് ആക്ഷനുകളിൽ ഇത് എങ്ങനെയായിരിക്കും കാണപ്പെടുന്നത് എന്നതിന്റെ ഒരു ചുരുക്കിയ പതിപ്പ്:
name: ci-cd
on:
pull_request:
push:
branches: [main]
permissions:
contents: read
env:
IMAGE: ghcr.io/my-org/shop-api
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@<sha> # v4
- uses: actions/setup-go@<sha> # v5
with:
go-version-file: go.mod
cache: true
- run: go vet ./...
- run: go test ./... -race -coverprofile=coverage.out
build:
needs: test
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
id-token: write # for keyless signing
outputs:
digest: ${{ steps.push.outputs.digest }}
steps:
- uses: actions/checkout@<sha> # v4
- uses: docker/setup-buildx-action@<sha> # v3
- uses: docker/login-action@<sha> # v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- id: push
uses: docker/build-push-action@<sha> # v6
with:
push: ${{ github.event_name == 'push' }}
tags: ${{ env.IMAGE }}:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Scan image
uses: aquasecurity/trivy-action@<sha>
with:
image-ref: ${{ env.IMAGE }}:${{ github.sha }}
severity: HIGH,CRITICAL
ignore-unfixed: true
exit-code: "1"
deploy-staging:
if: github.event_name == 'push'
needs: build
runs-on: ubuntu-latest
environment: staging
steps:
- run: echo "Update the staging GitOps repo to ${{ github.sha }}"
- run: ./scripts/smoke-test.sh https://staging.example.com
deploy-production:
needs: deploy-staging
runs-on: ubuntu-latest
environment: production # requires approval in repo settings
steps:
- run: echo "Update the production GitOps repo to ${{ github.sha }}"
(പകരം <sha> ഗിറ്റ്ഹബ് പ്രവർത്തനങ്ങൾ പൂട്ടിയിടുന്നതിനെ കുറിച്ചുള്ള എന്റെ പോസ്റ്റിൽ വിവരിച്ചിരിക്കുന്നതുപോലെ, പിൻഡ് ചെയ്ത commit SHAs ഉപയോഗിച്ച്.
ശ്രദ്ധിക്കേണ്ട ചില വിശദാംശങ്ങള്:
staging, production) അംഗീകാരങ്ങൾ ആവശ്യപ്പെടുകയും അവരുടെ രഹസ്യങ്ങൾ സൂക്ഷിക്കുകയും ചെയ്യാം.kubectl നേരിട്ട് അര് ഗോ സിഡി അല്ലെങ്കിൽ ഫ്ലക്സ് മാറ്റം പ്രയോഗിക്കുന്നു, അത് ഐ. സി. യിൽ നിന്നും ക്രെഡൻഷ്യലുകളെ അകറ്റിനിർത്തുന്നു.പതുക്കെയുണ്ടാകുന്ന പൈപ്പ്ലൈനുകൾ ഡെവലപ്പർമാരുടെ വിശ്വാസം നഷ്ടപ്പെടുത്തുന്നു. ചില ശീലങ്ങള് കാര്യങ്ങൾ വേഗത്തില് മുന്നോട്ട് കൊണ്ടുപോകുന്നു:
cache-from / cache-to മുകളിലെ വരികൾ).ഒരു റോൾബാക്ക് ഒരു വിന്യാസം പോലെ എളുപ്പമായിരിക്കണം, അത് പരിശീലിക്കണം:
നിങ്ങളുടെ പൈപ്പ്ലൈൻ മറ്റൊന്നും ചെയ്യുന്നില്ലെങ്കിൽ, ഇത് ചെയ്യുകഃ ഓരോ പിൻ അഭ്യർത്ഥനയിലും പരിശോധനകൾ നടത്തുക, ഓരോ കമ്മിറ്റിനും ഒരു ചിത്രം നിർമ്മിക്കുക, അത് സ്കാൻ ചെയ്യുക, കൃത്യമായ ചിത്രം യാന്ത്രികമായി സ്റ്റേജിംഗിലേക്ക് വിന്യസിക്കുക, അതേ ചിത്രം ഉൽപാദനത്തിലേക്ക് പ്രോത്സാഹിപ്പിക്കുക. മറ്റെല്ലാം മുകളിൽ മെച്ചപ്പെടുത്തലാണ്.
എന്റെ അഭിപ്രായം: ഒരിക്കൽ നിർമ്മിക്കുക, നേരത്തെ പരീക്ഷിക്കുക, എല്ലായിടത്തും ഒരേ കാര്യം വിന്യസിക്കുക, എപ്പോഴെങ്കിലും എങ്ങനെ തിരിച്ചു പോകണമെന്ന് അറിയുക.
ഡെസ്ലി