از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
شروع کار با GitHub Actions – Automation نرم افزار
سرفصلهای مطلب
معرفی
در این راهنما، نگاهی خواهیم داشت به اینکه اقدامات GitHub چیست، چگونه کار می کنند، و یک گردش کار با استفاده از Python ایجاد می کنیم تا نشان دهیم چگونه می توانید از اقدامات GitHub برای خودکارسازی وظایف استفاده کنید.
از زمان آغاز به کار خود در سال 2008، GitHub رشد کرده است تا به آن تبدیل شود عملا رهبر میزبانی پروژه توسعه یک ایده جامعه محور برای اجازه دادن به میزبانی رایگان همه برنامه های منبع باز مورد علاقه ما در یک مکان مرکزی منفجر شد. GitHub آنقدر محبوب شد که مترادف با آن شد git
; ده ها مقاله را به صورت آنلاین پیدا خواهید کرد که توضیح می دهند چگونه git با GitHub یکی نیست، و بالعکس.
در 10 سالگرد آن، یک شرکت بزرگ GitHub را به قیمت 7.5 خریداری کرد میلیارد دلار نام آن شرکت است مایکروسافت. خرید GitHub کنار، ساخت WSL و داشتن بسیاری از پروژه های منبع باز مانند VS Code، دات نت و تایپ اسکریپت، فقط به نام چند مورد، مایکروسافت بازی توسعه و نظر عموم مردم را تغییر داد. روی تجاوز این شرکت به حریم خصوصی که ویندوز 10 بود.
هدف بعدی GitHub، همانطور که هنوز هم جامعه محور است، شروع به کسب درآمد – با وارد کردن صحنه سازمانی. نشانه – اقدامات GitHub.
نگاهی به راه حل های موجود سازمانی
در زمان گرفتن مایکروسافت دست خود را روی GitHub، صحنه سازمانی برای توسعه نرم افزار قبلا توسط چند بازیکن بزرگ ایجاد شده بود:
- BitBucket Atlassian امکان ادغام یکپارچه با Jira و Trello، رهبران مدیریت و سازماندهی موضوع.
- CodeCommit آمازون به سازمانهایی که از AWS استفاده میکنند این امکان را میدهد که هرگز راحتی یک UI و یک ابزار CLI را ترک نکنند.
- GitLab، با رویکرد DevOps گرا که هدف آن متمرکز کردن کل توسعه است process زیر یک سقف.
در چند سال گذشته گیت هاب توانسته است بسیاری از ویژگی های رقابت سازمانی خود را اضافه کند CI/CD
CI/CD و اتوماسیون
توسعه نرم افزار مدرن به شدت متکی است روی اتوماسیون ، و به یک دلیل ساده – کارها را سرعت می بخشد. نسخه های جدید به طور خودکار ساخته، آزمایش و در محیط های مناسب مستقر می شوند.
تنها کاری که لازم است تنها یک تلاش برای نوشتن چند اسکریپت و پیکربندی چند ماشین برای اجرای آنهاست. ارائه چنین ویژگی هایی توسط GitHub به شکل زیر ارائه می شود اقدامات GitHub
مروری بر اقدامات GitHub
در زمان نوشتن این راهنما، اقدامات GitHub کمتر از دو سال از عمر آن می گذرد. علیرغم سن کم، این ویژگی به دلیل وجود آن به خوبی رشد کرده است یکی از ویژگی های GitHub.
کاربران بیشماری وارد کشتی شدند و شروع به آشنایی با آن کردند درون و برون از GitHub Actions و شروع به نوشتن ماژول های قابل استفاده مجدد خود کردند (یا اقدامات) و آنها را با سایر نقاط جهان به اشتراک گذاشت. GitHub به شدت متکی است روی چنین مشارکت هایی در مدل بازاریابی خود. در حال حاضر بیش از 9500 عمل مختلف وجود دارد که به شما امکان میدهد در چند خط کد، محیطهای خود را راهاندازی کنید، لینترها و آزمایشکنندهها را اجرا کنید، با چندین API پلتفرم اصلی تعامل داشته باشید و غیره. git
و ویرایشگر مورد علاقه شما
Worfklows
ما خودکار خود را تعریف می کنیم process از طریق گردش کار. آن ها هستند YAML فایل هایی که شامل نام گردش کار ما، رویدادها، کارها و مراحل خط لوله ما و اجراکنندگان ما برای اجرای آنها هستند.
YAML
yaml یک زبان نشانه گذاری نیست یا YAML (آ مخفف بازگشتی) زبانی است که بیشتر برای نوشتن فایل های پیکربندی استفاده می شود. برای نوشتن و خوانایی آسان تر، اغلب بر JSON ترجیح داده می شود. با وجود اینکه JSON از نظر سریال سازی سریعتر و بسیار سخت گیرانه تر است، YAML در مکان هایی که سرعت اهمیت زیادی ندارد استفاده می شود.
اگر تا به حال تجربه ای با YAML نداشته اید، به شدت به شما توصیه می کنم که از آن بازدید کنید در دقیقه y x را یاد بگیرید ، جایی که x = yaml.
اگر تا حدودی با تجربه هستید، توصیه می کنم در مورد برخی از YAML ها مطالعه کنید ویژگی های خاص و گوچاها.
رویدادها را فعال کنید
این روی
کلمه کلیدی یک یا چند مورد را مشخص می کند GitHub (توجه: نه فقط git) رویدادهایی که گردش کار را آغاز می کنند. رویداد می تواند بسیار گسترده باشد، به عنوان مثال روی هر فشار به مخزن، یا بسیار خاص، به عنوان مثال، هر بار که یک درخواست کشش نظر جدیدی دریافت می کند.
رویدادها همچنین می توانند به صورت کرون مانند برنامه ریزی شوند:
name: my workflow
روی:
push:
branches: (main, test)
در اینجا، ما یک رویداد ماشه ای برای هر فشار به یکی از آنها داریم main
یا test
شاخه. راه دیگر برای ثبت تریگرها این است روی یک برنامه زمانی مانند:
name: my nightly build workflow
روی:
schedule:
cron: '0 22 * * *'
این یک ساخت تقریباً برای ساعت 10 شب هر روز برنامه ریزی شده است.
شغل ها
تا کنون، ما به گردش کار خود یک نام دادهایم و رویدادهای مختلفی را پیکربندی کردهایم که آن را راهاندازی میکنند. این jobs
کلمه کلیدی اقداماتی را که اجرا خواهند شد فهرست می کند. یک گردش کار می تواند چندین کار را با چند کار انجام دهد steps
هر یک:
jobs:
job1:
steps:
.
.
job2:
steps:
.
.
به طور پیشفرض، همه کارها به صورت موازی اجرا میشوند، اما میتوانیم کاری کنیم که یک کار منتظر اجرای دیگری با استفاده از needs
کلمه کلیدی:
jobs:
job1:
steps:
.
.
job2:
needs: job1
steps:
.
.
job3:
needs: (job1, job2)
steps:
.
.
اطمینان از اجرای موفقیت آمیز مشاغل یک به یک.
همچنین میتوانیم بهطور مستقل محیط هر کار را پیکربندی کنیم، یا یک کار را در چندین پیکربندی با استفاده از آن اجرا کنیم matrix strategy
. اسناد یادداشت می کند:
یک ماتریس به شما امکان می دهد ایجاد کنید چندین شغل با انجام جایگزینی متغیر در یک تعریف شغلی واحد.
در اینجا نمونه ای از ساخت ماتریس است که برای کار پیکربندی شده است روی پلتفرم های متعدد:
jobs:
ubuntu_job:
runs-روی: ubuntu-latest
steps:
.
.
multi_os_job:
runs-روی: {{matrix.os}}
strategy:
matrix:
os: (ubuntu-latest, windows-2016, macos-latest )
steps:
.
.
اقدامات
Action ها ماژول های قابل استفاده مجدد هستند که می توانند مانند هر کار یا مرحله دیگری در گردش کار قرار گیرند. آنها هم می توانند ورودی بگیرند و هم خروجی تولید کنند. بازار جامعه سرشار از اقدامات بوت استرپ برای آماده سازی محیط است. ما امروز از چند مورد استفاده خواهیم کرد.
میتوانید اقدامات خود را بهعنوان محفظههای docker یا با استفاده از جاوا اسکریپت وانیلی بنویسید و به بازار کمک کنید یا آنها را برای خود نگه دارید.
یک عمل به راحتی می تواند در یک گردش کار مانند هر مرحله دیگر در لیست ارجاع داده شود:
jobs:
compile_code:
runs-روی: ubuntu-latest
steps:
- name: check out repo
uses: actions/checkout@v2
- name: compile code
run: gcc main.c
.
.
در اینجا، میتوان نمونهای از استفاده از اکشنها را مانند هر مرحله دیگر مشاهده کرد. توجه داشته باشید که مراحل، برخلاف کارها، همیشه به صورت متوالی اجرا می شوند.
دونده ها
دونده ها، در غیر این صورت به عنوان شناخته شده است عوامل یا کارگران، ماشین هایی هستند که وظیفه اجرای گردش کار شما را دارند. هر دونده را می توان به طور متفاوت تنظیم کرد. به عنوان مثال، GitHub دوندگان را در سه نوع محبوب ترین سیستم عامل – اوبونتو، ویندوز و MacOS ارائه می دهد.
GitHub دونده های خود را ارائه می دهد، اما شما همچنین می توانید انتخاب کنید host رانر خودتان با برنامه اجراکننده GitHub Actions پیکربندی شده است.
قیمت گذاری
اگر مخزن عمومی باشد و آستانه ماهانه از 2000 دقیقه تجاوز نکند، اجراکنندگان GitHub میتوانند گردشهای کاری را به صورت رایگان اجرا کنند.
از زمان نوشتن این راهنما، تیمها و شرکتها دستههای قیمتگذاری مخصوص به خود را دارند (معمولی) با امتیازات و قیمتهای مختلف، به ترتیب 4 دلار برای کاربر در ماه و 21 دلار برای کاربر در ماه.
برای یک نمای کلی از برنامه های GitHub، به روز رسانی GitHub را بررسی کنید قیمت گذاری page.
مصنوعات – داده های پایدار گردش کار
از آنجایی که رانرهای GitHub به طور موقت در دسترس هستند، داده های آنها نیز به طور موقت در دسترس هستند process و تولید کنند. مصنوعات داده هایی هستند که می توانند در دسترس باقی بمانند روی مخزن page پس از اجرای رانر و نیاز به آپلود با ویژه upload-artifact
عمل.
مدت زمان پیش فرض نگهداری 90 روز است، اما می توان آن را تغییر داد:
صفحه نمای کلی با داده های زیادی از جمله تعداد گردش کار اجرا شده، لیستی از تمام کارهایی که برای اجرا در صف قرار گرفته اند یا قبلاً اجرا شده اند، نمایش بصری کارهای مختلف و اتصالات آنها و همچنین هر گونه مصنوعات تولید شده به ما خوش آمد می گوید. توسط گردش کار
اقدامات GitHub در عمل – یک معیار پایتون
توجه داشته باشید: این مثال از یک مخزن ایجاد شده برای این مقاله استفاده می کند، که می توان آن را پیدا کرد، روی GitHub.
بیایید آنچه را که پوشش دادهایم در یک گردش کار کامل ترکیب کنیم. ما یک گردش کار معیار پایتون ایجاد خواهیم کرد که در آن قرار خواهیم داد .github/workflows/benchmark.yml
.
گردش کار راه اندازی خواهد شد روی هر فشار به شاخه اصلی
name: python version benchmarker
روی:
push:
branches: (main)
گردش کار شامل سه مرحله است.
مرحله لینت
اولین کار با پر کردن محتویات است benchmarker.py
، مطمئن شوید که حداقل امتیاز 8.0 دارد:
jobs:
pylint:
runs-روی: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: 3.7
- uses: py-actions/py-dependency-install@v2
with:
path: requirements.txt
- name: run pylint, fail under 8.5
run: pip install pylint; pylint benchmarker.py --fail-under=8
معیار
ما این بنچمارک را در 6 نسخه و پیاده سازی مختلف اجرا خواهیم کرد python، اگر کد با همه آنها سازگار نباشد (پیکربندی شده با fail-fast
پارامتر استراتژی ماتریسی که عبارت است از true
به صورت پیش فرض):
benchmark:
runs-روی: ubuntu-latest
needs: pylint
outputs:
pypy2: ${{ steps.result.outputs.pypy2 }}
pypy3: ${{ steps.result.outputs.pypy3 }}
py2-7: ${{ steps.result.outputs.py2-7 }}
py3-6: ${{ steps.result.outputs.py3-6 }}
py3-7: ${{ steps.result.outputs.py3-7 }}
py3-8: ${{ steps.result.outputs.py3-8 }}
strategy:
matrix:
include:
- python-version: pypy2
out: pypy2
- python-version: pypy3
out: pypy3
- python-version: 2.7
out: py2-7
- python-version: 3.6
out: py3-6
- python-version: 3.7
out: py3-7
- python-version: 3.8
out: py3-8
steps:
- uses: actions/checkout@v2
- name: setup py
uses: actions/setup-python@v2
with:
python-version: ${{matrix.python-version}}
- name: save benchmark stats
id: result
run: |
echo "::set-output name=${{matrix.out}}::$(python benchmarker.py)"
بیایید نگاهی دقیقتر به این موضوع بیندازیم تا مشکلات ریزتری را که میتوانید هنگام استفاده از GitHub Actions با آنها مواجه شوید، مشاهده کنیم. این outputs
کلمه کلیدی را مشخص می کند key:value
جفت هایی که یک کار می تواند تولید کند و به کارهای دیگر اجازه ارجاع دهد. این key
مقدار نام خروجی و value
ارجاع به یک خروجی خاص از یک مرحله با یک داده است id
.
در مورد ما قدم با id: result
بر اساس خروجی تولید می کند روی مقدار ماتریس از python-version
که باید اصلاح شود و با out
پارامتر از آنجایی که نحو دسترسی به شی GitHub اجازه نقطه در نام اشیاء و همچنین داشتن اعداد را نمی دهد. روی مقام اول
هیچ روش ذاتی برای قرار دادن خروجی ها در یک JSON و ارجاع وجود نداشت steps.result.outputs
به عنوان یک شی JSON – که می تواند برای هدف فقط خواندنی انجام شود همانطور که در مرحله بعد خواهیم دید. در عوض هر خروجی باید صریح تعریف شود.
آپلود در Pastebin و ایجاد یک مصنوع جدید
مرحله سوم و آخر، خروجی های مرحله قبل را خوانده و در یک فایل کامپایل می کند. آن فایل به عنوان مصنوع و همچنین در Pastebin آپلود می شود.
به منظور ایجاد یک post
درخواست به Pastebin ما باید یک حساب کاربری را پیکربندی کنیم و سپس از کلید API آن استفاده کنیم:
pastebin:
runs-روی: ubuntu-latest
needs: benchmark
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: 3.9
- uses: py-actions/py-dependency-install@v2
with:
path: requirements.txt
- name: use benchmark data
run: echo '${{ toJSON(needs.benchmark.outputs) }}' > matrix-outputs.json
- name: pastebin API request
env:
PASTEBIN_API_KEY: ${{ secrets.PASTEBIN_API_KEY }}
run: python pastebin.py
- name: upload newly created artifact
uses: actions/upload-artifact@v2
with:
name: benchmark-stats
path: newpaste.txt
راز به عنوان متغیر محیط کار قرار می گیرد تا به راحتی به آن دسترسی داشته باشید os.environ(PASTEBIN_API_KEY)
در پایتون
مدیریت اسرار در Github
GitHub مکانی امن برای اسرار ارائه می دهد روی مخزن یا سطح پروژه. برای صرفه جویی در یک راز ، به مخزن بروید تنظیمات و یک مقدار جدید در اسرار برگه:
اگرچه ما پتانسیل این ویژگی جدید GitHub را دیدهایم، مواردی وجود دارد که باید در نظر گرفت. چیزهایی که ممکن است باعث شکستن معامله شوند و شما را به جستجوی ابزار اتوماسیون در جای دیگری وادار کنند:
- ارائه دوندگان Github بسیار فاقد آن است. با 2 هسته و 8 گیگابایت رم، آنها برای اجرا و آزمایش خوب هستند. اما حتی به یک مجموعه جدی فکر نکنید.
- بازنویسی گردش کار اشکال زدایی می تواند یک تجربه ناخوشایند باشد. هیچ راهی برای اجرای مجدد یک کار واحد وجود ندارد اما دوباره کل گردش کار را دوباره اجرا می کند. اگر مرحله آخر با مشکلاتی روبرو می شود، یا باید گردش کار را بازنویسی کنید تا عیب یابی کمی قابل تحمل تر شود یا قبل از رسیدن به نقطه عیب یابی منتظر بمانید تا کل گردش کار اجرا شود.
- هیچ حمایتی برای ساختهای توزیع شده وجود ندارد.
نتیجه
GitHub Actions در چند سال گذشته بسیار رشد کرده است، اما کافی نیست. با این حال، پتانسیل وجود دارد. با بهترین API از همه git پلتفرمها و با رویکرد نوآورانه نوشتن اکشنها در جاوا اسکریپت، همه توسط بزرگترینها پشتیبانی میشوند git جامعه در جهان – شکی نیست که اقدامات GitHub این پتانسیل را دارد که کل بازی CI/CD را به عهده بگیرد. اما هنوز نه.
در حال حاضر، از این ابزار برای کامپایل/بستهبندی ساده یا اضافه کردن برچسبها به تعهدات خود در حالی که سازمان هنوز متکی است استفاده کنید. روی افرادی مانند جنکینز، تراویس CI و GitLab CI.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-08 08:24:02