{"id":15866,"date":"2024-02-27T12:18:40","date_gmt":"2024-02-27T06:48:40","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=15866"},"modified":"2025-07-31T23:46:34","modified_gmt":"2025-07-31T18:16:34","slug":"ci-cd-with-github-actions-concepts","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2024\/02\/27\/ci-cd-with-github-actions-concepts\/","title":{"rendered":"CI\/CD with GitHub Actions &#8211; Concepts"},"content":{"rendered":"\r\n<p>Welcome to the first part of our blog on GitHub Actions!<\/p>\r\n\r\n\r\n\r\n<p>This blog will delve into fundamental concepts essential for understanding GitHub Actions. Get ready to embark on a journey through the basics, paving the way for the upcoming implementation part of our blog. Stay tuned for hands-on demonstrations and practical applications in the next blog. Let&#8217;s dive in!<\/p>\r\n<p><!--more--><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>What is GitHub Actions?<\/strong><\/h2>\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/opstree.com\/blog\/2024\/02\/27\/ci-cd-with-github-actions-concepts\/\">GitHub Actions<\/a> enables users to automate various GitHub events, such as cloning a repository, generating Docker images, and testing scripts. Developers use it to automate workflows across issues, pull requests, and more. This means that users can build, test, and deploy code written in different languages and running on different platforms, all using the same automation tool.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>How do GitHub Actions work?<\/strong><\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p>GitHub Actions uses YAML files to define workflows. These <a href=\"https:\/\/opstree.com\/blog\/2024\/11\/18\/guide-to-implementing-gitops-with-argocd\/\">YAML files<\/a> are stored in a .github\/workflows directory in the user&#8217;s repository. Each workflow consists of one or more jobs, and each job consists of one or more steps.<\/p>\r\n\r\n\r\n\r\n<p>GitHub Actions provides a wide range of tools and features that make it easy for users to configure and manage their workflows. as i mentioned earlier in the first paragraph, GitHub Actions allows automation of your software development workflows.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Why should you use Github Actions? <\/strong><\/h2>\r\n\r\n\r\n\r\n<p>There are several benefits to using GitHub Actions for automation.<\/p>\r\n\r\n\r\n\r\n<p><strong>1. Simplified workflows: <\/strong>GitHub Actions simplifies the process of building, testing, and deploying code.<\/p>\r\n\r\n\r\n\r\n<p><strong>2. Integration with GitHub: <\/strong>GitHub Actions is tightly integrated with GitHub, which means that users can trigger actions based on events that occur within their repositories.<\/p>\r\n\r\n\r\n\r\n<p>4.<strong> Supports a wide range of platforms and languages<\/strong>: GitHub Actions supports many platforms and languages, means users can use the same automation tool for different projects and languages.<\/p>\r\n\r\n\r\n\r\n<p><strong>5. Secure and reliable: <\/strong>GitHub Actions also provides built-in security features, such as the ability to store secrets securely and to control access to workflows.<\/p>\r\n\r\n\r\n\r\n<p><strong>6. Cost-effective: <\/strong>GitHub Actions is a cost-effective automation tool. Users can use it for free for public repositories, and there is a generous free tier for private repositories.<\/p>\r\n\r\n\r\n\r\n<p><strong>7. Easy to get started: <\/strong>GitHub Actions is easy to get started with. Users can use the visual editor to create workflows.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><strong>How to set up GitHub action in GitHub repository :<\/strong><\/h3>\r\n\r\n\r\n\r\n<p>Till now, I have explained how one can add Github Action to the GitHub repository. I have taken an example of my <a href=\"https:\/\/opstree.com\/blog\/2022\/06\/21\/what-is-a-bare-git-repository\/\">Github Repository<\/a> which already has some code pushed into the main branch. In the GitHub repository, one must create (.github\/workflows\/directory) and add a .yml file.<\/p>\r\n\r\n\r\n\r\n<p><strong>There are two ways to create a .yml file. In this blog, I have explained (Through Web Application (Github) directly)<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Mention all the steps to create a .yml file:-<\/p>\r\n\r\n\r\n\r\n<p>a. Go to repository<\/p>\r\n\r\n\r\n\r\n<p>b. Click on Add File &gt; Create New File<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"652\" height=\"372\" class=\"wp-image-15906\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/10\/pppppppp.png?w=652\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>c. Enter .github\/workflows\/main.yml ( It has to be in the same sequence)<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"725\" height=\"180\" class=\"wp-image-15907\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/10\/fffffffff.png?w=725\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>d. Now, you can add the code to the main.yml file and commit changes to your GitHub repository.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>name: My GitHub Action Workflow <br \/>on: <br \/>  push:<br \/>  pull request:<br \/>    branches: <br \/>       - main<br \/>       - feature<br \/>       - stg<br \/>       - dev<br \/>  workflow dispatch:<br \/>     inputs:<br \/>      environment:<br \/>        type: environment<br \/>        description: Select the environment.<br \/>      Boolean:<br \/>        type: choice<br \/>        description: Make a choice.<br \/>        options:<br \/>         - prod<\/code><\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><strong>How to view GitHub action activity:<\/strong><\/h3>\r\n\r\n\r\n\r\n<p>Once the GitHub actions are configured and start running.<\/p>\r\n\r\n\r\n\r\n<ol>\r\n<li>Go to your repository on <a href=\"https:\/\/github.com\/\" target=\"_blank\" rel=\"noopener\"><strong>Github.com<\/strong><\/a><\/li>\r\n\r\n\r\n\r\n<li>Under the repository name, click on the Actions tab<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"745\" height=\"149\" class=\"wp-image-15916\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/10\/999999999.png?w=745\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p><strong>3. <\/strong>Select the workflow(My GitHub Action Workflow) you want to see from the left sidebar.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"370\" height=\"442\" class=\"wp-image-15918\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/10\/88888888.png?w=370\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p><strong>4. <\/strong>Under \u201cWorkflow \u201d click the name of the run you want to see.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"147\" class=\"wp-image-17597\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115320.png\" alt=\"\" srcset=\"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115320.png 800w, https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115320-300x55.png 300w, https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115320-768x141.png 768w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p><strong>5. <\/strong>One can view the result of each step by clicking on the workflow.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"458\" class=\"wp-image-17598\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115528.png\" alt=\"\" srcset=\"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115528.png 800w, https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115528-300x172.png 300w, https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115528-768x440.png 768w, https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115528-611x350.png 611w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"406\" class=\"wp-image-17600\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115840.png\" alt=\"\" srcset=\"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115840.png 800w, https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115840-300x152.png 300w, https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115840-768x390.png 768w, https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115840-690x350.png 690w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\r\n\r\n\r\n\r\n<p><strong>Here are some components of GitHub Actions or key concepts of <strong>GitHub Actions<\/strong> that I used<\/strong>.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><strong>The relationship between these components is illustrated below:<\/strong><\/h3>\r\n\r\n\r\n\r\n<p>Using the flow diagram of GitHub action, I&#8217;ll try to explain how GitHub action works.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"431\" class=\"wp-image-15952\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2023\/10\/screenshot-from-2023-10-14-20-24-38.png?w=684\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>In practice, workflows are more generalized than a <a href=\"https:\/\/www.buildpiper.io\/managed-security-observability\/\" target=\"_blank\" rel=\"noopener\">CD pipeline<\/a>, but they are closely related:<\/p>\r\n\r\n\r\n\r\n<ol>\r\n<li>Workflows = pipelines<\/li>\r\n\r\n\r\n\r\n<li>Jobs = stages<\/li>\r\n\r\n\r\n\r\n<li>Steps = the series of procedures that make up a stage<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p><strong>1. Name<\/strong><\/p>\r\n\r\n\r\n\r\n<p>A name for your workflow to help you identify it.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>name: My GitHub Action Workflow <br \/><\/code><\/pre>\r\n\r\n\r\n\r\n<p><strong>2. Trigger<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Specifies when the workflow should be executed. This can be based on events, schedules, or manual triggers. Trigger on a push or pull request to the main or features branch.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>on: <br \/>  push:<br \/>  pull request:<br \/>    branches: <br \/>       - main<br \/>       - feature<br \/>       - stg<br \/>       - dev<\/code><\/pre>\r\n\r\n\r\n\r\n<p><strong>3. Steps<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Specify the individual tasks or commands that should be executed within a job. Steps run sequentially, and you can use built-in or custom actions.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>    steps:<br \/>      - name: code checkout<br \/>        uses: actions\/checkout@v2.<br \/>      - name: Set up Java version<br \/>        uses: actions\/setup-java@v1.<br \/>        with:<br \/>          java-version: '11'<\/code><\/pre>\r\n\r\n\r\n\r\n<p><strong>4. Jobs<\/strong><\/p>\r\n\r\n\r\n\r\n<p>A workflow must have at least 1 job and can consist of multiple jobs that work together sequentially or in parallel. Each job is a series of steps that runs under the same runner (virtual environment).<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>jobs:<br \/>  build:<br \/>    runs-on: ubuntu-latest.<br \/>    steps:<br \/>      - name: code checkout<br \/>        uses: actions\/checkout@v2.<br \/>      - name: Set up Java version<br \/>        uses: actions\/setup-java@v1.<br \/>        with:<br \/>          java-version: '11'<br \/>      - name: Build with Maven<br \/>        run: mvn clean install.<br \/>      - name: Static Code Analysis with checkstyle<br \/>        run: mvn checkstyle:checkstyle<\/code><\/pre>\r\n\r\n\r\n\r\n<p><strong>5. Secrets<\/strong><\/p>\r\n\r\n\r\n\r\n<p>You can access secrets (encrypted environment variables) in your workflow, typically used for sensitive information like API keys or passwords.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>    steps:<br \/>      - name: Install rsync <br \/>        run: Sudo apt-get install rsync -y<br \/>      - name: Deploy to Server 1<br \/>        uses: easingthemes\/ssh-deploy@main<br \/>        env:<br \/>          SSH_PRIVATE_KEY: ${{secrets.EC2_SSH_KEY}}<br \/>          REMOTE_HOST: ${{ secrets.HOST_DNS }}<br \/>          REMOTE_USER: ${{ secrets.USERNAME }}<br \/>          TARGET: ${{ secrets.TARGET_DIR }}       <br \/>          aws-region: ${{ env.AWS_REGION }}<br \/>          ARGS: -r<br \/>          SCRIPT_BEFORE: |<br \/>              whoami<br \/>              ls -al <\/code><\/pre>\r\n\r\n\r\n\r\n<p><strong>6. Workflow<\/strong><\/p>\r\n\r\n\r\n\r\n<ol>\r\n<li>The workflow is an automated procedure that you add to your repository.<\/li>\r\n\r\n\r\n\r\n<li>They are made up of one or more jobs and can be scheduled or triggered by an event.<\/li>\r\n\r\n\r\n\r\n<li>It can be used to build, test, package, release, or deploy a project on GitHub.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p><strong>7. Runners<\/strong><\/p>\r\n\r\n\r\n\r\n<ol>\r\n<li>A runner is a server that has the GitHub Action Runner application installed.<\/li>\r\n\r\n\r\n\r\n<li>you can use a runner hosted by GitHub, or you can host your own.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p>GitHub Actions can use two types of runners: <strong>hosted and self-hosted. <\/strong><\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li><strong>Hosted runners<\/strong> are provided by GitHub and run on virtual machines in the cloud.<\/li>\r\n\r\n\r\n\r\n<li><strong>Self-hosted runners<\/strong> are machines that you set up and manage yourself. They run on your infrastructure.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"221\" class=\"wp-image-17601\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115943.png\" alt=\"\" srcset=\"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115943.png 800w, https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115943-300x83.png 300w, https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/Screenshot-2024-02-27-115943-768x212.png 768w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\r\n\r\n\r\n\r\n<p><strong>8. Actions<\/strong><\/p>\r\n\r\n\r\n\r\n<ol>\r\n<li>Actions are standalone commands that are combined into steps to create a job.<\/li>\r\n\r\n\r\n\r\n<li>Actions are the smallest portable building block of a workflow.<\/li>\r\n\r\n\r\n\r\n<li>You can create your own actions, or use actions created by the GitHub community to use actions in a workflow.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p><strong>9. Artifacts<\/strong><\/p>\r\n\r\n\r\n\r\n<ol>\r\n<li>Artifacts are files or outputs generated by a job or workflow run.<\/li>\r\n\r\n\r\n\r\n<li>You can archive artifacts for later use or share them between jobs within the same workflow.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>      -  name: Login to Docker using jfrog<br \/>         uses: docker\/login-action@v2.<br \/>         with:<br \/>           registry: ${{ secrets.REGISTRY_URL }}<br \/>           username: ${{ secrets.JFROG_USERNAME  }}<br \/>           password: ${{ secrets.JFROG_TOKEN }}<br \/>      -  name: push on a jfrog<br \/>         uses: docker\/build-push-action@v5.<br \/>         with:<br \/>           context: .<br \/>           file: .\/Dockerfile<br \/>           push: true<br \/>           tags: |<br \/>               bhanu007.jfrog.io\/docker\/${{GitHub. Sha}}<\/code><\/pre>\r\n\r\n\r\n\r\n<p><strong>10. Notifications<\/strong><\/p>\r\n\r\n\r\n\r\n<p>GitHub Actions provides notifications and status reporting, allowing you to receive alerts and updates on the status of your workflow runs via email, Slack, or other communication channels.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\r\n\r\n\r\n\r\n<p>GitHub Actions is a powerful automation tool that allows developers to build, test, and deploy their code directly from GitHub. It simplifies the process of building, testing, and deploying code, and is tightly integrated with GitHub.<\/p>\r\n\r\n\r\n\r\n<p>Overall, GitHub Actions is a valuable addition to the GitHub platform and is a great option for developers who want to automate their workflows.<\/p>\r\n\r\n\r\n\r\n<p>That&#8217;s it!<\/p>\r\n\r\n\r\n\r\n<p>I hope you found this tutorial helpful, and that you will be able to set up and manage this GitHub action workflow.<\/p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\"><\/div>\r\n\r\n\r\n\r\n<ul class=\"wp-block-social-links aligncenter is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-1 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-medium  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-twitter  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/twitter.com\/opstreedevops\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M22.23,5.924c-0.736,0.326-1.527,0.547-2.357,0.646c0.847-0.508,1.498-1.312,1.804-2.27 c-0.793,0.47-1.671,0.812-2.606,0.996C18.324,4.498,17.257,4,16.077,4c-2.266,0-4.103,1.837-4.103,4.103 c0,0.322,0.036,0.635,0.106,0.935C8.67,8.867,5.647,7.234,3.623,4.751C3.27,5.357,3.067,6.062,3.067,6.814 c0,1.424,0.724,2.679,1.825,3.415c-0.673-0.021-1.305-0.206-1.859-0.513c0,0.017,0,0.034,0,0.052c0,1.988,1.414,3.647,3.292,4.023 c-0.344,0.094-0.707,0.144-1.081,0.144c-0.264,0-0.521-0.026-0.772-0.074c0.522,1.63,2.038,2.816,3.833,2.85 c-1.404,1.1-3.174,1.756-5.096,1.756c-0.331,0-0.658-0.019-0.979-0.057c1.816,1.164,3.973,1.843,6.29,1.843 c7.547,0,11.675-6.252,11.675-11.675c0-0.178-0.004-0.355-0.012-0.531C20.985,7.47,21.68,6.747,22.23,5.924z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Twitter<\/span><\/a><\/li><\/ul>\r\n","protected":false},"excerpt":{"rendered":"<p>Welcome to the first part of our blog on GitHub Actions! This blog will delve into fundamental concepts essential for understanding GitHub Actions. Get ready to embark on a journey through the basics, paving the way for the upcoming implementation part of our blog. Stay tuned for hands-on demonstrations and practical applications in the next &hellip; <a href=\"https:\/\/opstree.com\/blog\/2024\/02\/27\/ci-cd-with-github-actions-concepts\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;CI\/CD with GitHub Actions &#8211; Concepts&#8221;<\/span><\/a><\/p>\n","protected":false},"author":241065127,"featured_media":29464,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[209196],"tags":[44070,768739308,768739295,5603054,768739329,768739406,4996032],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/02\/CICD-with-GitHub-Actions.jpg","jetpack_likes_enabled":false,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-47U","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/15866"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/241065127"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=15866"}],"version-history":[{"count":45,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/15866\/revisions"}],"predecessor-version":[{"id":29463,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/15866\/revisions\/29463"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/29464"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=15866"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=15866"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=15866"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}