/
Jenkinsfile
117 lines (117 loc) · 3.47 KB
/
Jenkinsfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
pipeline {
agent { label "agentfarm" }
stages {
stage('Delete the workspace') {
steps {
sh "sudo rm -rf $WORKSPACE/*"
}
}
stage("Installing Chef Workstation") {
steps {
script {
def exists = fileExists '/usr/bin/chef-client'
if (exists) {
echo "Skipping Chef Workstation Install"
} else {
echo "Installing Chef Workstation"
sh 'sudo apt-get install -y wget tree unzip'
sh 'wget https://packages.chef.io/files/stable/chef-workstation/0.15.6/ubuntu/18.04/chef-workstation_0.15.6-1_amd64.deb'
sh 'sudo dpkg -i chef-workstation_0.15.6-1_amd64.deb'
sh 'sudo chef env --chef-license accept'
}
}
}
}
stage('Install Test Kitchen Gem') {
steps {
script {
sh 'chef exec gem list kitchen-docker | grep "kitchen-docker"'
sh 'if [[ $? > 0 ]]; then sudo chef gem install kitchen-docker && sudo chef env --chef-license accept; fi'
}
}
}
stage('Download Apache Cookbook') {
steps {
git credentialsId: 'git-repo-id', url: 'git@github.com:jeffmbelt/apache.git'
}
}
stage('Lint using Cookstyle') {
steps {
sh 'cd $WORKSPACE && /opt/chef-workstation/bin/chef exec cookstyle . --except Layout/EndOfLine'
}
}
stage('Run Kitchen Destroy') {
steps {
sh 'sudo kitchen destroy'
}
}
stage('Run Kitchen Create') {
steps {
sh 'sudo kitchen create'
}
}
stage('Run Kitchen Converge') {
steps {
sh 'sudo kitchen converge'
}
}
stage('Run Kitchen Verify') {
steps {
sh 'sudo kitchen verify'
}
}
stage('Kitchen Destroy') {
steps {
sh 'sudo kitchen destroy'
}
}
stage('Send Slack Notification') {
steps {
slackSend color: 'YELLOW', message: "Mr. Belt: Please approve ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.JOB_URL} | Open>)"
}
}
stage('Request Input') {
steps {
input 'Please approve or deny this build'
}
}
stage('Upload and Converge Nodes') {
steps {
withCredentials([zip(credentialsId: 'chef-starter-zip', variable: 'CHEFREPO')]) {
sh "rm $WORKSPACE/Policyfile.lock.json"
sh "chef install $WORKSPACE/Policyfile.rb -c $CHEFREPO/chef-repo/.chef/knife.rb"
sh "chef push prod $WORKSPACE/Policyfile.lock.json -c $CHEFREPO/chef-repo/.chef/knife.rb"
withCredentials([sshUserPrivateKey(credentialsId: 'agent-key', keyFileVariable: 'agentKey', passphraseVariable: '', usernameVariable: '')]) {
sh "knife ssh 'policy_name:apache' -x ubuntu -i $agentKey 'sudo chef-client' -c $CHEFREPO/chef-repo/.chef/knife.rb"
}
}
}
}
// stage('Trigger HA Proxy Update') {
// steps {
// build job: 'hapolicy-pipline', parameters: []
// }
// }
stage('Upload to Artifactory') {
steps {
rtUpload (
serverId: 'devops-art-server',
spec: '''{
"files": [ {
"pattern": "$WORKSPACE/recipes/*",
"target": "devops-lab/jeffb/"
} ]
}''',
)
}
}
}
post {
success {
slackSend color: 'GREEN', message: "Build $JOB_NAME $BUILD_NUMBER Successful!"
}
failure {
slackSend color: 'RED', message: "Build $JOB_NAME $BUILD_NUMBER Failed!"
}
}
}