diff --git a/.gitignore b/.gitignore index 6da7580bbde22bf356f9c03456379f341a025152..5d987d9845bf7cc699eb6a17cb40e8f7d076fa8c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,2 @@ -# Access key id and secret for AWS. -aws.ini - -# EB configuration. -.elasticbeanstalk - -# Elastic Beanstalk Files -.elasticbeanstalk/* -!.elasticbeanstalk/*.cfg.yml -!.elasticbeanstalk/*.global.yml - -# Zipped build. -deployment.zip - -# Docker login configuration -jenkins.json +# ECS +task.json diff --git a/Dockerfile b/Dockerfile index 17fe4f7c0fb76ec2912795e17d0d69d500063672..178463ebc91661f871dee9088b9c8141e521a949 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM jenkins/jenkins:lts +FROM jenkins/jenkins:2.89.4 USER root @@ -8,6 +8,7 @@ RUN apt-get -qq update && apt-get install -y \ moreutils \ python3 \ python3-pip \ + redis-tools \ jq \ zip \ && rm -rf /var/lib/apt/lists/* diff --git a/README.md b/README.md index b0c5409295b5ed676cf32456a1fc5b5af17c4566..1db6e3dd30647cabee5fd3d586e56ba741ec5f3f 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,5 @@ # Jenkins Docker Image This is the docker image for the BlocPower jenkins image. -## Docker build & push -aws ecr get-login --no-include-email --region us-east-1 -docker build -t blocp/jenkins . - -docker tag blocp/jenkins:latest 763311425122.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest -docker tag blocp/jenkins:latest 763311425122.dkr.ecr.us-east-1.amazonaws.com/jenkins:1.0 - -docker push 763311425122.dkr.ecr.us-east-1.amazonaws.com/jenkins - -## AWS ECS -aws ecs register-task-definition --cli-input-json file://jenkins.task.json - -## aws.ini -The AWS configuration is contained in the `aws.ini` file in the top-level directory. This is `.gitignore`d so that the key id and secret are not version controlled. Ask for the key if you need to build this docker image. When Jenkins builds itself, it copies its own `aws.ini` into the repository before building the image. +## Docker build, push and register ECS task +`VERSION=1.x ./scripts/deploy_jenkins.sh` diff --git a/jenkins.task.json b/jenkins.task.json index d503c2d92a8be5fc7f8f42b686715c386793e827..154f237c809acd816d4770624991141531c3122c 100644 --- a/jenkins.task.json +++ b/jenkins.task.json @@ -4,7 +4,7 @@ "containerDefinitions": [ { "name": "jenkins-task", - "image": "763311425122.dkr.ecr.us-east-1.amazonaws.com/jenkins:1.2", + "image": "", "cpu": 1024, "memoryReservation": 2048, "links": [], diff --git a/plugins.txt b/plugins.txt index 23505136f7d7f3b09a641fb3ea1aca3e59b2297a..7867e14d4765d409056d7ecf5d55070135114443 100644 --- a/plugins.txt +++ b/plugins.txt @@ -1,6 +1,7 @@ amazon-ecr:1.6 aws-credentials:1.23 credentials:2.1.16 +envinject:2.1.5 docker-workflow:1.14 git:3.7.0 github:1.28.1 diff --git a/scripts/deploy_jenkins.sh b/scripts/deploy_jenkins.sh new file mode 100755 index 0000000000000000000000000000000000000000..22ea5664214ed2bee5a2452d6ff9ee8b5777faa9 --- /dev/null +++ b/scripts/deploy_jenkins.sh @@ -0,0 +1,51 @@ +#! /bin/bash +# +# VERSION=1.x ./scripts/deploy_jenkins.sh +# + +function heading() { + echo -e "\033[95m==========> $1\033[0m" +} + +heading "Starting..." + +ECR_REPO_HOST="763311425122.dkr.ecr.us-east-1.amazonaws.com" +PROJECT="$ECR_REPO_HOST/jenkins" + +if [ -z "$VERSION" ]; then + echo "Missing image version" + exit +fi + +IMAGE="$PROJECT:$VERSION" +IMAGE_LATEST="$PROJECT:latest" + +# Build image +heading "Building docker image: $IMAGE" +docker build -t $IMAGE -t $IMAGE_LATEST . + +# Login and push $IMAGE and $IMAGE_LATEST +$(aws ecr get-login --no-include-email --region us-east-1) +docker push $PROJECT + +# Add image to task definition and register with ECS +jq '.containerDefinitions[0].image = "'$IMAGE'"' jenkins.task.json > task.json +aws ecs register-task-definition --cli-input-json file://task.json + +# Get the latest task definition +LATEST_TASK_DEFINITION=$(aws ecs list-task-definitions --family-prefix jenkins --sort DESC | jq '.taskDefinitionArns[0] ') +LATEST_TASK_DEFINITION=$(echo $LATEST_TASK_DEFINITION | tr -d '"' | awk -F'/' '{print $2}') + +# Stop current task +TASK_RUNNING_ARN=$(aws ecs list-tasks --cluster jenkins | jq '.taskArns[0]' | tr -d '"') +heading "Stopping task: $TASK_RUNNING_ARN" +aws ecs stop-task --task $TASK_RUNNING_ARN --cluster jenkins + +# Start new task +heading "Starting task $LATEST_TASK_DEFINITION" +aws ecs run-task --cluster jenkins --task-definition $LATEST_TASK_DEFINITION + +# Cleanup +rm task.json +docker rmi $IMAGE +docker rmi $IMAGE_LATEST