Ma te whakamahi i nga waahi-maha ki te hanga whakaahua matapihi

Kia ora katoa! Ko Andrey toku ingoa, a kei te mahi ahau hei miihini DevOps i Exness i roto i te roopu whanaketanga. Ko taku mahi matua e pa ana ki te hanga, te tuku me te tautoko i nga tono i roto i te docker i raro i te punaha whakahaere Linux (ka kiia i muri nei ko te OS). Kaore i roa i mua ake nei he mahi me nga mahi rite tonu, engari ko te kaupapa OS o te kaupapa ko te Windows Server me te huinga o nga kaupapa C++. Ki ahau nei, koinei te taunekeneke tata tuatahi me nga ipu docker i raro i te Windows OS me te nuinga, me nga tono C++. He mihi ki tenei, he wheako whakamere ahau me te ako mo etahi o nga hianga o nga tono whakauru i roto i te Matapihi.

Ma te whakamahi i nga waahi-maha ki te hanga whakaahua matapihi

I roto i tenei tuhinga e hiahia ana ahau ki te korero ki a koe he aha nga raruraru i pa ki a au me te pehea i taea ai e au te whakaoti. Kei te tumanako ahau he awhina tenei mo o wero o naianei me o mua. Kia pai te panui!

He aha nga ipu?

Kei te kamupene nga hanganga o mua mo te Hashicorp Nomad kaiwhakarite ipu me nga waahanga e pa ana - Consul me Vault. Na reira, i whiriwhiria te whakaurunga tono hei tikanga whakakotahi mo te tuku otinga oti. I te mea kei roto i te hanganga kaupapa nga kaihautu docker me nga putanga Windows Server Core OS 1803 me 1809, he mea tika ki te hanga i nga waahanga motuhake o nga whakaahua docker mo 1803 me 1809. I roto i te putanga 1803, he mea nui kia mahara ko te nama whakahou o te kaihautu docker hanga. me taurite ki te tau whakahounga o te ahua docker turanga me te kaihautu ka whakarewahia te ipu mai i tenei ahua. Putanga 1809 karekau he raru penei. Ka taea e koe te panui atu konei.

He aha te waahi-maha?

Karekau, he iti rawa ranei te uru atu a nga miihini o te roopu whanaketanga ki te hanga kaihautu; karekau he huarahi ki te whakahaere tere i te huinga o nga waahanga mo te hanga tono ki runga i enei kaihautu, hei tauira, te whakauru i tetahi taputapu taputapu taapiri ranei mo te Visual Studio. Na reira, i whakatau matou ki te whakauru i nga waahanga katoa e tika ana hei hanga i te tono ki roto i te ahua hanga Docker. Mena e tika ana, ka taea e koe te whakarereke i te dockerfile anake ka whakarewahia te paipa mo te hanga i tenei ahua.

Mai i te ariā ki te mahi

I roto i te hanga pikitia maha-waahanga a Docker, kua rite te taiao mo te hanga i te tono i roto i te tuhinga Dockerfile ano i te wa i hangaia ai te tono. Engari i roto i ta maatau keehi, i taapirihia he hononga takawaenga, ara, ko te taahiraa o te hanga i tetahi ahua docker me nga mea katoa e tika ana hei hanga i te tono. I mahia tenei na te mea i pirangi ahau ki te whakamahi i te waahanga keteroki docker hei whakaiti i te wa whakaurunga o nga whakawhirinakitanga katoa.

Me titiro ki nga kaupapa matua o te tuhinga dockerfile mo te hanga i tenei ahua.

Hei waihanga whakaahua o nga momo OS rerekee, ka taea e koe te tautuhi i tetahi tautohetohe i roto i te dockerfile ka tukuna te nama putanga i te wa o te hanga, a ko te tohu ano hoki o te ahua turanga.

Ka kitea he rarangi katoa o nga tohu atahanga Microsoft Windows Server konei.

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

Ma te taunoa nga whakahau i roto i nga tohutohu RUN i roto i te dockerfile i runga i te Windows OS ka mahia i roto i te papatohu cmd.exe. Mo te pai ki te tuhi i nga tuhinga me te whakawhānui ake i nga mahi o nga whakahau e whakamahia ana, ka tautuhia ano e matou te papatohu whakahaere whakahau i Powershell ma te tohutohu. SHELL.

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

Ko te mahi e whai ake nei ko te whakauru i te kaiwhakahaere kete tiakarete me nga kete e tika ana:

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'

Hei whakauru i nga kohinga ma te whakamahi tiakarete, ka taea noa e koe te tuku hei rarangi, te whakauru ranei kia kotahi ki te wa ka hiahia koe ki te tuku i nga tawhā ahurei mo ia kete. I roto i to maatau ahuatanga, i whakamahia e matou he konae whakakitenga i roto i te whakatakotoranga XML, kei roto he rarangi o nga kohinga e hiahiatia ana me o raatau tawhā. He penei te ahua o ona ihirangi:

<?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>

I muri mai, ka whakauruhia e matou te taiao hanga tono, ara, MS Build Tools 2019 - he ahua mama tenei o Visual Studio 2019, kei roto te kohinga iti rawa o nga waahanga mo te whakahiato waehere.
Hei tino mahi me ta maatau kaupapa C++, ka hiahia maatau etahi atu waahanga, ara:

  • Utamahi taputapu C++
  • Utauta v141
  • Windows 10 SDK (10.0.17134.0)

Ka taea e koe te whakauru aunoa i tetahi huinga taputapu ma te whakamahi i te konae whirihoranga ki te whakatakotoranga JSON. Ngā ihirangi kōnae whirihoranga:

Ko te rarangi katoa o nga waahanga e waatea ana ka kitea i runga i te waahi tuhinga 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"
  ]
}

Ka whakahaerehia e te dockerfile te tuhinga whakaurunga, a mo te waatea, ka taapirihia te ara ki nga taputapu hanga i nga konae ka taea te kawe ki te taurangi taiao. PATH. He mea tika ano kia tangohia nga konae me nga raarangi koretake hei whakaiti i te rahi o te ahua.

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 tenei wa, kua reri to maatau whakaahua mo te whakahiato i te tono C++, a ka taea e taatau te haere tika ki te hanga i te hanga-waahanga docker o te tono.

Maha-waahi i te mahi

Ka whakamahia e matou te ahua i hangaia me nga taputapu katoa i runga i te poari hei ahua hanga. Pērā i te tuhinga dockerfile o mua, ka taapirihia e matou te kaha ki te whakapumau i te tau putanga / tohu tohu mo te ngawari o te whakamahi waehere. He mea nui ki te taapiri i tetahi tapanga as builder ki te whakapakoko huihui i roto i nga tohutohu FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

Inaianei kua tae ki te wa ki te hanga i te tono. Ko nga mea katoa i konei he tino ngawari: kape i te waehere puna me nga mea katoa e pa ana ki a ia, ka timata i te mahi whakahiato.

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

Ko te waahanga whakamutunga o te hanga i te ahua whakamutunga ko te whakapumau i te ahua taketake o te tono, kei reira katoa nga taonga whakahiato me nga konae whirihoranga. Hei kape i nga konae kua whakahiato mai i te ahua o te huihuinga takawaenga, me tohu e koe te tawhā --from=builder i roto i nga tohutohu COPY.

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

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

Inaianei ko nga mea katoa e toe ana ko te taapiri i nga mea e tika ana mo ta maatau tono ki te mahi me te tohu i te whakahau whakarewatanga ma nga tohutohu ENTRYPOINT ranei CMD.

mutunga

I roto i tenei tuhinga, i korero ahau me pehea te hanga i tetahi taiao whakahiato katoa mo nga tono C++ i roto i te ipu i raro i te Matapihi me pehea te whakamahi i nga kaha o te docker maha-waahanga hanga ki te hanga whakaahua katoa o to maatau tono.

Source: will.com

Tāpiri i te kōrero