배포 작업은 연결하고 산출물을 복사한 뒤 성공을 보고합니다. 작업이 연 터널은 다음 작업이 시작될 때도 살아 있을 수 있고, 작업이 바꾼 경로는 호스트 전체의 것입니다. 빌드 결과는 명령을 설명할 뿐, 남겨진 상태를 설명하지 않습니다. VPN을 수명이 있는 자원으로 다루고, 단계 시작의 한 줄로 다루지 마십시오.

이 호스트에서 또 무엇이 도는가

Jenkins 노드는 여러 실행기를 동시에 돌릴 수 있고, 호스트 경로나 리졸버 설정, 시스템 전역 연결을 바꾸는 작업은 그것을 모두에게 바꿉니다. 다른 작업이 알아차릴지는 경로와 필터링 정책에 달려 있고, VPN에 관한 일반 규칙에 달려 있지 않습니다. 저장소 접근, 산출물 접근, 제어 채널은 러너가 여전히 필요로 하는 별개의 요구 사항입니다. 완전한 터널을 고르기 전에 이것들을 배포 대상 목록에 넣으십시오.

제어 채널이 터널을 가로질러야 한다면 설계가 그것을 의도적으로 밝혀야 합니다. 롤백 중에 발견하는 것은 계획이 아닙니다. 두 목록을 적으십시오. 작업이 사적으로 도달해야 하는 것과 러너가 무슨 일이 있어도 도달해야 하는 것입니다.

이 작업에 사적 접근이 정말 필요한가

터널을 더하기 전에 빌드 단계에 그것이 필요한지 물으십시오. 전용 배포 에이전트가 승인된 산출물을 가져와 배포를 수행하면 일반 빌드 단계를 사설망 밖에 둘 수 있습니다. 그 분리는 빌드의 모든 단계에 터널 경유 라우팅을 가르치는 것보다 대개 쌉니다.

경계는 습관이 아니라 워크플로에서 고르십시오. 답이 아니오라면 이 페이지의 나머지는 필요 없으며, 그것이 얻을 수 있는 최선의 결과입니다.

다음 작업이 물려받는 상태

작업 전에, 사적 접근을 가진 동안에, 그리고 작업이 끝난 뒤에 무엇이 참이어야 하는지 취소까지 포함해 적으십시오. 종료 상태가 가장 자주 암묵적으로 남고, 다음 작업이 물려받는 것이 바로 그것입니다. 누군가의 기억에 두는 대신 파이프라인 옆에 적으십시오.

MomentWhat proves itWhat leaks if it is skipped
Job start: pre-flight route checkThe route table shows no tunnel from an earlier job, and the profile list is emptyA stale route sends deployment traffic into a dead tunnel
Job end: disconnect and shredThe profile is down and the temporary key file is goneThe next job inherits an open tunnel and a usable credential
Cancelled job: reboot or disposalThe host is replaced or rebooted before the next job startsA killed process leaves the tunnel up with no owner

전용 또는 일회용 에이전트는 그 경계를 강제하기 쉽게 만듭니다. 컨테이너나 네임스페이스는 그 네트워크와 권한 배치가 변경을 실제로 격리할 때만 도움이 됩니다.

프로그램이 아니라 연결을 멈추십시오

이 작업이 시작한 연결을 닫고 임시 자격 증명을 지우려면 파이프라인의 종료 경로를 사용하십시오. 다른 작업이 쓰는 호스트에서 프로그램 이름으로 프로세스를 맞추지 마십시오. 대신 그 특정 연결을 멈추십시오. 아래 두 명령이 정리의 전부이며, 둘 다 프로세스를 찾는 데 의존하지 않습니다.

vpn-cli disconnect --profile "$PROFILE"
rm -f "$RUNNER_TEMP/client.key"

종료는 격리가 아닙니다. 죽은 러너는 연 터널을 그대로 두고, 강제로 멈춘 프로세스는 그 블록을 통째로 건너뜁니다. 그래서 정리 명령만으로는 설계 전체가 될 수 없습니다. 실제로는 이렇게 실패합니다. 배포 작업이 복사 단계에서 취소되고 종료 블록은 한 번도 실행되지 않으며, 같은 호스트의 다음 작업은 살아 있는 터널과 도달할 수 없는 네트워크를 가리키는 경로를 안고 시작합니다. 그 장애는 다음 빌드에서 'DNS' 문제처럼 보이며, 원인이 된 작업이 끝난 뒤 몇 시간이 지나 나타납니다.

프로필 이름과 자격 증명 경로를 작업 출력에 기록하십시오. 식별자 없는 맨 연결 해제 명령은 나중에 감사하기 어렵습니다. 나중 조사가 물을 때 그 블록이 돌았다는 것을 증명하는 것도 로그 한 줄입니다.

아무도 쓰지 않는 호스트를 작업에 주십시오

일회용 인프라는 상속 문제를 관리하는 대신 없앱니다. 작업마다 새 에이전트는 경로도 프로필도 다른 사람의 자격 증명도 없이 시작하고, 파괴되면 작업이 남긴 것을 정리합니다. 빌드당 비용은 더 들지만, 정리 코드에 의존하지 않는 경계의 정직한 값입니다. 운영 네트워크를 건드리는 작업이라면 사고를 세어 볼 때 대개 더 싼 선택입니다.

공유 러너가 남아야 하는 곳에서는 실패와 취소를 성공한 복사만큼 세심하게 시험하십시오. 시험은 이 작업이 중간에 취소되었다면 다음 작업이 무엇을 보게 될지 보여 주어야 합니다. 작업은 그 접근과 임시 상태가 끝났을 때 끝나며, 복사 명령이 영을 반환할 때 끝나는 것이 아닙니다.

관련 글