Pre-checkout for windows
Kill all running processes in BUILDKITE_BUILD_PATH and force unlock git folder.
This commit is contained in:
parent
7ca96eee86
commit
8960ff7dc9
9 changed files with 154 additions and 83 deletions
|
@ -7,5 +7,4 @@ FROM gcr.io/llvm-premerge-checks/agent-windows-vs2019:${agent_windows_version}
|
|||
RUN choco install -y handle --checksum 524E61547C8E26608CDA1B11B6E9471616CCCC48530F6E7EC9131EABF839357E
|
||||
COPY start_agent.ps1 C:\scripts\
|
||||
COPY pre-checkout.bat c:\buildkite-agent\hooks\
|
||||
COPY unlock_path.ps1 c:\scripts
|
||||
CMD "powershell C:\scripts\start_agent.ps1"
|
|
@ -1,2 +1,5 @@
|
|||
handle -nobanner %BUILDKITE_BUILD_CHECKOUT_PATH%
|
||||
powershell c:\scripts\unlock_path.ps1 %BUILDKITE_BUILD_CHECKOUT_PATH%
|
||||
echo "pre-checkout: update scripts"
|
||||
cd c:\llvm-premerge-checks
|
||||
git pull
|
||||
git rev-parse HEAD
|
||||
powershell c:\llvm-premerge-checks\scripts\windows\pre-checkout.ps1
|
|
@ -1,7 +1,7 @@
|
|||
c:\credentials\buildkite-env.ps1
|
||||
git clone https://github.com/google/llvm-premerge-checks.git c:\llvm-premerge-checks
|
||||
# Install Buildkite agent.
|
||||
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/buildkite/agent/master/install.ps1'))
|
||||
|
||||
$env:SCCACHE_DIR="C:\ws\sccache"
|
||||
$env:SCCACHE_IDLE_TIMEOUT="0"
|
||||
Remove-Item -Recurse -Force -ErrorAction Ignore $env:SCCACHE_DIR
|
||||
|
|
|
@ -32,10 +32,13 @@ If ($LastExitCode -ne 0) {
|
|||
exit
|
||||
}
|
||||
|
||||
$DIGEST=$(docker image inspect --format "{{range .RepoDigests}}{{.}}{{end}}" $IMAGE_NAME) -replace ".*@sha256:(.{6})(.*)$","`$1"
|
||||
# mount a persistent workspace for experiments
|
||||
docker run -it `
|
||||
-v C:/ws:C:/ws `
|
||||
-v C:/credentials:C:/credentials `
|
||||
-e BUILDKITE_BUILD_PATH=C:\ws `
|
||||
-e IMAGE_DIGEST=${DIGEST} `
|
||||
-e PARENT_HOSTNAME=$env:computername `
|
||||
$IMAGE_NAME $CMD
|
||||
If ($LastExitCode -ne 0) {
|
||||
|
|
|
@ -110,7 +110,7 @@ def generic_windows(projects: str) -> List:
|
|||
],
|
||||
'artifact_paths': ['artifacts/**/*', '*_result.json', 'build/test-results.xml'],
|
||||
'agents': win_agents,
|
||||
'timeout_in_minutes': 120,
|
||||
'timeout_in_minutes': 150,
|
||||
'retry': {'automatic': [
|
||||
{'exit_status': -1, 'limit': 2}, # Agent lost
|
||||
{'exit_status': 255, 'limit': 2}, # Forced agent shutdown
|
||||
|
|
26
scripts/windows/pre-checkout.ps1
Normal file
26
scripts/windows/pre-checkout.ps1
Normal file
|
@ -0,0 +1,26 @@
|
|||
# Copyright 2021 Google LLC
|
||||
|
||||
# Licensed under the the Apache License v2.0 with LLVM Exceptions (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
|
||||
# https://llvm.org/LICENSE.txt
|
||||
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
echo "BUILDKITE_BUILD_CHECKOUT_PATH: $env:BUILDKITE_BUILD_CHECKOUT_PATH"
|
||||
echo "unlocking git"
|
||||
taskkill /F /IM git.exe
|
||||
rm -Force "$env:BUILDKITE_BUILD_CHECKOUT_PATH/.git/index.lock"
|
||||
echo "BUILDKITE_BUILD_PATH: $env:BUILDKITE_BUILD_PATH"
|
||||
echo 'running processes (before)'
|
||||
Get-Process | Where-Object {$_.Path -like "$env:BUILDKITE_BUILD_PATH*"} | Select-Object -ExpandProperty Path
|
||||
echo "unlocking $env:BUILDKITE_BUILD_PATH"
|
||||
handle -nobanner $env:BUILDKITE_BUILD_CHECKOUT_PATH
|
||||
c:\llvm-premerge-checks\scripts\windows\unlock_path.ps1 $env:BUILDKITE_BUILD_CHECKOUT_PATH
|
||||
echo 'running processes (after)'
|
||||
Get-Process | Where-Object {$_.Path -like "$env:BUILDKITE_BUILD_PATH*"} | Select-Object -ExpandProperty Path
|
53
scripts/windows/start_container.ps1
Normal file
53
scripts/windows/start_container.ps1
Normal file
|
@ -0,0 +1,53 @@
|
|||
# Copyright 2021 Google LLC
|
||||
|
||||
# Licensed under the the Apache License v2.0 with LLVM Exceptions (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
|
||||
# https://llvm.org/LICENSE.txt
|
||||
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Pull and start the Docker container for a Windows agent.
|
||||
# To setup a Windows agent see docs/playbooks.md
|
||||
|
||||
param(
|
||||
[string]$version = "stable",
|
||||
[switch]$testing = $false,
|
||||
[string]$workdir = "c:\ws"
|
||||
)
|
||||
|
||||
$NAME="agent-windows-buildkite"
|
||||
$IMAGE="gcr.io/llvm-premerge-checks/${NAME}:${version}"
|
||||
|
||||
Write-Output "Authenticating docker..."
|
||||
Write-Output "y`n" | gcloud auth configure-docker
|
||||
|
||||
Write-Output "Pulling new image '${IMAGE}'..."
|
||||
docker pull ${IMAGE}
|
||||
$DIGEST=$(docker image inspect --format "{{range .RepoDigests}}{{.}}{{end}}" $IMAGE) -replace ".*@sha256:(.{6})(.*)$","`$1"
|
||||
Write-Output "Image digest ${DIGEST}"
|
||||
Write-Output "Stopping old container..."
|
||||
docker stop ${NAME}
|
||||
docker rm ${NAME}
|
||||
Write-Output "Starting container..."
|
||||
if (${testing}) {
|
||||
docker run -it `
|
||||
-v ${workdir}:C:\ws `
|
||||
-v C:\credentials:C:\credentials `
|
||||
-e BUILDKITE_BUILD_PATH=C:\ws `
|
||||
-e IMAGE_DIGEST=${DIGEST} `
|
||||
${IMAGE} powershell
|
||||
} else {
|
||||
docker run -d `
|
||||
-v ${workdir}:C:\ws `
|
||||
-v C:\credentials:C:\credentials `
|
||||
-e BUILDKITE_BUILD_PATH=C:\ws `
|
||||
-e IMAGE_DIGEST=${DIGEST} `
|
||||
--name ${NAME} `
|
||||
${IMAGE}
|
||||
}
|
|
@ -1,12 +1,25 @@
|
|||
# Copyright 2021 Google LLC
|
||||
|
||||
# Licensed under the the Apache License v2.0 with LLVM Exceptions (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
|
||||
# https://llvm.org/LICENSE.txt
|
||||
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Based ob https://dandraka.com/2019/08/13/find-and-kill-processes-that-lock-a-file-or-directory/
|
||||
$path = $args[0]
|
||||
$handleOutput = & handle -a $path
|
||||
|
||||
Write-Host "Unlocking path" $path
|
||||
if ($handleOutput -match "no matching handles found") {
|
||||
Write-Host "Nothing to kill, exiting"
|
||||
exit
|
||||
}
|
||||
|
||||
$pidList = New-Object System.Collections.ArrayList
|
||||
$lines = $handleOutput -split "`n"
|
||||
foreach($line in $lines) {
|
|
@ -12,42 +12,16 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Pull and start the Docker container for a Windows agent.
|
||||
# To setup a Windows agent see docs/playbooks.md
|
||||
# Invoked at startup of windows machine. This indirection allows to simply
|
||||
# restart a machine and it will pick up all script changes and will use the
|
||||
# latest stable image.
|
||||
|
||||
param(
|
||||
[string]$version = "latest",
|
||||
[string]$version = "stable",
|
||||
[switch]$testing = $false,
|
||||
[string]$workdir = "c:\ws"
|
||||
)
|
||||
|
||||
$NAME="agent-windows-buildkite"
|
||||
$IMAGE="gcr.io/llvm-premerge-checks/${NAME}:${version}"
|
||||
|
||||
Write-Output "Authenticating docker..."
|
||||
Write-Output "y`n" | gcloud auth configure-docker
|
||||
|
||||
Write-Output "Pulling new image '${IMAGE}'..."
|
||||
docker pull ${IMAGE}
|
||||
$DIGEST=$(docker image inspect --format "{{range .RepoDigests}}{{.}}{{end}}" $IMAGE) -replace ".*@sha256:(.{6})(.*)$","`$1"
|
||||
Write-Output "Image digest ${DIGEST}"
|
||||
Write-Output "Stopping old container..."
|
||||
docker stop ${NAME}
|
||||
docker rm ${NAME}
|
||||
Write-Output "Starting container..."
|
||||
if (${testing}) {
|
||||
docker run -it `
|
||||
-v ${workdir}:C:\ws `
|
||||
-v C:\credentials:C:\credentials `
|
||||
-e BUILDKITE_BUILD_PATH=C:\ws `
|
||||
-e IMAGE_DIGEST=${DIGEST} `
|
||||
${IMAGE} powershell
|
||||
} else {
|
||||
docker run -d `
|
||||
-v ${workdir}:C:\ws `
|
||||
-v C:\credentials:C:\credentials `
|
||||
-e BUILDKITE_BUILD_PATH=C:\ws `
|
||||
-e IMAGE_DIGEST=${DIGEST} `
|
||||
--name ${NAME} `
|
||||
${IMAGE}
|
||||
}
|
||||
cd c:\llvm-premerge-checks
|
||||
git pull
|
||||
c:\llvm-premerge-checks\scripts\windows\start_container.ps1 -version $version -testing $testing -workdir $workdir
|
||||
|
|
Loading…
Reference in a new issue