2017-09-14 165 views
0

我在Jenkins版本上有一系列Execute shell框。谷歌和觀看視頻3天后,我需要幫助。我更像一個系統管理員而不是編碼器,所以我很難用正確的選項和語法創建一個Jenkins文件。任何人都可以建議嗎?我需要創建一個管道。 <name>中的任何內容都是出於安全原因,我具有文件中的真實值。從「執行外殼」命令創建Jenkinsfile

執行殼

mkdir -p deploy

執行殼

cp -R code/api deploy/ 
cp docker/Dockerfile.dev deploy/ 
(cd deploy/api/<Name>.<Name>.Web/ && aws s3 cp --recursive --region=eu-west-1 s3://config.<name>/audience-view/atg/dev/API/ .) 

執行殼

cd deploy && docker build -t <name> -f Dockerfile.dev .

執行殼

aws ecr get-login --region eu-west-1 > docker_login.sh && chmod +x 
docker_login.sh && ./docker_login.sh 
docker tag <name>:latest 543573289192.dkr.ecr.eu-west- 
1.amazonaws.com/<name>:latest 
docker push <name>.dkr.ecr.eu-west-1.amazonaws.com/<name>:latest 

執行殼

docker rmi audience-view-dev-api 
docker rmi 543573289192.dkr.ecr.eu-west-1.amazonaws.com/<name>:latest 

執行殼

RUNNING_TASKS=$(aws ecs list-tasks --region=eu-west-1 --cluster <name> --family <name> --query 'taskArns') 
if [ "$RUNNING_TASKS" != "[]" ]; then 
TASK_ARN=$(aws ecs list-tasks --region=eu-west-1 --cluster a<name> --family <name> --query 'taskArns[0]' | sed 's/\"//g') 
aws ecs stop-task --region=eu-west-1 --cluster=<name> --task=$TASK_ARN --reason="Deployment from Jenkins" 
while [ $RUNNING_TASKS != "[]" ]; do 
    sleep 5 
    RUNNING_TASKS=$(aws ecs list-tasks --region=eu-west-1 --cluster <name> --family <name> --query 'taskArns') 
done 
fi 

執行殼

TASK_ARN=$(aws ecs start-task --region=eu-west-1 --cluster <name> --task-definition <name> --container-instances 5f0c5b75-64a2-45cf-8ced-d6a6d13d2666 --query 'tasks[0].taskArn' | sed 's/arn:aws:ecs:eu-west-1:543573289192:task\///' | sed 's/\"//g') 
TASK_STATUS=$(aws ecs describe-tasks --region=eu-west-1 --cluster <name> --tasks $TASK_ARN --query 'tasks[0].lastStatus') 
while [ $TASK_STATUS == "PENDING" ]; do 
echo $TASK_STATUS 
TASK_STATUS=$(aws ecs describe-tasks --region=eu-west-1 --cluster <name> --tasks $TASK_ARN --query 'tasks[0].lastStatus' | sed 's/\"//g') 
if [ $TASK_STATUS == "STOPPED" ]; then 
    echo $(aws ecs describe-tasks --region=eu-west-1 --cluster <name> --tasks $TASK_ARN --query 'tasks[0].containers[0].exitCode') 
    exit 1 
fi 
done 
+0

我認爲這是更好地在任何RCS源(最好是時下的git )。詹金斯的工作應該檢查項目並調用一個腳本。這可以做你粘貼到你的問題上面的所有東西,或者調用一堆其他腳本,每個腳本都在做一個塊。 – Alfe

回答

0

詹金斯最好用作膠水所有構建件連接在一起,而不是建立腳本本身。正如阿爾菲提到的那樣,最好將這一切都放在一個shell腳本中,然後用Jenkins運行shell腳本。

但是,如果你真的想這樣做的管道作業時,它會是這個樣子(聲明管道):

pipeline { 
    agent any 

    stages { 
     stage('setup') { 
      steps { 
       sh "mkdir -p deploy" 
      } 
     stage('nextStage') { 
      steps { 
       sh """ 
        cp -R code/api deploy/ 
        cp docker/Dockerfile.dev deploy/ 
        (cd deploy/api/<Name>.<Name>.Web/ && aws s3 cp --recursive --region=eu-west-1 s3://config.<name>/audience-view/atg/dev/API/ .) 
       """ 
      } 
     } 
     stage('anotherStage') { 
      steps { 
       echo "repeat for all your shell steps" 
      } 
     } 
    } 
}