Build and Deploy a Go Project
Prerequisites
- You need to enable the KubeSphere DevOps System.
- You need to have a Docker Hub account.
- You need to create a workspace, a DevOps project, a project, and an account (
project-regular
). This account needs to be invited to the DevOps project and the project for deploying your workload with the roleoperator
. For more information, see Create Workspaces, Projects, Accounts and Roles.
Create a Docker Hub Access Token
Log in to Docker Hub and select Account Settings from the menu in the top right corner.
Click Security and New Access Token.
Enter the token name and click Create.
Click Copy and Close and remember to save the access token.
Create Credentials
You need to create credentials in KubeSphere for the access token created so that the pipeline can interact with Docker Hub for imaging pushing. Besides, you also create kubeconfig credentials for the access to the Kubernetes cluster.
Log in to the web console of KubeSphere as
project-regular
. Go to your DevOps project and click Create in Credentials.In the dialog that appears, set a Credential ID, which will be used later in the Jenkinsfile, and select Account Credentials for Type. Enter your Docker Hub account name for Username and the access token just created for Token/Password. When you finish, click OK.
Tip
For more information about how to create credentials, see Credential Management.
Click Create again and select kubeconfig for Type. Note that KubeSphere automatically populates the Content field, which is the kubeconfig of the current user account. Set a Credential ID and click OK.
Create a Pipeline
With the above credentials ready, you can create a pipeline using an example Jenkinsfile as below.
To create a pipeline, click Create on the Pipelines page.
Set a name in the pop-up window and click Next directly.
In this tutorial, you can use default values for all the fields. In Advanced Settings, click Create directly.
Edit the Jenkinsfile
In the pipeline list, click this pipeline to go to its detail page. Click Edit Jenkinsfile to define a Jenkinsfile and your pipeline runs based on it.
Copy and paste all the content below to the pop-up window as an example Jenkinsfile for your pipeline. You must replace the value of
DOCKERHUB_USERNAME
,DOCKERHUB_CREDENTIAL
,KUBECONFIG_CREDENTIAL_ID
, andPROJECT_NAME
with yours. When you finish, click OK.pipeline {
agent {
node {
label 'maven'
}
}
environment {
// the address of your harbor registry
REGISTRY = 'docker.io'
// your docker hub username
DOCKERHUB_USERNAME = 'yuswift'
// docker image name
APP_NAME = 'devops-go-sample'
// ‘dockerhubid’ is the credential id you created in KubeSphere for docker access token
DOCKERHUB_CREDENTIAL = credentials('dockerhubid')
//the kubeconfig credential id you created in KubeSphere
KUBECONFIG_CREDENTIAL_ID = 'go'
// the name of the project you created in KubeSphere, not the DevOps project name
PROJECT_NAME = 'devops-go'
}
stages {
stage('docker login') {
steps{
container ('maven') {
sh 'echo $DOCKERHUB_CREDENTIAL_PSW | docker login -u $DOCKERHUB_CREDENTIAL_USR --password-stdin'
}
}
}
stage('build & push') {
steps {
container ('maven') {
sh 'git clone https://github.com/yuswift/devops-go-sample.git'
sh 'cd devops-go-sample && docker build -t $REGISTRY/$DOCKERHUB_USERNAME/$APP_NAME .'
sh 'docker push $REGISTRY/$DOCKERHUB_USERNAME/$APP_NAME'
}
}
}
stage ('deploy app') {
steps {
container('maven') {
kubernetesDeploy(configs: 'devops-go-sample/manifest/deploy.yaml', kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID")
}
}
}
}
}
Note
If your pipeline runs successfully, images will be pushed to Docker Hub. If you are using Harbor, you cannot pass the parameter to
docker login -u
via the Jenkins credential with environment variables. This is because every Harbor robot account username contains a$
character, which will be converted to$$
by Jenkins when used by environment variables. Learn more.
Run the Pipeline
After you finish the Jenkinsfile, you can see graphical panels display on the dashboard. Click Run to run the pipeline.
In Activity, you can see the status of the pipeline. It may take a while before it successfully runs.
Verify Results
A Deployment will be created in the project specified in the Jenkinsfile if the pipeline runs successfully.
Check whether the image is pushed to Docker Hub as shown below: