Fa'aaogā fa'ato'aga fa'ato'aga e fausia ai ata fa'amalama

Talofa uma! O loʻu igoa o Andrey, ma ou te galue o se inisinia DevOps i Exness i le au atinaʻe. O laʻu gaioiga autu e fesoʻotaʻi ma le fausiaina, faʻapipiʻiina ma le lagolagoina o talosaga i le docker i lalo o le Linux operating system (lea e taʻua mulimuli ane o le OS). E leʻi leva talu ai sa i ai saʻu galuega ma gaioiga tutusa, ae o le OS faʻamoemoe o le poloketi o le Windows Server ma se seti o galuega C ++. Mo aʻu, o le fesoʻotaʻiga vavalalata muamua lea ma pusa faʻatau i lalo ole Windows OS ma, i se tulaga lautele, faʻatasi ai ma C ++ talosaga. Faʻafetai i lenei mea, na ou maua ai se mea manaia ma aʻoaʻo e uiga i nisi o faʻalavelave o le faʻapipiʻiina o talosaga i Windows.

Fa'aaogā fa'ato'aga fa'ato'aga e fausia ai ata fa'amalama

I lenei tusiga ou te fia taʻu atu ia te oe mea faigata na ou feagai ma le auala na ou foia ai. Ou te faʻamoemoe e fesoasoani lenei mea mo ou luitau i le taimi nei ma le lumanaʻi. Fiafia faitau!

Aisea e teu ai pusa?

O loʻo i ai i le kamupani atinaʻe o loʻo i ai mo le Hashicorp Nomad container orchestrator ma vaega faʻapitoa - Consul ma Vault. O le mea lea, o le containerization talosaga na filifilia e avea o se auala tuʻufaʻatasia mo le tuʻuina atu o se fofo atoatoa. Talu ai o le atinaʻe o le poloketi o loʻo i ai 'au faʻapipiʻi faʻatasi ma Windows Server Core OS versions 1803 ma 1809, e manaʻomia le fausiaina o faʻasalalauga eseese o ata faʻailoga mo le 1803 ma le 1809. I le version 1803, e taua le manatua o le numera toe iloilo o le fale fau fale. e tatau ona fetaui ma le numera toe fuata'i o le fa'ailoga fa'avae fa'amaufa'ailoga ma le talimalo lea o le a fa'alauiloa ai le atigipusa mai lenei ata. Version 1809 e leai se faaletonu faapena. E mafai ona e faitau atili iinei.

Aisea e tele-tulaga?

E leai se avanoa e fausia ai 'au; e leai se auala e vave faʻatautaia ai le seti o vaega mo le fausiaina o se talosaga i luga o nei 'au, mo se faʻataʻitaʻiga, faʻapipiʻi se meafaigaluega faaopoopo poʻo se galuega mo Visual Studio. O le mea lea, na matou faia ai le filifiliga e faʻapipiʻi uma vaega e manaʻomia e fausia ai le talosaga i totonu o le ata fausia Docker. Afai e manaʻomia, e mafai ona e vave suia naʻo le dockerfile ma faʻalauiloa le paipa mo le fatuina o lenei ata.

Mai le talitonuga i le faatinoga

I se fausaga sili ona lelei Docker multi-stage image, o le siosiomaga mo le fausiaina o le talosaga ua saunia i le Dockerfile script tutusa e pei ona fausia ai le talosaga lava ia. Ae i la matou tulaga, na faʻaopoopoina se fesoʻotaʻiga vavalalata, o lona uiga, o le laasaga muamua o le fatuina o se ata faʻailoga ma mea uma e manaʻomia e fausia ai le talosaga. Na faia lenei mea ona sa ou manaʻo e faʻaoga le faʻaogaina o le docker cache e faʻaitiitia ai le taimi faʻapipiʻi o faʻalagolago uma.

Sei o tatou vaʻai i manatu autu o le dockerfile script mo le fatuina o lenei ata.

Ina ia fatuina ata o ituaiga OS eseese, e mafai ona e faʻamatalaina se finauga i le dockerfile lea e pasia ai le numera numera i le taimi o le fausiaina, ma o le pine foi lea o le ata faavae.

E mafai ona maua se lisi atoa o pine ata Microsoft Windows Server iinei.

ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION

E ala i le faaletonu o poloaiga i faatonuga RUN i totonu o le dockerfile i luga o le Windows OS o loʻo faʻatinoina i le cmd.exe faʻamafanafanaga. Mo le faʻafaigofieina o le tusiaina o tusitusiga ma faʻalauteleina le faʻatinoga o poloaiga na faʻaaogaina, o le a matou toe faʻamalamalamaina le faʻatonuga faʻatonuga i Powershell e ala i le faʻatonuga. SHELL.

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]

O le isi laasaga o le faʻapipiʻi lea o le pule o pusa sukalati ma afifi talafeagai:

COPY chocolatey.pkg.config .
RUN Set-ExecutionPolicy Bypass -Scope Process -Force ;
    [System.Net.ServicePointManager]::SecurityProtocol = 
    [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 ;
    $env:chocolateyUseWindowsCompression = 'true' ;
    iex ((New-Object System.Net.WebClient).DownloadString( 
      'https://chocolatey.org/install.ps1')) ;
    choco install chocolatey.pkg.config -y --ignore-detected-reboot ;
    if ( @(0, 1605, 1614, 1641, 3010) -contains $LASTEXITCODE ) { 
      refreshenv; } else { exit $LASTEXITCODE; } ;
    Remove-Item 'chocolatey.pkg.config'

Ina ia fa'apipi'i afifi e fa'aaoga ai sukalati, e mafai lava ona e pasi e fai ma lisi, pe fa'apipi'i ta'i tasi pe a mana'omia le pasi fa'ailoga tulaga ese mo afifi ta'itasi. I lo matou tulaga, matou te faʻaaogaina se faila faʻaalia i le XML format, lea e aofia ai se lisi o afifi manaʻomia ma a latou faʻasologa. O mea i totonu e pei o lenei:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="python" version="3.8.2"/>
  <package id="nuget.commandline" version="5.5.1"/>
  <package id="git" version="2.26.2"/>
</packages>

O le isi, matou te faʻapipiʻiina le siosiomaga faufale, e taʻua, MS Build Tools 2019 - o se faʻataʻitaʻiga mama lea o le Visual Studio 2019, o loʻo i ai le seti pito manaʻomia o vaega mo le tuʻufaʻatasia o code.
Ina ia galulue atoatoa ma la matou poloketi C ++, matou te manaʻomia nisi vaega, e pei o:

  • Galuega C++ meafaigaluega
  • Meafaigaluega v141
  • Pupuni 10 SDK (10.0.17134.0)

E mafai ona e faʻapipiʻi se seti faʻalauteleina o meafaigaluega e faʻaaoga ai se faila faʻatulagaina i le JSON format. Fa'atonu faila i totonu:

O se lisi atoa o vaega avanoa e mafai ona maua i luga o le upega tafa'ilagi Microsoft Visual Studio.

{
  "version": "1.0",
  "components": [
    "Microsoft.Component.MSBuild",
    "Microsoft.VisualStudio.Workload.VCTools;includeRecommended",
    "Microsoft.VisualStudio.Component.VC.v141.x86.x64",
    "Microsoft.VisualStudio.Component.Windows10SDK.17134"
  ]
}

O le dockerfile e faʻatautaia le faʻapipiʻiina o tusitusiga, ma mo le faʻaogagofie, faʻaopoopo le ala i le fausiaina o meafaigaluega faila faila i le fesuiaiga o le siosiomaga PATH. E fautuaina foi e aveese faila e le manaʻomia ma directories e faʻaitiitia ai le tele o le ata.

COPY buildtools.config.json .
RUN Invoke-WebRequest 'https://aka.ms/vs/16/release/vs_BuildTools.exe' 
      -OutFile '.vs_buildtools.exe' -UseBasicParsing ;
    Start-Process -FilePath '.vs_buildtools.exe' -Wait -ArgumentList 
      '--quiet --norestart --nocache --config C:buildtools.config.json' ;
    Remove-Item '.vs_buildtools.exe' ;
    Remove-Item '.buildtools.config.json' ;
    Remove-Item -Force -Recurse 
      'C:Program Files (x86)Microsoft Visual StudioInstaller' ;
    $env:PATH = 'C:Program Files (x86)Microsoft Visual Studio2019BuildToolsMSBuildCurrentBin;' + $env:PATH; 
    [Environment]::SetEnvironmentVariable('PATH', $env:PATH, 
      [EnvironmentVariableTarget]::Machine)

I lenei laʻasaga, ua saunia la matou ata mo le tuʻufaʻatasia o le C ++ talosaga, ma e mafai ona matou faʻagasolo saʻo i le fatuina o se faʻailoga faʻapipiʻi tele o le talosaga.

Laasaga tele i le faatinoga

O le a matou faʻaogaina le ata na faia ma meafaigaluega uma i luga o le laupapa e fai ma ata fau. E pei o le tusiga dockerfile talu ai, o le a matou faʻaopoopoina le malosi e faʻamaonia ai le numera numera / ata faʻailoga mo le faigofie o le toe faʻaogaina. E taua le fa'aopoopoina o se fa'ailoga as builder i le ata o le faapotopotoga i faatonuga FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

Ua oo i le taimi e fausia ai le talosaga. O mea uma iinei e faigofie lava: kopi le code source ma mea uma e fesoʻotaʻi ma ia, ma amata le faʻagasologa o le tuʻufaʻatasia.

COPY myapp .
RUN nuget restore myapp.sln ;
    msbuild myapp.sln /t:myapp /p:Configuration=Release

O le laasaga mulimuli o le fatuina o le ata mulimuli o le faʻamaonia lea o le ata autu o le talosaga, lea o le a tuʻu uma ai mea faʻapipiʻi ma faila faila. Ina ia kopi faila tuʻufaʻatasia mai le ata faʻapotopotoga vavalalata, e tatau ona e faʻamaonia le parakalafa --from=builder i faatonuga COPY.

FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION

COPY --from=builder C:/x64/Release/myapp/ ./
COPY ./configs ./

O mea uma e totoe o le faʻaopoopoina lea o faʻalagolago e manaʻomia mo la tatou talosaga e galue ma faʻamaonia le faʻatonuga faʻalauiloa e ala i faatonuga ENTRYPOINT poʻo CMD.

iʻuga

I totonu o lenei tusiga, na ou talanoa e uiga i le faʻaogaina o se siosiomaga tuʻufaʻatasia atoatoa mo C ++ talosaga i totonu o se atigipusa i lalo o Windows ma pe faʻapefea ona faʻaogaina le gafatia o docker multi-stage builds e fatu ai ata atoatoa o la tatou talosaga.

puna: www.habr.com

Faaopoopo i ai se faamatalaga