4 SCRIPT_DIR="$(readlink -f $(dirname ${BASH_SOURCE[0]}))"
6 WITH_VAGRANT="${WITH_VAGRANT:-yes}"
7 JENKINS_HOSTNAME="${JENKINS_HOSTNAME:-localhost}"
8 JENKINS_ADMIN_USERNAME="${JENKINS_ADMIN_USERNAME:-admin}"
9 JENKINS_ADMIN_PASSWORD="${JENKINS_ADMIN_PASSWORD:-admin}"
10 JENKINS_LFTOOLS_USERNAME="${JENKINS_LFTOOLS_USERNAME:-icn.jenkins}"
11 JENKINS_SSH_USERNAME="${JENKINS_SSH_USERNAME:-icn.jenkins}"
12 CLUSTER_MASTER_IP="${CLUSTER_MASTER_IP:-localhost}"
13 CLUSTER_SSH_USER="${CLUSTER_SSH_USER:-root}"
15 BUILD_DIR=${SCRIPT_DIR/icn/icn/build}
18 ICN_DIR="${SCRIPT_DIR}/.."
19 # The ci-management repo must be a sibling of the icn repo
20 CI_MANAGEMENT_DIR="${ICN_DIR}/../ci-management"
21 JJB_PATH="${CI_MANAGEMENT_DIR}/jjb:${ICN_DIR}/ci/jjb"
23 # Workaround for KuD installer which messes with /etc/environment
24 function cleanup_after_kud {
25 sed -i -e '/ANSIBLE_CONFIG/d' /etc/environment
28 function install_jenkins {
30 export DEBIAN_FRONTEND=noninteractive
32 apt-get install -y ca-certificates python3-pip
33 pip3 install ansible jenkins-job-builder lftools
36 ansible-galaxy install -r ${SCRIPT_DIR}/galaxy-requirements.yaml --roles-path /etc/ansible/roles
37 ansible-playbook ${SCRIPT_DIR}/site_jenkins.yaml --extra-vars "@${SCRIPT_DIR}/vars.yaml" -v
39 # The Bluval job requires docker access
40 usermod -aG docker jenkins
42 # Restart Jenkins to take into account any group changes above
43 systemctl restart jenkins
46 mkdir -p ${HOME}/.config/jenkins_jobs
47 cp ${SCRIPT_DIR}/jenkins_jobs.ini ${HOME}/.config/jenkins_jobs/jenkins_jobs.ini
48 git clone --recursive https://gerrit.akraino.org/r/ci-management "${CI_MANAGEMENT_DIR}"
51 function install_credentials {
52 if [[ ! -f ${JENKINS_SSH_PRIVATE_KEY} ]]; then
53 echo "JENKINS_SSH_PRIVATE_KEY must be set to the path of the private key of ${JENKINS_SSH_USERNAME}"
57 wget http://${JENKINS_HOSTNAME}:8080/jnlpJars/jenkins-cli.jar -O ${BUILD_DIR}/jenkins-cli.jar
58 cat <<EOF >${BUILD_DIR}/jenkins-ssh-credential.xml
59 <com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey plugin="ssh-credentials@1.13">
62 <description></description>
63 <username>${JENKINS_SSH_USERNAME}</username>
64 <privateKeySource class="com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey\$DirectEntryPrivateKeySource">
65 <privateKey>$(cat ${JENKINS_SSH_PRIVATE_KEY})</privateKey>
67 </com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey>
69 java -jar ${BUILD_DIR}/jenkins-cli.jar -auth ${JENKINS_ADMIN_USERNAME}:${JENKINS_ADMIN_PASSWORD} -s http://${JENKINS_HOSTNAME}:8080/ create-credentials-by-xml system::system::jenkins _ <${BUILD_DIR}/jenkins-ssh-credential.xml
72 function install_lftools_credentials {
73 cat <<EOF >/var/lib/jenkins/.netrc
74 machine nexus.akraino.org login ${JENKINS_LFTOOLS_USERNAME} password ${JENKINS_LFTOOLS_PASSWORD}
76 chown jenkins:jenkins /var/lib/jenkins/.netrc
77 chmod 0600 /var/lib/jenkins/.netrc
80 function update_jobs {
81 # TODO Find a better way to do this without touching files under
83 sed -i -e "s!git-url: .*!git-url: 'ssh://${JENKINS_SSH_USERNAME}@gerrit.akraino.org:29418'!" ${SCRIPT_DIR}/jjb/defaults.yaml
84 sed -i -e "s!bluval-cluster-master-ip: .*!bluval-cluster-master-ip: ${CLUSTER_MASTER_IP}!" ${SCRIPT_DIR}/jjb/defaults.yaml
85 sed -i -e "s!bluval-cluster-ssh-user: .*!bluval-cluster-ssh-user: ${CLUSTER_SSH_USER}!" ${SCRIPT_DIR}/jjb/defaults.yaml
87 # This will create all 344 jobs:
88 # jenkins-jobs update ${JJB_PATH}:${ICN_DIR}/ci/jjb/project.yaml
90 # These are the ICN jobs we are interested in
91 if [[ ${WITH_VAGRANT} == "yes" ]]; then
92 jenkins-jobs update ${JJB_PATH} icn-master-vagrant-verify-verifier
94 jenkins-jobs update ${JJB_PATH} icn-master-bm-verify-bm_verifier
95 jenkins-jobs update ${JJB_PATH} icn-bluval-daily-master
96 #jenkins-jobs update ${JJB_PATH} icn-master-verify
98 # These are additional ICN jobs:
99 # if [[ ${WITH_VAGRANT} == "yes" ]]; then
100 # jenkins-jobs update ${JJB_PATH} icn-master-vagrant-verify-verify_nestedk8s
104 function install_jenkins_id {
105 # Create a new key if one does not exist
106 ssh-keygen -q -t rsa -N '' -f /var/lib/jenkins/jenkins-rsa -C jenkins@$(hostname) <<<n >/dev/null 2>&1 || true
107 ssh-copy-id -i /var/lib/jenkins/jenkins-rsa -f ${CLUSTER_SSH_USER}@${CLUSTER_MASTER_IP}
108 chown jenkins:jenkins /var/lib/jenkins/jenkins-rsa*
109 chmod 600 /var/lib/jenkins/jenkins-rsa*
113 "cleanup-after-kud") cleanup_after_kud ;;
114 "install-credentials") install_credentials ;;
115 "install-jenkins") install_jenkins ;;
116 "install-jenkins-id") install_jenkins_id ;;
117 "install-lftools-credentials") install_lftools_credentials ;;
118 "update-jobs") update_jobs ;;
120 Usage: $(basename $0) COMMAND
123 cleanup-after-kud - Cleanup after KuD install
124 install-credentials - Install credentials into Jenkins
125 install-jenkins - Install Jenkins
126 install-jenkins-id - Install Jenkins ID into test cluster
127 install-lftools-credentials - Install lftools credentials
128 update-jobs - Install or update ICN jobs into Jenkins
130 Environment variables used by the commands:
131 WITH_VAGRANT=[yes|no] - Install components needed to run the VM
133 JENKINS_HOSTNAME - jenkins_hostname in vars.yaml
134 JENKINS_ADMIN_USERNAME - jenkins_admin_username in vars.yaml
135 JENKINS_ADMIN_PASSWORD - jenkins_admin_password in vars.yaml
136 JENKINS_LFTOOLS_USERNAME - The .netrc login
137 JENKINS_LFTOOLS_PASSWORD - The .netrc password
138 JENKINS_SSH_USERNAME - The gerrit account username
139 JENKINS_SSH_PRIVATE_KEY - The gerrit account private key file
140 CLUSTER_MASTER_IP - The cluster under test
141 CLUSTER_SSH_USER - The cluster account username