Skip to content
Snippets Groups Projects
Unverified Commit 0739ac22 authored by Maxim Cournoyer's avatar Maxim Cournoyer
Browse files

Jenkinsfile: Publish release artifacts for release branches.

Previously, the Jenkinsfile did not publish anything except for the
repositories: the release tarball would not get copied to
https://dl.jami.net for stable channel, and no commit nor tag would be
published for the release.

This change addresses these shortcomings with the following changes:

1. Tarballs can be published for the stable channel.
2. Release commits/tags can be published to their corresponding
branch (stable/nightly).

The RELEASE_VERSION string is also once again derived in a
deterministic fashion, from the date of the last commit.

* Jenkinsfile (SSH_PRIVATE_KEY): Remove variable.
(RING_PUBLIC_KEY_FINGERPRINT): Rename to...
(JAMI_PUBLIC_KEY_FINGERPRINT): ... this.
(GIT_USER_EMAIL, GIT_USER_NAME, GIT_PUSH_URL)
(JENKINS_SSH_KEY, DL_SSH_KEY): New variables.
(params.DEPLOY): Fix description.
(Checkout channel branch): New stage.
(Generate release tarball): Also commit and tag.
(Publish release artifacts): New stage to publish conditionally based on the
DEPLOY parameter and the selected channel.
(Sign & deploy packages): Use the 'sshagent' step to setup SSH access.
<--remote-ssh-identity-file>: Remove argument.
<--keyid>: Adjust variable name.
* scripts/deploy-packages.sh (package_snap): Simplify.

Change-Id: I9008ecc2a4ef9820dbc96e26c966ae72110d897d
parent fa732273
No related branches found
No related tags found
No related merge requests found
......@@ -26,14 +26,23 @@
// 2. ws-cleanup plugin
// 3. ansicolor plugin
// TODO:
// - GPG-sign release tarballs.
// - GPG-sign release commits.
// - Allow publishing from any node, to avoid relying on a single machine.
// Configuration globals.
def SUBMODULES = ['daemon', 'lrc', 'client-gnome', 'client-qt']
def TARGETS = [:]
def SSH_PRIVATE_KEY = '/var/lib/jenkins/.ssh/gplpriv'
def REMOTE_HOST = env.SSH_HOST_DL_RING_CX
def REMOTE_BASE_DIR = '/srv/repository/ring'
def RING_PUBLIC_KEY_FINGERPRINT = 'A295D773307D25A33AE72F2F64CD5FA175348F84'
def JAMI_PUBLIC_KEY_FINGERPRINT = 'A295D773307D25A33AE72F2F64CD5FA175348F84'
def SNAPCRAFT_KEY = '/var/lib/jenkins/.snap/key'
def GIT_USER_EMAIL = 'jenkins@jami.net'
def GIT_USER_NAME = 'jenkins'
def GIT_PUSH_URL = 'ssh://jenkins@review.jami.net:29420/jami-project'
def JENKINS_SSH_KEY = '35cefd32-dd99-41b0-8312-0b386df306ff'
def DL_SSH_KEY = '5825b39b-dfc6-435f-918e-12acc1f56221'
pipeline {
agent {
......@@ -72,7 +81,10 @@ pipeline {
description: 'Whether to build ARM packages.')
booleanParam(name: 'DEPLOY',
defaultValue: false,
description: 'Whether and where to deploy packages.')
description: 'Whether to deploy packages.')
booleanParam(name: 'PUBLISH',
defaultValue: false,
description: 'Whether to upload tarball and push to git.')
choice(name: 'CHANNEL',
choices: 'internal\nnightly\nstable',
description: 'The repository channel to deploy to. ' +
......@@ -107,6 +119,28 @@ See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration_client
}
}
stage('Configure Git') {
steps {
sh """git config user.name ${GIT_USER_NAME}
git config user.email ${GIT_USER_EMAIL}
"""
}
}
stage('Checkout channel branch') {
when {
expression {
params.CHANNEL != 'internal'
}
}
steps {
sh """git checkout ${params.CHANNEL}
git merge --no-commit FETCH_HEAD
"""
}
}
stage('Fetch submodules') {
steps {
echo 'Initializing submodules ' + SUBMODULES.join(', ') +
......@@ -119,14 +153,43 @@ See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration_client
stage('Generate release tarball') {
steps {
sh '''#!/usr/bin/env -S bash -l
sh """\
#!/usr/bin/env -S bash -l
git commit -am 'New release.'
make portable-release-tarball .tarball-version
'''
git tag \$(cat .tarball-version) -am "Jami \$(cat .tarball-version)"
"""
stash(includes: '*.tar.gz, .tarball-version',
name: 'release-tarball')
}
}
stage('Publish release artifacts') {
when {
expression {
params.PUBLISH && params.CHANNEL != 'internal'
}
}
steps {
sshagent(credentials: [JENKINS_SSH_KEY, DL_SSH_KEY]) {
echo "Publishing to git repository..."
script {
if (params.CHANNEL == 'stable') {
// Only stables releases get tarballs and a tag.
sh 'git push --tags'
echo "Publishing release tarball..."
sh 'rsync --verbose jami*.tar.gz ' +
"${REMOTE_HOST}:${REMOTE_BASE_DIR}" +
"/release/tarballs/"
} else {
sh 'git push'
}
}
}
}
}
stage('Build packages') {
environment {
DISABLE_CONTRIB_DOWNLOADS = 'TRUE'
......@@ -185,6 +248,7 @@ See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration_client
}
steps {
sshagent(credentials: [DL_SSH_KEY]) {
script {
TARGETS.each { target ->
try {
......@@ -205,9 +269,8 @@ See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration_client
echo "Deploying ${distribution} packages..."
sh """scripts/deploy-packages.sh \
--distribution=${distribution} \
--keyid="${RING_PUBLIC_KEY_FINGERPRINT}" \
--keyid="${JAMI_PUBLIC_KEY_FINGERPRINT}" \
--snapcraft-login="${SNAPCRAFT_KEY}" \
--remote-ssh-identity-file="${SSH_PRIVATE_KEY}" \
--remote-repository-location="${REMOTE_HOST}:${REMOTE_BASE_DIR}/${params.CHANNEL}" \
--remote-manual-download-location="${REMOTE_HOST}:${REMOTE_BASE_DIR}/manual-${params.CHANNEL}"
"""
......@@ -217,3 +280,4 @@ See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration_client
}
}
}
}
......@@ -27,21 +27,9 @@ export TARBALLS ?= /var/cache/jami
TARBALL_VERSION := $(shell cat $(CURDIR)/.tarball-version 2> /dev/null)
ifeq ($(TARBALL_VERSION),)
# YYYY-MM-DD
LAST_COMMIT_DATE:=$(shell git log -1 --format=%cd --date=short)
CURRENT_DATE:=$(shell date +"%Y-%m-%d")
# number of commits that day
NUMBER_OF_COMMITS:=$(shell git log --format=%cd --date=short | grep -c $(LAST_COMMIT_DATE))
# YYMMDD
CURRENT_DATE_SHORT:=$(shell echo $(CURRENT_DATE) | sed -s 's/-//g')
# last commit id
LAST_COMMIT_DATE := $(shell git log -1 --format=%cd --date=format:'%Y%m%d.%H%M')
COMMIT_ID := $(shell git rev-parse --short HEAD)
RELEASE_VERSION:=$(CURRENT_DATE_SHORT).$(NUMBER_OF_COMMITS).$(COMMIT_ID)
RELEASE_VERSION := $(LAST_COMMIT_DATE).$(COMMIT_ID)
else
$(warning Using version from the .tarball-version file: $(TARBALL_VERSION))
RELEASE_VERSION := $(TARBALL_VERSION)
......
......@@ -225,10 +225,10 @@ function package_snap()
mkdir -p ${DISTRIBUTION_REPOSITORY_FOLDER}
ls packages/${DISTRIBUTION}*
cp packages/${DISTRIBUTION}*/*.snap ${DISTRIBUTION_REPOSITORY_FOLDER}/
elif [[ "${CHANNEL:0:7}" == "nightly" ]]; then
elif [[ $CHANNEL =~ nightly ]]; then
snapcraft login --with ${SNAPCRAFT_LOGIN}
snapcraft push packages/${DISTRIBUTION}*/*.snap --release edge
elif [[ "${CHANNEL:0:6}" == "stable" ]]; then
elif [[ $CHANNEL =~ stable ]]; then
snapcraft login --with ${SNAPCRAFT_LOGIN}
snapcraft push packages/${DISTRIBUTION}*/*.snap --release stable
fi
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment