When I learned HTML tables back in the 90s,
at some point I discovered the <thead> element
for grouping the <th> column headers.
What I missed was there should be a <tr> element between the two.
In other words, a well-formed HTML table with a header looks like this:
<table>
<thead>
<tr>
<th>Name</th>
<th>Value</th>
<th>Date</th>
</tr>
…continue.
Title: The Italian Job
Director: Peter Collinson
Rating: ★ ★ ★ ★
Released: 1969
Keywords: heist, comedy, cars
Country: UK
Watched: 17 Febuary, 2017
The Italian Job movie is worth your time.
One of the quintessential movies of the Swinging Sixties,
its British sensibility wears well, almost 50 years on.
The humour still works.
And it’s probably the best advertisement that the Mini ever had.
Charlie Croker (Michael Caine) has inherited a plan to rip off $4 million in gold bullion
from Fiat in Turin.
He and the lads are going to help the balance of payments
by bringing the loot back from the Common Market.
(They’re proto-Euroskeptics.)
And they’re going to do it by causing the mother …continue.
Title: Kill Me Three Times
Director: Kriv Stenders
Rating: ★ ★ ★
Released: 2014
Keywords: black comedy thriller
Country: Australia
Watched: 10 February, 2017
A jealous husband engages
a private detective-cum-killer for hire (Simon Pegg) to follow his wife.
Upon proof of her infidelity, he orders a hit,
which triggers a comedy of errors and double crosses,
which ultimately leaves most of the cast dead at each other’s hands.
There’s not much to like about this Australian noirish comedy.
It’s bloody but not that funny.
The characters are thinly drawn and unengaging.
They’re a far cry from Tarantino’s gonzo motormouths
or the Coen Brother’s quirky killers.
[Previously published at the now defunct MetaBrite Dev Blog.]
A collection of miscellaneous tips on using Pipelines in Jenkins 2.0.
#6 in a series on Jenkins Pipelines
Environment Variables
Use the withEnv step to set environment variables.
Don’t manipulate the env global variable.
The confusing example that you see in the documents,
PATH+WHATEVER=/something,
simply means to prepend /something to $PATH.
The +WHATEVER has no other effect.
Credentials
The withEnv step should not be used to introduce secrets into the build environment.
Use the withCredentials plugin instead.
withCredentials([
[$class: 'StringBinding', credentialsId: 'GPG_SECRET', variable: 'GPG_SECRET'],
[$class: 'AmazonWebServicesCredentialsBinding',
credentialsId: '0defaced-cafe-f00d-badd-0000000ff1ce',
accessKeyVariable: 'AWS_ACCESS_KEY_ID',
secretKeyVariable: 'AWS_SECRET_ACCESS_KEY']
])
…continue.
Title: I Shall Wear Midnight
Author: Terry Pratchett
Rating: ★ ★ ★ ★
Publisher: Harper
Copyright: 2010
Pages: 355
Keywords: humor, fantasy
Reading period: 3–5 February, 2017
Tiffany Aching is now the overworked and overly responsible Witch of the Chalk.
People everywhere are fearing and distrusting witches more.
When her patient, the ailing Baron dies, she is blamed.
Other troubles multiply.
Eventually she realizes that the Cunning Man,
a long-dead witchfinder,
is seeping poison into people’s hearts.
Aided by the troublemaking Nac Mac Feegle, she defeats him.
Recommended.
I Shall Wear Midnight follows
The Wee Free Men, A Hat Full of Sky, and Wintersmith.
[Previously published at the now defunct MetaBrite Dev Blog.]
Jenkins Pipelines are written in a Groovy DSL.
This is a good choice but there are surprises.
#5 in a series on Jenkins Pipelines
Groovy as a DSL
Groovy lends itself to writing DSLs (Domain-Specific Languages)
with a minimum of syntactic overhead.
You can frequently omit the parentheses, commas, and semicolons that litter other languages.
Groovy has interpolated GStrings, lists, maps, functions, and closures.
Closures
Closures are anonymous functions where state can be captured at declaration time
to be executed later.
The blocks that follow many Pipeline steps (node, stage, etc) are closures.
Here’s an example of a Closure called acceptance_integration_tests,
where the release_level parameter is a String
which must be either …continue.
I uploaded some presentations to SpeakerDeck.com tonight.
Here are various presentations of mine at SpeakerDeck.com and SlideShare.net:
[Previously published at the now defunct MetaBrite Dev Blog.]
If there isn’t a built-in Pipeline step to accomplish something,
you’ll almost certainly use the sh step.
#4 in a series on Jenkins Pipelines
The sh step runs the Bourne shell—/bin/sh, not Bash aka the Bourne-again shell—with the -x (xtrace) and -e (errexit) options.
The xtrace option means that every step in the sh block is echoed to the Jenkins log,
after commands have been expanded by the shell.
This is useful but you could echo the contents of passwords or secret keys inadvertently.
Use set +x in your sh block to control this.
The errexit option means that the script will abort …continue.
[Previously published at the now defunct MetaBrite Dev Blog.]
Much of our code is in one large GitHub repository,
from which several different applications are built.
When changes are pushed to the master branch,
we want only the applications in affected directories to be built.
This was not easy to get right with “Pipeline script from SCM” builds.
#3 in a series on Jenkins Pipelines
Configuration
To get builds to trigger upon a push to GitHub,
you need to configure a webhook pointing to your Jenkins Master.
Create an SSH key for Jenkins/GitHub.
A passphrase is recommended.
Donald Trump is now claiming (WaPo):
Speaking to the U.S. Central Command on Monday,
President Trump went off his prepared remarks to make a truly stunning claim:
The media was intentionally covering up reports of terrorist attacks.
“You’ve seen what happened in Paris, and Nice.
All over Europe, it’s happening,” he said to the assembled military leaders.
“It’s gotten to a point where it’s not even being reported.
And in many cases the very, very dishonest press doesn’t want to report it.
They have their reasons, and you understand that.”
More: The Atlantic, Vice.
This is ridiculous on the face of it.
With literally billions of cellphone cameras in circulation
and hundreds of millions of …continue.
Previous »
« Next