จะส่งพารามิเตอร์ไปยัง azure Dev ops สร้างไปป์ไลน์จากภายนอกเพื่อควบคุมการดำเนินงานได้อย่างไร

คำถามของฉันคือจะส่งพารามิเตอร์ไปยัง azure Dev ops สร้างไปป์ไลน์จากภายนอกเพื่อควบคุมการดำเนินงานได้อย่างไร เพื่ออธิบายโดยละเอียดนี่คือคำอธิบาย:

ฉันมีโปรเจ็กต์ใน azure Dev ops ซึ่งมี build ไปป์ไลน์ที่กำหนดค่าด้วยชุดงานที่เกี่ยวข้องกับการสร้างโซลูชัน การสร้างแพ็คเกจที่ปรับใช้ได้ และอื่นๆ โดยปกติแล้ว การดำเนินการนี้ทำได้ดีและดีโดยไม่มีปัญหาใดๆ

สิ่งที่ฉันต้องการบรรลุผลคือการประกาศตัวแปรไปป์ไลน์ในคำจำกัดความการสร้างโปรเจ็กต์นี้ที่ฉันสามารถเข้าถึงได้จากภายนอกเมื่อฉันบอกว่ามันเป็นบางอย่างที่เหมือนกับแอปพลิเคชันภายนอกหรือแอปพลิเคชันภายนอกที่แตกต่างกันโดยสิ้นเชิงเช่น ms flow เพื่อที่ฉันจะได้ส่งค่าไปยังตัวแปรไปป์ไลน์ที่สร้างขึ้นใหม่ ตามที่ระบุไว้ข้างต้นและการใช้ค่านี้เก็บไว้ในตัวแปรใหม่นี้ ฉันควรจะสามารถข้ามขั้นตอนไม่กี่ขั้นตอนในไปป์ไลน์การ build และฉันควรจะสามารถดำเนินการได้เพียงไม่กี่ขั้นตอนเท่านั้น

ให้ฉันอธิบายด้วยตัวอย่าง:

  1. พิจารณาโปรเจ็กต์ชื่อ A ใน azure Dev ops ซึ่งมีไปป์ไลน์บิลด์ที่กำหนดค่าด้วยงานที่แตกต่างกัน 5 งาน
  2. ในไปป์ไลน์บิลด์เดียวกัน สมมติว่ามีตัวแปรไปป์ไลน์ใหม่ที่สร้างขึ้นเรียกว่าแฟล็ก
  3. พิจารณาแอปพลิเคชันภายนอก เช่น ms flow ซึ่งจะทริกเกอร์ไปป์ไลน์โปรเจ็กต์ A ในขั้นตอนที่ 1
  4. ฉันควรจะสามารถส่งค่าไปยังตัวแปรแฟล็กที่สร้างในขั้นตอนที่ 2 โดยใช้โฟลว์ในขั้นตอนที่ 3 เช่น true หรือ false
  5. การใช้ค่าแฟล็กที่ส่งผ่านไปยัง build ไปป์ไลน์จาก ms flow งานใน build ไปป์ไลน์ควรถูกดำเนินการ เช่น หากค่าที่มาจากแอปพลิเคชันภายนอกไปยัง build ไปป์ไลน์เป็นจริง ก็ควรดำเนินการเพียง 3, 4 งานใน build ไปป์ไลน์และข้ามไป ส่วนเท็จอื่นๆ ควรดำเนินการขั้นตอนทั้งหมดในไปป์ไลน์ build ใน azure Dev ops

คำถามคือทำอย่างไรจึงจะบรรลุหรือทำให้พฤติกรรมประเภทนี้เกิดขึ้น?

โปรดช่วยฉันในการแก้ไขปัญหานี้?

หากไม่สามารถส่งค่าไปยังตัวแปรได้ โปรดแจ้งให้เราทราบวิธีการบรรลุพฤติกรรมการข้ามในไปป์ไลน์ Azure Dev ops build ที่ทริกเกอร์จากแอปพลิเคชันภายนอก เช่น ms flow


person Chaitanya N G    schedule 26.09.2019    source แหล่งที่มา


คำตอบ (2)


เนื่องจากมี REST API ที่สามารถส่งผ่านพารามิเตอร์เมื่อจัดคิวบิวด์ และคุณสามารถระบุเงื่อนไขที่กำหนดเองในไปป์ไลน์บิวด์ของคุณได้ จึงมีวิธีแก้ปัญหาชั่วคราว ตามเอกสาร REST API คุณสามารถแปลงเป็นสคริปต์ Powershell ได้ดังนี้

Param(
       [string]$collectionurl = "https://dev.azure.com/{orgname}",
       [string]$project = "{projectname}",
       [string]$user = "{useraccount}",
       [string]$token = "{yourPAT}"
)

$base64AuthInfo= [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $token)))

$defurl = "$collectionurl/$project/_apis/build/builds?api-version=5.0"
$json = '{"parameters":  "{\"AnotherParameter\":  \"true\"}","definition":  {"id":  "{definitionId}"}}'
$updatedef = Invoke-RestMethod -Uri $defurl -Method Post -Body $json -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

คุณสามารถสร้างไพพ์ไลน์ได้สามแบบ ไปป์ไลน์แรกคือไปป์ไลน์หลักของคุณซึ่งมี 5 งานที่แตกต่างกัน คุณสามารถกำหนดเงื่อนไขที่กำหนดเองได้ดังนี้ หมายความว่าเมื่อค่าของ AnotherParameter เป็นจริงเท่านั้น งานจึงจะรัน

ป้อนคำอธิบายรูปภาพที่นี่

ไปป์ไลน์ที่สองและไปป์ไลน์ที่สามคือไปป์ไลน์ทริกเกอร์ ในไปป์ไลน์ที่สอง คุณสามารถใช้สคริปต์ PowerShell เพื่อตั้งค่า AnotherParameter เป็นเท็จ และในไปป์ไลน์ที่สาม ให้ตั้งค่าเป็นจริง

จากนั้น ตั้งค่าไปป์ไลน์ที่สองถูกทริกเกอร์โดยแอปพลิเคชันภายนอก และไปป์ไลน์ที่สามถูกทริกเกอร์โดย repo ของคุณหรือผู้อื่น

เมื่อแอปพลิเคชันภายนอกทริกเกอร์ไปป์ไลน์ที่สอง ค่าของ AnotherParameter จะเป็นเท็จ และงานบางอย่างในไปป์ไลน์แรกจะไม่ทำงาน

เมื่อไปป์ไลน์ที่สามถูกทริกเกอร์โดยคอมมิตของคุณ ค่าของ AnotherParameter จะเป็นจริง และงานทั้งหมดในไปป์ไลน์แรกจะทำงานตามที่คาดไว้

person Frank Wang-MSFT    schedule 30.09.2019
comment
ขอบคุณสำหรับข้อมูลและเวลาของคุณ ฉันสามารถดำเนินการต่อไปได้สำเร็จโดยไม่มีปัญหาใดๆ ขอบคุณมาก วิธีแก้ปัญหาได้ปลดบล็อกฉันแล้ว - person Chaitanya N G; 01.10.2019

คุณสามารถเรียกใช้ Azure DevOps REST API และส่งพารามิเตอร์ในคำขอได้ ดูข้อมูลเพิ่มเติมที่โพสต์นี้: เริ่ม สร้างและส่งตัวแปรผ่าน VSTS Rest API

หากคุณต้องการเพิ่มเงื่อนไขให้กับงานหรือไปป์ไลน์บิลด์ โปรดดูเอกสารประกอบสำหรับเงื่อนไข: เงื่อนไข - ไปป์ไลน์ Azure

person point    schedule 26.09.2019