Cloud Natives UK Meetup

Image Meetup LLC ©

I recently gave a lightning talk on assessing EKS security with kube-bench at Cloud Native UK, a joint virtual event being put together by the Cloud Native groups in Manchester, Wales, Glasgow, and Edinburgh, representing the cloud native communities from each of the countries in mainland UK. This was a shorter but updated version of the talk I gave at the end of last year at two AWS User Group meetups. The slides are available here and a recording of the event is available on YouTube (my presentation starts at 23:44). It was a very slick and well organized event (kudos to the organizers!) with very interesting presentations so check out the whole even on YouTube if you missed it.

How to download an entire S3 bucket recursively

Amazon S3 bucket
Image:  Amazon Web Services, Inc. ©

Sometimes I have the need to keep a local copy of an S3 bucket. Using the AWS console is ok if you just have few objects in the S3 bucket. But what do you do if you have hundreds of objects in your S3 bucket? The aws cli comes to rescue with this simple command:

aws s3 cp --recursive s3://my_s3_bucket .

The recursive flag downloads the entire S3 bucket recursively into the local directory (that’s what the dot at the end is for). The operation may take some time depending on the number of objects stored in the S3 bucket so be patient!

How to Validate a Jenkinsfile

Jenkins Pipeline
Image ©

As I’m using more and more often Jenkins Pipelines, I found the need to validate a Jenkinsfile in order to fix syntax errors before committing the file into version control and running the pipeline job in Jenkins. This can saves some time during development and allows to follow best practices when writing a Jenkinsfile as validation returns both errors and warnings.

There are several ways to validate a Jenkinsfile and some editors like VS Code even have a built-in linter. Personally, the easiest way I found is to validate a Jenkinsfile is to run the following command from the command line (provided you have Jenkins running somewhere):

curl --user username:password -X POST -F "jenkinsfile=<Jenkinsfile" http://jenkins-url:8080/pipeline-model-converter/validate

Note the following:

  1. If your Jenkins is authenticating users, you need to pass the username and password otherwise you can omit that part.
  2. By default, this command expects your Jenkinsfile to be called Jenkinsfile. If not, change the name in the command.
  3. Replace jenkins_url and possibly port 8080 based on the URL and port where you are running Jenkins. You can also use localhost as URL if you are running Jenkins on your machine.

If the Jenkinsfile validates, it will show a message like this one:

Jenkinsfile successfully validated.

Or, if you forgot to use steps within stage in your Jenkinsfile, the validation will flag an error like this:

Errors encountered validating Jenkinsfile:
WorkflowScript: 10: Unknown stage section "git". Starting with version 0.5, steps in a stage must be in a ‘steps’ block. @ line 10, column 9.
           stage('Checkout Code') {

WorkflowScript: 10: Expected one of "steps", "stages", or "parallel" for stage "Checkout Code" @ line 10, column 9.
           stage('Checkout Code') {

Happy validation!