Defnyddio aml-gam docwr i adeiladu delweddau ffenestri
Helo pawb! Fy enw i yw Andrey, ac rwy'n gweithio fel peiriannydd DevOps yn Exness yn y tîm datblygu. Mae fy mhrif weithgaredd yn ymwneud ag adeiladu, defnyddio a chefnogi cymwysiadau mewn docwyr o dan system weithredu Linux (y cyfeirir ati o hyn ymlaen fel yr OS). Ddim yn bell yn ôl roedd gen i dasg gyda'r un gweithgareddau, ond yr OS targed y prosiect oedd Windows Server a set o brosiectau C ++. I mi, hwn oedd y rhyngweithio agos cyntaf â chynwysyddion docwyr o dan Windows OS ac, yn gyffredinol, gyda chymwysiadau C ++. Diolch i hyn, cefais brofiad diddorol a dysgais am rai o gymhlethdodau cynhwysyddio cymwysiadau yn Windows.
Yn yr erthygl hon rwyf am ddweud wrthych pa anawsterau y bu'n rhaid i mi eu hwynebu a sut y llwyddais i'w datrys. Rwy'n gobeithio y bydd hyn yn ddefnyddiol ar gyfer eich heriau presennol ac yn y dyfodol. Mwynhewch ddarllen!
Pam cynwysyddion?
Mae gan y cwmni seilwaith presennol ar gyfer cerddorfa cynhwysydd Hashicorp Nomad a chydrannau cysylltiedig - Consul and Vault. Felly, dewiswyd cynhwysydd y cais fel dull unedig ar gyfer darparu datrysiad cyflawn. Gan fod seilwaith y prosiect yn cynnwys gwesteiwyr docwyr gyda fersiynau Windows Server Core OS 1803 a 1809, mae angen adeiladu fersiynau ar wahân o ddelweddau docwr ar gyfer 1803 a 1809. Yn fersiwn 1803, mae'n bwysig cofio bod rhif adolygu'r gwesteiwr docwr adeiladu rhaid iddo gyd-fynd â rhif adolygu delwedd sylfaen y docwr a'r gwesteiwr lle bydd y cynhwysydd o'r ddelwedd hon yn cael ei lansio. Nid oes gan fersiwn 1809 anfantais o'r fath. Gallwch ddarllen mwy yma.
Pam aml-gam?
Nid oes gan beirianwyr tîm datblygu unrhyw fynediad neu fynediad cyfyngedig iawn i westeion adeiladu; nid oes unrhyw ffordd i reoli'r set o gydrannau ar gyfer adeiladu cymhwysiad ar y gwesteiwyr hyn yn gyflym, er enghraifft, gosod set offer neu lwyth gwaith ychwanegol ar gyfer Visual Studio. Felly, gwnaethom y penderfyniad i osod yr holl gydrannau angenrheidiol i ymgorffori'r cais yn ddelwedd adeiladu Docker. Os oes angen, dim ond y dockerfile y gallwch chi ei newid yn gyflym a lansio'r biblinell ar gyfer creu'r ddelwedd hon.
O theori i weithredu
Mewn adeiladu delwedd aml-gam Docker delfrydol, mae'r amgylchedd ar gyfer adeiladu'r cais yn cael ei baratoi yn yr un sgript Dockerfile ag y mae'r cais ei hun yn cael ei adeiladu. Ond yn ein hachos ni, ychwanegwyd cyswllt canolradd, sef, y cam rhagarweiniol o greu delwedd docwr gyda phopeth angenrheidiol i adeiladu'r cais. Gwnaethpwyd hyn oherwydd fy mod eisiau defnyddio'r nodwedd cache docker i leihau amser gosod pob dibyniaeth.
Edrychwn ar brif bwyntiau'r sgript dockerfile ar gyfer creu'r ddelwedd hon.
I greu delweddau o wahanol fersiynau OS, gallwch ddiffinio dadl yn y dockerfile y mae rhif y fersiwn yn cael ei basio trwyddo yn ystod y cyfnod adeiladu, a dyma hefyd dag y ddelwedd sylfaenol.
Gellir dod o hyd i restr gyflawn o dagiau delwedd Microsoft Windows Server yma.
ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
Yn ddiofyn y gorchmynion yn y cyfarwyddiadau RUN y tu mewn i'r dockerfile ar Windows OS cânt eu gweithredu yn y consol cmd.exe. Er hwylustod ysgrifennu sgriptiau ac ehangu ymarferoldeb y gorchmynion a ddefnyddir, byddwn yn ailddiffinio'r consol gweithredu gorchymyn yn Powershell trwy'r cyfarwyddyd SHELL.
I osod pecynnau gan ddefnyddio chocolatey, gallwch chi eu pasio fel rhestr, neu eu gosod un ar y tro os oes angen i chi basio paramedrau unigryw ar gyfer pob pecyn. Yn ein sefyllfa ni, fe wnaethom ddefnyddio ffeil maniffest mewn fformat XML, sy'n cynnwys rhestr o becynnau gofynnol a'u paramedrau. Mae ei gynnwys yn edrych fel hyn:
Nesaf, rydym yn gosod yr amgylchedd adeiladu cymwysiadau, sef, MS Build Tools 2019 - fersiwn ysgafn yw hon o Visual Studio 2019, sy'n cynnwys y set leiaf o gydrannau gofynnol ar gyfer llunio cod.
Er mwyn gweithio'n llawn gyda'n prosiect C++, bydd angen cydrannau ychwanegol arnom, sef:
Llwyth gwaith C++ offer
Set offer v141
Windows 10 SDK (10.0.17134.0)
Gallwch osod set estynedig o offer yn awtomatig gan ddefnyddio ffeil ffurfweddu mewn fformat JSON. Cynnwys ffeil ffurfweddu:
Mae rhestr gyflawn o'r cydrannau sydd ar gael i'w gweld ar y wefan ddogfennaeth Microsoft Visual Studio.
Mae'r dockerfile yn rhedeg y sgript gosod, ac er hwylustod, yn ychwanegu'r llwybr at y ffeiliau gweithredadwy offer adeiladu i'r newidyn amgylchedd PATH. Fe'ch cynghorir hefyd i gael gwared ar ffeiliau a chyfeiriaduron diangen i leihau maint y ddelwedd.
Ar y cam hwn, mae ein delwedd ar gyfer llunio'r cais C ++ yn barod, a gallwn symud ymlaen yn uniongyrchol i greu adeilad aml-gam docwr o'r cais.
Aml-gam ar waith
Byddwn yn defnyddio'r ddelwedd a grëwyd gyda'r holl offer ar y bwrdd fel delwedd adeiladu. Fel yn y sgript dockerfile flaenorol, byddwn yn ychwanegu'r gallu i nodi rhif y fersiwn / tag delwedd yn ddeinamig er mwyn hwyluso ailddefnyddio cod. Mae'n bwysig ychwanegu label as builder i ddelwedd y cynulliad yn y cyfarwyddiadau FROM.
ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder
Nawr mae'n bryd adeiladu'r cais. Mae popeth yma yn eithaf syml: copïwch y cod ffynhonnell a phopeth sy'n gysylltiedig ag ef, a dechreuwch y broses lunio.
Y cam olaf wrth greu'r ddelwedd derfynol yw nodi delwedd sylfaenol y cais, lle bydd yr holl arteffactau casglu a'r ffeiliau ffurfweddu wedi'u lleoli. I gopïo ffeiliau wedi'u crynhoi o ddelwedd y cynulliad canolradd, rhaid i chi nodi'r paramedr --from=builder yn y cyfarwyddiadau COPY.
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
COPY --from=builder C:/x64/Release/myapp/ ./
COPY ./configs ./
Nawr y cyfan sydd ar ôl yw ychwanegu'r dibyniaethau angenrheidiol i'n cais weithio a nodi'r gorchymyn lansio trwy'r cyfarwyddiadau ENTRYPOINT neu CMD.
Casgliad
Yn yr erthygl hon, siaradais am sut i greu amgylchedd crynhoi llawn ar gyfer cymwysiadau C ++ y tu mewn i gynhwysydd Windows a sut i ddefnyddio galluoedd adeiladau aml-gam docwyr i greu delweddau llawn o'n cymhwysiad.