从“执行shell”命令创buildJenkinsfile

Jenkins版本上有一系列Execute shell框。 谷歌和观看video3天后,我需要帮助。 我更像是一个系统pipe理员而不是编码器,所以我很难用正确的选项和语法创build一个Jenkins文件。 任何人都可以build议吗? 我需要创build一个pipe道。 <name>任何内容都是出于安全原因,我在文件中有真正的值。

执行shell

mkdir -p deploy

执行shell

 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/ .) 

执行shell

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

执行shell

 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 

执行shell

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

执行shell

 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 

执行shell

 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 

Jenkins最适合用来连接所有构build块,而不是构build脚本本身。 就像Alfe所说的那样,最好把所有这些都放到shell脚本中,然后用Jenkins运行shell脚本。

但是,如果你真的想在pipe道工作中做到这一点,它会看起来像这样(声明式pipe道):

 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" } } } }